我有一台 Raspberry Pi,我将其用作无头服务器。但我想在其上运行 X。它带有 lightdm,如果您使用附带的 HDMI 或视频输出运行它,它就可以工作,我可以使用它和 x11vnc,但如果没有连接显示器,它默认为 800x600 或非常小的某个值。我尝试设置几何图形,没有效果。
所以我想我会运行 Xvfb,然后在其上运行 lightdm,然后运行 x11vnc 整个过程。
问题是 lightdm 似乎不想连接到已经运行的 X 服务器,它想自己创建一个。好吧,所以我告诉它运行 Xvfb 而不是 X,但它失败了,因为 lightdm 尝试将“vt7”作为参数传递给 X 服务器,但 Xvfb 不接受虚拟终端作为参数,因为它没有使用任何终端,它是一个虚拟帧缓冲区。
所以帮帮我吧?我该如何让 lightdm(我检查了文档和选项,没有什么明显的问题)正确启动 Xvfb(没有 vt7 参数),或者让它连接到已经运行的现有 X 服务器,而不是尝试运行自己的服务器。
答案1
顺便说一句,我当时也遇到了同样的问题。也想用 Xvfb 和 VNC 运行无头服务器,但不是在 RPi 上。我找到了一个可行的解决方案,执行以下步骤...
apt-get install lubuntu-core xvfb x11vnc
我发现 lightdm.conf 的所有配置选项都记录在 /usr/share/doc/lightdm/lightdm.conf.gz 中。因此,请通过发出以下命令查看它们。
zcat /usr/share/doc/lightdm/lightdm.conf.gz
显然,正如您所报告的,lightdm 尝试实例化其自己的 X 服务器并传递一些 Xvfb 无法处理的参数。解决此问题的第一步是将一行“xserver-command”添加到 lightdm 的配置文件 /etc/lightdm/lightdm.conf(默认为 xserver-command=X)。
[SeatDefaults]
greeter-session=lightdm-gtk-greeter
user-session=Lubuntu
xserver-command=/etc/X11/xinit/xserverrc
之后,我修改了 /etc/X11/xinit/xserverrc,以便启动 Xvfb 而不是真正的 X 服务器(请注意,我注释掉了将命令行参数传递给 X 的原始 X exec 行)。添加运行 Xvfb 的 exec 行就足以让 lightdm 与 Xvfb 一起工作。
#!/bin/sh
#exec /usr/bin/X -nolisten tcp "$@"
exec Xvfb :0 -screen 0 1024x768x24
在我看来,这是一种将 lightdm X 命令包装在合适的包装脚本中的便捷方法,该脚本已经存在于 (L)Ubuntu 默认安装中。
最后,我通过 ssh 进入系统,转发 VNC 端口,然后使用 VNC 客户端连接到本地主机上的转发端口(在我的情况下是 Mac OS 屏幕共享),然后使用 VNC。
ssh -L 5900:localhost:5900 user@machine 'x11vnc -localhost -display :0 -many'