有时候我们不关注程序是否有界面(比如自动化测试),只要程序在运行就可以了
很感谢 xvfb 这个工具给我们提供了相关的功能
比如在没有 X server 的机器上运行 gedit, 可以用下面的命令
xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24" gedit
xvfb 这个工具相当于一个wrapper, 给应用程序提供虚拟的 X server
用 ps auxf 观察进程的结构,可以发现 xvfb-run 首先创建了 Xvfb:103 这个 daemon 子进程,而后再运行 gedit
...
\_ /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0 1280x760x24 gedit
\_ Xvfb :103 -screen 0 1280x760x24 -nolisten tcp
\_ gedit
如果,自己编写一个脚本 1.sh, 内容是显示 $DISPLAY 变量
---- 1.sh ---
echo $DISPLAY
再用下面的命令运行
xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24" ./1.sh
输出是
:103
而查看进程,原来 deamon 提供 DISPLAY :103
\_ /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0 1280x760x24 ./1.sh
\_ Xvfb :103 -screen 0 1280x760x24 -nolisten tcp
再用命令查看 netstat -ln, 可以看到提供服务的 unix socket
...
unix 2 [ ACC ] STREAM LISTENING 2060030 /tmp/.X11-unix/X103
...
总结:
xvfb 是通过提供一个类似 X server 守护进程 和 设置程序运行的环境变量 DISPLAY 来提供程序运行的环境