2014
Jun
08

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 中。


.bash_profile
  1. export DISPLAY=:2
  2. export BROWSER_PATH=/home/username/firefox/
  3. 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 的指令时,你就会看到下面这些讯息。

Example
  1. 14:18:33.346 INFO - Started SocketListener on 0.0.0.0:4444
  2. 14:18:33.352 INFO - Started org.openqa.jetty.jetty.Server@ee1aeb
  3. 14:18:42.492 INFO - Executing: [new session: Capabilities [{browserName=firefox}]])
  4. 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 这一行注解

相关资料


回應 (Leave a comment)