在 2008 年的時候 xdite 寫過一篇「在 Linux 上架設 Screenshot Service」,不過現在是 2010 年了,不少當初有問題的地方都已經改善了,現在要架比之前方便不少...
測試的平台同樣是在 Linode (referral code 是 fdbacc96dbddafce9ba444dd678357416d0323d5
) 上跑 Debian lenny (也就是 5.0 版),為了避免 Adobe Flash Player 在 Linux amd64 上會出問題,我在 Linode 上用 32bits 版。
Linode 把預設的 Debian 裝完後,先把整個系統升級到 Debian squeeze 並且重開,然後先裝「locales」這個套件,再用 dpkg-reconfigure locales
把 en_US.UTF-8 以及你自己會用到的 locale 勾起來。
接著開始裝必要的套件:
- flashplugin-nonfree
- iceweasel
- ttf-arphic-bkai00mp
- ttf-arphic-bsmi00lp
- ttf-arphic-gbsn00lp
- ttf-arphic-gkai00mp
- ttf-arphic-ukai
- ttf-arphic-uming
- ttf-wqy-zenhei
- xvfb
Iceweasel 其實就是 Firefox,因為商標問題而在 Debian 上有不同的名字。在英文版維基百科的「Mozilla Corporation software rebranded by the Debian project」這篇文章裡把前因後果講得很清楚,這邊就不提了...
除了必要的套件外,接下來裝 TightVNC server,準備透過 VNC 設定 Iceweasel。設完後可以移除掉或是留下來,我自己是留下來 (反正檔案不大),有時候可能要進去 about:config
調整參數...
TightVNC server 用 tightvncserver :0
跑起來,然後遠端連進去把 Iceweasel 跑起來測試看看有沒有問題 (可以透過 PuTTY 的 tunnel 將傳輸過程加密),沒有問題的話就裝「torisugari: Command Line Print」這個套件,裝好後再把 Xvfb 跑起來,用這個指令抓圖:
DISPLAY=:2.0 iceweasel -print http://zh.wikipedia.org/ -printmode png -printfile ~/zh.wikipedia.org.png -printdelay 10
抓出來的 screenshot 就會像這樣:(點這裡看原大小圖片)
Flash 也沒問題:(點這裡看原大小圖片)
比起之前的方法,現在的方案有兩個好處:首先是 plugin 是照正規方法裝進去,而不是直接丟 xpi,可以避免遇到奇怪的靈異現象時懷疑是不是安裝時硬塞造成的。再來是 Iceweasel 會在抓完就 shutdown,所以在網路速度夠快的時候可以提前結束,而網路不夠快時也不用擔心抓到未完成圖...
當然剩下有很多細節要處理啦,不過那是另外一回事了...