Xvfb 是什麼呢,他的名稱是 virtual framebuffer X server for X Version 11, Xvfb 可以直接處理 Window 的圖形化功能,並且不會把圖像輸出到螢幕上,也就是說,就算你的電腦沒有啟動 Xwindow , 你仍然可以執行任何圖形程式。
這頁文章就是要介紹如何在 Terminal Linux 中使用 Xvfb 打開 Firefox Browser。
為何要安裝 Xvfb
一開始試用 Xvfb ,只是單純的因為我的 Linux 是 CentOS ,並且沒有裝 Xwindow ,所以在使用 Selenium 測試的時候,沒辦法 Local 打開 Browser,後來我發現可以使用 Xvfb ,這個虛擬 window 的程式來假裝 Xwindow。
不用還好,一用就愛上他了,平常使用 Selenium 測試的時候,會在本機端打開 Browser ,這時螢幕就會自動 Focus 在 Browser 上,但是我並不想眼睛一直叮著 Browser 看,而用了 Xvfb,就沒有這個問題,所有的視窗操作都在虛擬框架中,我可以一邊寫我的程式,一邊等待執行結果,另外 Selenium 執行的速度也比沒有用 Xvfb 快很多。
安裝 xvfb
sudo yum install xorg-x11-server-Xvfb
啟動 Xvfb
Xvfb :2 -screen 0 1024x768x16
系統環境變數的設定。
上一句指令中有個 「:2」,這是指說我要 X11 這個程序將顯示圖像輸出的結果丟到 2 號螢幕上,接著我們再定義 2 號螢幕是什麼,我要輸入指令 export DISPLAY=:2
,指定我的 Terminal 是 2 號螢幕,為了以後執行方便,我直接將這個設定寫到 .bash_profile 中。
- export DISPLAY=:2
- export BROWSER_PATH=/home/username/firefox/
- PATH=$PATH:$BROWSER_PATH
下載firefox
- download 32 bit:
http://download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/21.0/linux-i686/en-US/firefox-21.0.tar.bz2
- 64 bit
http://download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/39.0/linux-x86_64/zh-TW/firefox-39.0.tar.bz2
將 Firefox 解壓縮後 tar -jxvf firefox-21.0.tar.bz2
,並將目錄設定在 /home/username/firefox/,請先確定一下 firefox 的執行檔是否存在,路徑會是: /home/username/firefox/firefox。
接著你就可以啟動 Selenium ,來測看看 Selenium 有沒有正常運作了。
Selenium 有正確執行並且收到打開 Browser 的指令時,你就會看到下面這些訊息。
- 14:18:33.346 INFO - Started SocketListener on 0.0.0.0:4444
- 14:18:33.352 INFO - Started org.openqa.jetty.jetty.Server@ee1aeb
- 14:18:42.492 INFO - Executing: [new session: Capabilities [{browserName=firefox}]])
- 14:18:42.817 INFO - Creating a new session for Capabilities [{browserName=firefox}]
Linux Browser 支援中文
完成上述的流程後,你應該會發現,Browser 的擷圖裡,中文字都變成亂碼了,下載下面這兩個 RPM ,並安裝就可以解決中文的問題。
sudo rpm -ivh chkfontpath-1.9.7-1.i386.rpm --nodeps --force
sudo rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm --nodeps --force
DEMO Video
XF86AudioMicMute error
Eclipse: Fatal IO error 11 (資源暫時無法取得) on X server :2.
The XKEYBOARD keymap compiler (xkbcomp) reports:
Internal error: Could not resolve keysym XF86AudioMicMute
Errors from xkbcomp are not fatal to the X server
打開 /usr/share/X11/xkb/symbols/inet 這個檔案,把 XF86AudioMicMute 這一行註解