答案1
在 debian 上,您可以将 Xvfb 命令添加到/etc/rc.local
.如果 Xvfb 没有将自身分离到后台,请&
在命令末尾使用 。
使用 cron 也可以工作,尽管 init 脚本可以让您更好地控制启动序列中它将运行的确切时间,并且是启动服务的传统方式。
答案2
作为@吉尔斯建议,它更适合按需运行,特别是当您使用它进行 Selenium 测试时。下面是 shell 命令示例:
export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &
使用之前检查显示xdpyinfo
将确保您不会运行虚拟帧缓冲区两次。
如果确实需要开机启动,可以尝试以下方法初始化文件脚本:
#!/bin/sh
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
start-stop-daemon --stop --quiet --pidfile $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
exit 1
esac
exit 0
来源:dloman/xvfb 在 GitHub 上(分叉自:jterrace/xvfb)
将其另存为/etc/init.d/xvfb
并使其可执行,然后将其启动为:
/etc/init.d/xvfb start
要在启动时自动运行,请运行:
sudo update-rc.d xvfb defaults
要将其从自动运行中删除,请运行:
sudo update-rc.d -f xvfb remove
还要添加到environment
X 程序可以识别的文件中,例如:
echo DISPLAY=":1" | sudo tee -a /etc/environment
这是 systemd 版本:dloman/xvfb.service。
答案3
您的前提无效:没有理由以 root 身份运行 Xvfb。你常用的 X 服务器只需要以 root 身份运行(在许多但不是所有的 unice 上),这样它就可以访问视频硬件;根据定义,这对于 Xvfb 来说不是问题。
如果您想在启动时运行 Xvfb,可以使用 cron@reboot
替换五个日期和时间字段。您可以在任何用户的 crontab 中执行此操作,而不仅仅是 root 的 crontab。但我不明白这一点。如果您在需要时启动 Xvfb,您的脚本将会更加健壮,就像您最初计划的那样。