如何在 Raspberry Pi 上的 Xvfb 上运行 lightdm?

Stu*_*Stu 5 xvfb raspberry-pi

我有一个 Raspberry Pi,我将它用作无头服务器。但我想在它上面运行 X。它带有 lightdm,如果您使用随附的 HDMI 或视频输出运行它,它可以工作,我可以使用它和 x11vnc,但没有连接显示器,它默认为 800x600 或非常小的东西。我试过设置几何,没有效果。

所以我想我会运行 Xvfb,然后在它上面运行 lightdm,然后 x11vnc 整个 shebang。

问题是 lightdm 似乎不想连接到已经运行的 X 服务器,它想创建自己的。很好,所以我告诉它运行 Xvfb 而不是 X,它失败了,因为 lightdm 试图将“vt7”作为参数传递给 X 服务器,但 Xvfb 不接受虚拟终端作为参数,因为它没有使用任何终端,它是一个虚拟帧缓冲区。

所以帮帮我?我怎样才能获得 lightdm(我已经检查了文档和选项,没有什么明显的)来正确启动 Xvfb(没有 vt7 参数),或者让它附加到已经运行的现有 X 服务器而不是尝试运行它自己的。

小智 8

顺便说一句,我同时面临着同样的问题。还想运行带有 Xvfb 和 VNC 的无头服务器,但不是在 RPi 上。我找到了一个可行的解决方案,执行以下步骤...

apt-get install lubuntu-core xvfb x11vnc
Run Code Online (Sandbox Code Playgroud)

我发现 lightdm.conf 的所有配置选项都记录在 /usr/share/doc/lightdm/lightdm.conf.gz 中。因此,通过发出以下命令来查看它们。

zcat /usr/share/doc/lightdm/lightdm.conf.gz
Run Code Online (Sandbox Code Playgroud)

显然,正如您所报告的,lightdm 尝试实例化自己的 X 服务器并传递一些 Xvfb 无法处理的参数。解决此问题的第一步是在 lightdm 的配置文件 /etc/lightdm/lightdm.conf(默认为 xserver-command=X)中添加一行“xserver-command”。

[SeatDefaults]
greeter-session=lightdm-gtk-greeter
user-session=Lubuntu
xserver-command=/etc/X11/xinit/xserverrc
Run Code Online (Sandbox Code Playgroud)

之后,我修改了 /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
Run Code Online (Sandbox Code Playgroud)

在我看来,这是一种将 lightdm X 命令包装在合适的包装脚本中的便捷方法,该脚本已存在于 (L)Ubuntu 默认安装中。

最后,我在通过 ssh 进入系统后使用 VNC,转发 VNC 端口并使用 VNC 客户端(在我的情况下为 Mac OS 屏幕共享)连接到本地主机上的转发端口。

ssh -L 5900:localhost:5900 user@machine 'x11vnc -localhost -display :0 -many'
Run Code Online (Sandbox Code Playgroud)