我有一个小程序可以检查 Web 服务的某些元素。该程序显示图形输出并显示命令行结果。
我一直试图让这个程序在我办公室的服务器上定期自动运行。问题是,它只有在我启用了 X 时才有效 - 无论是直接在服务器上,还是通过SSH -X
。
按照 Google 的说法,我尝试了 Xvfb,但它给出了相当神秘的错误信息:
Xvfb :1 -screen 0 1600x1200x32
Fatal server error:
Server is already active for display 1
If this server is no longer running, remove /tmp/.X1-lock
and start again.
有什么想法可以运行它吗?我实际上正在寻找 X 等效项&>/dev/null
...
答案1
您可以创建 VNC 显示器。VNC 旨在用于执行远程桌面:在服务器端,它会创建一个在内存中呈现的虚拟 X 显示器(它甚至不需要视频卡),然后您可以使用 VNC 客户端远程连接到它。
Ubuntu 软件包vnc4server
以 Universe 命名。您可以使用以下命令启动显示:
vnc4server :10
首次运行它时,它会要求您输入密码,但由于您不需要远程连接到显示器,因此您可以输入任何密码。请注意,这会在您的机器上打开一个端口(本例中为 5910),可用于连接到这个新的 X 显示器,因此最好对其进行防火墙保护。
现在在其环境中运行 cron 脚本DISPLAY=:10.0
,它应该使用 VNC 显示。
答案2
在 Ubuntu 中,echo $DISPLAY
可能会产生:0.0
,告诉您您的 Ubuntu 会话正在使用显示器 0。这应该会留下任何其他数字供您使用。所以,:1
应该没问题,除非还有一些Xvfb
来自先前测试的运行?(或者,像错误状态一样:除非在之前的测试后没有删除一些临时文件/tmp/.X1-lock
。)但是:如果您无法弄清楚什么正在使用显示器 1,那么任何其他更大的数字也应该可以。
在全新的 Ubuntu 9.10 中进行快速测试:
# 如果需要,请安装一次: sudo apt-get 安装 xvfb sudo apt-get 安装 imagemagick # 在显示器 1 上在后台运行 Xvfb Xvfb:1& # 在显示器 1 上在后台运行 xclock 显示=:1 x时钟& # 对名为 Xclock 的窗口进行屏幕截图 显示=:1 导入-窗口 Xclock 当前时间.png # 停止 xclock 杀死`pidof xclock` # 停止 Xvfb 杀死`pidof Xvfb`
这应该会创建一个current-time.png
显示当前时间的文件。这对你有用吗?
答案3
我遇到了类似的问题,虽然 Alex Morega 的回答很好,但我更喜欢这个:
安装 xvfb 后,您可以用一行解决这个问题:“xvfb-run <command>”,其中 <command> 是您的程序。
答案4
您的服务器似乎在运行级别 5(X11 处于活动状态)下运行。您可能需要一个没有该级别的运行级别,那么请尝试 3 来运行 Xvfb?(假设您没有运行 Ubuntu,在这种情况下情况可能会变得很糟糕)