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


5

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

所以我以为我会运行Xvfb,然后对此运行lightdm,然后整个运行x11vnc。

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

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

Answers:


8

顺便说一句,我同时面对着同样的问题。还希望使用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无法处理的一些参数。解决此问题的第一步是在lightdm的配置文件/etc/lightdm/lightdm.conf中添加一行“ xserver-command”(默认为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的执行行足以使lightdm与Xvfb一起工作。

#!/bin/sh

#exec /usr/bin/X -nolisten tcp "$@"
exec Xvfb :0 -screen 0 1024x768x24

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

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

ssh -L 5900:localhost:5900 user@machine 'x11vnc -localhost -display :0 -many'

好的,您是个天才,但请向我解释一下:xser​​ver-command指向运行Xvfb的脚本。那么,为什么不将Xvfb放在xserver命令行上呢?我已经尝试过了,但是它没有用,因为lightdm仍然以这种方式将参数传递给X,但是当我按照您的建议进行操作时,它就不起作用了。我想念什么?很高兴它能工作。
斯图

秘密在于,lightdm仍会将所有这些参数传递给脚本。但是脚本只忽略这些参数,而是使用固定命令调用Xvfb。显然,lightdm获取xserver-command值,并附加所有适用于X的参数,然后将其作为命令执行。您可以通过记录传递给xserverrc的参数来验证这一点。在exec Xfvb之前插入以下行,将参数写入/tmp/xvfbargs.log。 echo "$@" > /tmp/xvfbargs.log 然后,您可以查看cat /tmp/xvfbargs.log
Andreas

我明白了,你仍然是个天才。这是我以前从未想过的可爱技巧。我的意思是我一直都在编写脚本,以将一串参数从一个脚本连接到另一个脚本,但是我从没想过要使用它来删除参数。:-)
Stu 2013年
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.