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 这一行注解