這裡介紹許多可以在 Raspberry Pi 中擷取螢幕畫面的工具,除了 X Window 視窗環境之外,終端機介面的畫面也可以直接儲存下來。

X Window 視窗環境

首先介紹在 X Window 視窗環境下的畫面擷取工具。

Shutter

Shutter 是一個在 X Window 下多功能的視窗畫面擷取工具,不過由於它整個程式很大,相依套件也很多,在 Raspberry Pi 這樣的硬體上執行會有點慢,不過對於不熟悉指令的人來說,也算是一個不錯的工具。

Shutter 可以透過 apt 直接安裝:

sudo apt-get install shutter

安裝完成後,就可以在系統的選單中看到 Shutter 這個軟體了。

raspberry-pi-screenshot-1

Shutter 的介面很容易上手,自己玩一下就知道怎麼使用了。

raspberry-pi-screenshot-2

Shutter 在執行之後,在系統圖示列會出現一個 Shutter 的圖示,可以方便使用者快速擷取畫面,您可以把主視窗關掉,透過這個選單來擷取畫面。

raspberry-pi-screenshot-3

Scrot

Scrot 是一個小巧的畫面擷取工具,不會佔用系統太多的資源,又可以快速擷取畫面。

Scrot 也可以利用 apt 安裝:

sudo apt-get install scrot

安裝好之後,直接執行就會將目前的螢幕畫面照下來:

scrot

而照下來的圖檔預設會放在家目錄中(也就是 /home/pi/ 中),依照日期與時間來命名。
scrot 指令常用的參數如下:

  • -b--border:當擷取單一視窗時,連同視窗框邊一併擷取。
  • -c--count:擷取畫面之前,顯示倒數數字。
  • -d--delay NUM:指定延遲擷取的秒數。
  • -e--exec APP:指定後續處理擷取圖檔的程式。
  • -q--quality NUM:指定圖片的品質(壓縮程度),可用的值為 1100,預設為 75
  • -m--multidisp:啟用多螢幕擷取(擷取多個螢幕的畫面後,再將其合併為一張圖)。
  • -s--select:使用滑鼠指定要擷取的視窗或是範圍。
  • -u--focused:擷取目前作用中的視窗。
  • -t--thumb NUM:自動產生縮圖,NUM 可指定為百分比或是實際縮圖大小(如 50x60)。

終端機(Console)環境

在終端機下我們也可以靠著一些指令工具來擷取目前的畫面。

使用 /dev/fb0ffmpeg

在 Linux 系統中我們可以直接透過 framebuffer(/dev/fb0)來擷取目前的畫面內容:

cat /dev/fb0 > fb.raw

不過這裡面的資料擷取下來之後,還要再經過 ffmpeg 轉檔之後才能使用,使用前要先安裝一下 ffmpeg

sudo apt-get install ffmpeg

再將剛剛擷取的 fb.raw 轉為 png 檔:

ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565le -s 1232x992 -i fb.raw -f image2 -vcodec png screen.png

這裡產生的 screen.png 圖檔內容就是剛剛擷取的畫面。下面這張是我裁切過圖,這比起用相機照的照片清楚得多了。

raspberry-pi-screenshot-4

這裡要注意一點,ffmpeg 在轉檔時需要使用 -s 參數指定螢幕的解析度(以這個例子來說是 1232x992),這個部分請依照您的系統設定自己更改,如果不知道自己的螢幕解析度,可以使用 fbset 來查看:

fbset -i

它的輸出會像這樣
mode “1232×992”
    geometry 1232 992 1232 992 16
    timings 0 0 0 0 0 0 0
    rgba 5/11,6/5,5/0,0/16
endmode
Frame buffer device information:
    Name        : BCM2708 FB
    Address     : 0x1c006000
    Size        : 2444288
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 1
    YPanStep    : 1
    YWrapStep   : 0
    LineLength  : 2464
    Accelerator : No

從這裡就可以看出螢幕的解析度為何。

raspi2png

raspi2png 是 Andrew Duncan 開發的小工具,可以透過 vc_dispmanx_snapshot 擷取畫面。

首先安裝 png 函式庫:

sudo apt-get install libpng12-dev

從 GitHub 下載 raspi2png 的原始碼:

git clone https://github.com/AndrewFromMelbourne/raspi2png.git

編譯 raspi2png

cd raspi2png
make

編譯完成後,會產生 raspi2png 這個可執行檔,直接執行它就可以擷取目前的畫面:

./raspi2png

raspi2png 指令可用的參數有:

  • --pngname <name>:指定輸出的 png 檔名,預設為 snapshot.png
  • --height <height>:指定圖片高度,預設為螢幕畫面高度。
  • --width <width>:指定圖片寬度,預設為螢幕畫面寬度。
  • --delay <delay>:指定延遲秒數,預設為 0 秒。
  • --stdout:輸出至標準輸出(stdout)。
  • --help:顯示說明訊息。

fb2png

fb2pngraspi2png 類似,不過他是直接從 framebuffer 擷取畫面的。

首先安裝 png 函式庫:

sudo apt-get install libpng12-dev

從 GitHub 下載 fb2png 的原始碼:

git clone https://github.com/AndrewFromMelbourne/fb2png.git

編譯 fb2png

cd fb2png
make

編譯完成後,會產生 fb2png 這個可執行檔,直接執行它就可以擷取目前的畫面:

./fb2png

fb2png 指令可用的參數有:

  • -p <name>:指定輸出的 png 檔名,預設為 fb.png
  • -d <device>:指定擷取的設備。

如果您對於樹莓派的應用有興趣,建議您可以繼續閱讀物聯網的相關文章。

參考資料:Raspberry Pi Spy台灣樹莓派