重定向 X 输出

重定向 X 输出

我有一个小程序可以检查 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,在这种情况下情况可能会变得很糟糕)

相关内容