在 Linux 上架設 Screenshot ServiceBlog.XDite.net » 车东's shared items in Google Reader

前兩個禮拜公開的「民怨網」這個 Service,眼尖的人應該有發現,民怨網是使用 PPT.cc 提供的有圖有真相 API 服務對網站做了截圖快照的功能。

「有圖有真相」網是在跟 PPT 站長在喇賽時,提到我之前在做「華文不及格大獎」時,一直想加上幫部落格拍照的功能,但是 survey Linux Solution 時一直兜不出來,問他有沒有興趣一起解決這個問題,之後誕生的。他是使用了一套 Windows Software 截 IE 的圖,然後自己寫程式暴力呼叫幹出了「有圖有真相」網。

有強者寫出截圖 Service ,而且還有神秘的 API 可以神,當然是快樂的用 XD。

不過用歸用,我自己還是有股好勝心想挑戰這個謎題。因為不管怎麼樣,Pure Linux Solution 還是比較蘇湖啊 XD

基本的想法:手上只有一台向 Linode.com 租的 VPS 跑 Linux Server,我想嘗試在上面跑 Firefox 截圖達到我的目的。

(之前失敗是因為嘗試用 html2ps , ps2jpg 然後卡在莫名其妙的地方)

這是最後做出來的成果:

pixnet

---
簡單記述一下我是怎麼做出來的:

我在 Linode 上面跑的 Linux 版本是 Ubuntu 8.04 Server。要在上面跑 Firefox 截圖,最大的問題是必須讓 Firefox 必須跑在 X 上。但前面已經說了這是沒有圖形裝置的 VPS,於是解法就剩下讓 Firefox 跑在 VNC 或 xvfb 兩種方式

用 VNC 顯然是比較直覺的,因為可以用 VNC viewer 進去裝東西,怎麼想都比較快(但是我踩到了一堆 X11 相依的雷,最後放棄)。所以我用的是讓 Firefox 跑在 xvfb (虛擬的 X-window 環境)的方式。

安裝步驟 :

1. (Clean) Ubuntu 8.04 Server
2. sudo apt-get install ubuntu-desktop
3. sudo apt-get install xvfb
4. sudo apt-get install netpbm
5. sudo apt-get install firefox-3.0

拍照方式:

PLAIN TEXT
CODE:
  1. killall firefox Xvfb 
  2.  Xvfb :2 -screen 0 1024x768x24 -fbdir /tmp -nolisten inet6 & 
  3.  sleep 10 
  4.  DISPLAY=:2.0 firefox -width 1024 -height 768 http://www.google.com & 
  5.  sleep 10 
  6.  xwd -display :2.0 -root -out shot.xwd 
  7.  xwdtopnm shot.xwd> shot.pnm 
  8.  pnmscale -xysize 200 150 shot.pnm> shotsmall.pnm 
  9.  pnmtojpeg shotsmall.pnm> shot_thumb.jpg 
  10.  pnmtojpeg shot.pnm> shot.jpg

這樣就能達到想要的網站截圖功能。(on Linux VPS !!!!!!)

不過到目前為止還沒有達到 100% 我要的功能,拍照當然是要拍全身的啊!

我又在 Firefox 上又裝了這個 Plugin:Pearl Crescent Page Saver,用 command 魂達到了這個目的 XD ( 我花 15 USD 買了 pro,因為 pro 版本在 command 列可以下支援更多參數

到這一步的時候又會踩到幾個雷:

* 把 Firefox 關掉再打開時,會跳出 Restore Session 的詢問選項,但是在 command 列上沒有滑鼠可以進去按確定,所以會卡住。要在 ~/.mozilla/firefox/xxxxx.default/prefs.js 裡加入這兩行叫他遇到同樣情形時閉嘴。

PLAIN TEXT
CODE:
  1. user_pref("browser.sessionstore.enabled", false);
  2. user_pref("browser.sessionstore.resume_from_crash", false);

* 用 command line 安裝 plugin xpi 時( firefox -install-global-extension xxxx.xpi),又會跳出確定信任的詢問框需要按確定,我照了這一篇的指示要 Firefox 閉嘴,但還是未遂。

最後的解法蠻 XD 的,因為耗費了太多時間在解決這個問題,搞到我生氣了,暴力將 windows 的 FF extension 目錄扔上去 linux 上,結果成功 XD。

大致上都搞定了,剩下最後的問題。就是要讓這個 Firefox 支援 Flash。但是 sudo apt-get install flashplugin-nonfree 拿到的是 Flash 區跑不出來的結果。於是我參照這一篇解掉了 flashplugin-nonfree 爛掉的問題

剩下的拉哩拉雜就是自己寫 daemon 設計 queue、API,不過這就不是本篇的重點了。

Anyway,在安裝上有任何問題歡迎留下你的 commant :)

----
延伸閱讀:

How to Capture & Save Screenshots of Webpages - Digital Inspiration
Pearl Crescent Page Saver Documentation (Basic & Pro Editions)
Whirix Technical Blog: Screenshots of Web Pages
Xvfb, Firefox, and screenshots - dslreports.com
How to install Adobe Flash Player 10 in Ubuntu 8.04 (32 bit and 64 bit Hardy heron) -- Ubuntu Geek


^==Back Home: www.chedong.com

^==Back Digest Home: www.chedong.com/digest/

<== 2008-10-27
  十月 2008  
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
==> 2008-10-29