如何在Debian上启动时启动Xvfb?


9

我有一个Debian Web服务器,偶尔通过Selenum和Python进行屏幕抓取。

当受Selenium控制时,我将Xvfb用作Firefox的虚拟X服务器。鉴于我(认为)必须使用sudo来启动它,所以我认为每次都无法从Python启动它(请参阅我的Stack Overflow问题),因此我认为我可以一直运行它。

我目前在命令行中这样启动它:

sudo Xvfb :99 -nolisten tcp -fbdir /var/run

我应该使用哪种方法在启动时自动执行此操作?我应该cron按照这里的建议使用吗?

Answers:


6

在debian上,您可以将Xvfb命令添加到/etc/rc.local。如果Xvfb不会将自身分离到后台,请&在命令末尾使用。

使用cron也可以工作,尽管init脚本可以让您更好地控制启动顺序(何时运行),这是传统的启动服务方式。


啊哈,太好了。编辑/etc/rc.local比使用update-rc.d自己的个人脚本优先吗?
Paul D. Waite

2
@Paul我想说update-rc.d是首选,并且当然更胜任,但rc.local更快,更容易。另外,我认为Gilles是正确的,没有理由需要以root身份运行。
安迪(Andy)

4

您的前提是无效的:没有理由以root用户身份运行Xvfb。您通常的X服务器仅需要以root身份运行(在许多但不是全部的unice上),以便它可以访问视频硬件。从定义上来说,这对于Xvfb而言不是问题。

如果要在启动时运行Xvfb,则可以使用cron @reboot替换五个日期和时间字段。您可以在任何用户的crontab中执行此操作,而不仅仅是root用户。但我不明白这一点。如果在需要时启动Xvfb,则脚本似乎更加健壮,就像最初计划的那样。


有效点。要仅对一个命令运行Xvfb,您可以使用xvfb-runXvfb附带的命令。这是xvfb-run manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html的cli参考。@Paul,您可以按以下方式运行它:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
sebisnow

4

正如@Gilles建议的那样,它更适合按需运行,尤其是在将其用于Selenium测试时。这是示例shell命令:

export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &

使用xdpyinfo之前检查显示将确保您不会两次运行虚拟帧缓冲区。


如果确实需要在启动时启动它,则可以尝试以下init.d脚本:

#!/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

来源:GitHub上的dloman / xvfb(来自:jterrace / xvfb

将其另存为/etc/init.d/xvfb并使其可执行,然后将其启动为:

/etc/init.d/xvfb start

要在启动时自动运行,请运行:

sudo update-rc.d xvfb defaults

要将其从自动运行中删除,请运行:

sudo update-rc.d -f xvfb remove

还添加到environmentX程序可以识别的文件中,例如:

echo DISPLAY=":1" | sudo tee -a /etc/environment

这是系统版本的版本:dloman / xvfb.service


我知道这已经一岁了,但是似乎无法获得javascript硒版本来使用。如果我在启动后运行,它可以工作,但是当我将其作为服务启动时,它好像没有检测到xvfb。知道如何在启动时将两者同时用作服务吗?
Masinde Muliro

@MasindeMuliro然后您可以问另一个问题,这样答案就可以更新为特定于您的问题。
kenorb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.