天天看點

CentOS安裝scrot記1. 安裝2. 運作時libgiblib.so動态庫問題3. 使用方法

似乎感覺這個事件沒什麼好寫的,但我還是記一下。

centos下沒有個很爽的截圖軟體,網上學友們都推薦scrot這個。

提示:在gnome下,可以用 gnome-screenshot 指令行進截屏,詳細使用方法請 man。安裝scrot實在太折騰了!

下載下傳下來安裝,可能會遇到一個庫:giblib,而giblib又依賴imlib2。在這個freecode.com網上都可以下載下傳。怎麼我安裝,我不再多說了,莫非都是:

你懂的,在./configure過程中缺什麼就去找什麼。

在 make 的時候,出現以下錯誤:

in file included from main.c:26:

scrot.h:29:22: error: x11/xlib.h: no such file or directory

在網上查得原因,需要安裝:libx11-devel

這個錯誤就過了。

不過又出現了這個錯誤:

in file included from /usr/local/include/giblib/giblib.h:30,

                 from scrot.h:51,

                 from main.c:26:

/usr/local/include/giblib/gib_imlib.h:32:20: error: imlib2.h: no such file or directory

這是 imlib 庫沒有安裝的原因。

下載下傳庫 imlib2-1.4.4 進行安裝,make 時報錯:

api.c:5:34: error: x11/extensions/shape.h: no such file or directory

in file included from api.c:23:

ximage.h:5:33: error: x11/extensions/xshm.h: no such file or directory

還有錯誤:api.c:30:22: error: ft2build.h: no such file or directory

報錯:/usr/include/ft2build.h:56:38: error: freetype/config/ftheader.h: no such file or directory

再 make,報錯:api.c:5416: fatal error: opening dependency file .deps/api.tpo: permission denied

缺權限。那就 sudo make

發現 /usr/lib/ 下有兩個類似的庫,但就是沒有 libpng12.so,将 libpng12.so.0 檔案連結到 /usr/lib/libpng12.so 上。

再 make,報錯:loader_png.c:2:17: error: png.h: no such file or directory

再 make,報錯:

loader_png.c: in function ‘load’:

loader_png.c:61: error: dereferencing pointer to incomplete type

loader_png.c: in function ‘save’:

loader_png.c:268: error: dereferencing pointer to incomplete type

打開 loader_png.c 檔案,發現确定引用到了 png_structp 的類型。

png_ptr 就是 png_structp 類型的。在這個檔案裡沒有定義 png_structp 的類型,頭檔案也隻包含了 png.h

用 locate png.h 找到 /usr/local/include/png.h,打開檔案發現:

檔案中沒有定義 png_struct_def 結構體。找源檔案中去找找看。

在源碼的 ./pngstruct.h 檔案裡有定義。但 png.h 檔案沒有 #include "pngstruct.h",是以報錯。

筆者估計png庫的設計都并沒有打算将 png_struct_def 的結構體的内部成員暴露出來,是以在 png.h 檔案裡沒有定義,隻是指定了指針與通路函數。沒想到在 png_loader.c 裡破了這個規距。

既然如此,那麼就好辦了。将 pngstruct.h 檔案copy到 /usr/local/include/ 目錄下去。再在 png_loader.c 檔案裡 #include <pngstruct.h> 就行了。

loader_png.c:62: error: ‘png_struct’ has no member named ‘jmpbuf’

loader_png.c:269: error: ‘png_struct’ has no member named ‘jmpbuf’

說明剛剛的修改生效了,隻是 png_struct_def 中确實沒有 jmpbuf 這個字段。這很可能是版本不一緻導緻的。

在本人 libpng 的版本中,沒有 jmpbuf 這個字段,但是提供了一個從 png_struct_def 中擷取 jmpbuf 的函數接口

用 png_jmpbuf(png_ptr) 來替代對 png_ptr->jmpbuff 的直接通路。

再 make,這次通過了!

好!imlib2-1.4.4 是編譯通過了。再回來 make scrot。

很順利,也通過了!

全部安裝完成功了之後,運作scrot時出現一個錯誤:

scrot: error while loading shared libraries: libgiblib.so.1: cannot open shared object file: no such file or directory

說是libgiblib.so.1打不開。解決的方法是:

(1)找到這個libgiblib.so.1檔案。

好了,現在可以使用了。

[一般用法] 使用 scrot 可以抓取整個桌面、某個指定的視窗、以及選擇的矩形區域。

  抓取桌面:scrot desktop.png,該指令将目前的整個桌面抓取下來,并儲存為 desktop.png 檔案。可以在目前的目錄中找到此圖像檔案。

抓取視窗:scrot -bs window.png,選項 b 使 scrot 在抓取視窗時一同将外邊框抓取下來,而 s 選項則讓使用者選擇所要抓取的是何視窗。

抓取區域:scrot -s rectangle.png,在執行此指令後,使用滑鼠拖曳的矩形區域将被 scrot 抓取下來,并儲存為 rectangle.png 檔案。

[進階用法] 對于普通的抓取,使用 scrot 的基礎便足以應付了。但在某些特殊情況之下,使用 scrot 抓取圖像需要講究一些技巧。

延時抓取:scrot -cd 10 menu.png,此指令中的 d 選項用于延時抓取圖像,其後的 10 代表延時 10 秒;前面的選項 c 顯示倒計時。在抓取菜單或是指令提示時,該技巧将充分展示其魔力。

生成縮圖:scrot -t 50% thumb.png,這個指令在抓取圖像的同時生成該圖像的縮略圖。選項 t 将打開此功能,其後的 50% 為原圖的縮放百分比。

更改品質:scrot -q 70 quality.jpg,此指令中的 q 選項用于更改所抓圖像的品質,其數值介于 1-100 之間,預設為 75。數值越大,意味着圖像品質越高;同時,圖像的壓縮率也就越低,占用空間越大。

操作抓圖:scrot action.png -e ‘mv $f ~/images/’,該指令将抓取的圖像移動到 ~/images/ 目錄。顯然,操作圖像的功能由 e 選項開啟,其中的 $f 代表原圖的路徑/檔案名。

  以上示例皆指定了需要儲存的抓圖的檔案名稱。實際上,如果不指定名稱,那麼 scrot 在抓取圖像後會自動使用目前的日期時間、寬度高度的組合來生成檔案名稱。如:2012-07-21-154232_238x148_scrot.png

  然而這樣還是不太友善。可以建立一個檔案,如screenshot

touch screenshot

vim screenshot(如果沒有安裝vim,可以執行sudo apt-get install vim進行安裝)

輸入 scrot -s -e ‘mv $f ~/screenshots’(注:mv $f ~/screenshots指令兩邊為單引号)

儲存退出vim,然後 chmod u+x screenshot

  這樣就可以通過運作screenshot檔案來執行scrot了。或者可以通過建立軟連結來使用scrot。比如:在/usr/bin目錄下執行sudo ln -s ~/screenshot scs。以後直接在終端裡輸入scs即可用滑鼠截圖。

繼續閱讀