Как я могу запустить lightdm на Xvfb на Raspberry Pi?

12135
Stu

У меня есть Raspberry Pi, и я использую его как безголовый сервер. Но я хочу запустить X на этом. Он поставляется с lightdm, и если вы запускаете его, используя входящий в комплект HDMI или видео, он работает, и я могу использовать его и x11vnc к нему, но без подключенного монитора, по умолчанию он равен 800x600 или что-то очень маленькое. Я пытаюсь установить геометрию, без эффекта.

Поэтому я решил запустить Xvfb, затем запустить lightdm, а затем x11vnc - весь шебанг.

Проблема в том, что lightdm, похоже, не хочет подключаться к уже работающему X-серверу, он хочет создать свой собственный. Хорошо, поэтому я говорю ему запустить Xvfb вместо X, и это не удается, потому что lightdm пытается передать 'vt7' в качестве параметра X-серверу, но Xvfb не принимает виртуальный терминал в качестве параметра, потому что он не использует какой-либо терминал Это виртуальный фрейм-буфер.

Так помогите мне? Как я могу получить lightdm (я проверил документы и опции, ничего очевидного), чтобы правильно запустить Xvfb (без параметра vt7), или заставить его подключиться к уже работающему X-серверу и не пытаться запустить его самостоятельно.

5

1 ответ на вопрос

7
Andreas

Incidentally, I was facing the same problem at the same time. Also wanted to run a headless server with Xvfb and VNC, not on RPi though. I found a working solution doing the following steps...

apt-get install lubuntu-core xvfb x11vnc 

I figured out that all configuration options of lightdm.conf are documented in /usr/share/doc/lightdm/lightdm.conf.gz. So have a look at them by issuing the following command.

zcat /usr/share/doc/lightdm/lightdm.conf.gz 

Obviously, as you reported, lightdm tries to instantiate its own X server and passes some arguments that Xvfb can't handle. First step to work around this is adding a line 'xserver-command' to lightdm's configuration file /etc/lightdm/lightdm.conf (it defaults to xserver-command=X).

[SeatDefaults] greeter-session=lightdm-gtk-greeter user-session=Lubuntu xserver-command=/etc/X11/xinit/xserverrc 

After that, I modified /etc/X11/xinit/xserverrc so as to start Xvfb instead of a real X server (note that I commented out the original X exec line that passes the command line arguments on to X). Adding an exec line instead that runs Xvfb was enough to get lightdm working with Xvfb.

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

This seems to me like a convenient method of wrapping the lightdm X command in a suitable wrapper script that is already present on the (L)Ubuntu default installation.

Finally, I use VNC after ssh'ing into the system, forwarding the VNC port and connecting to the forwarded port on localhost with a VNC client (in my case Mac OS screen sharing).

ssh -L 5900:localhost:5900 user@machine 'x11vnc -localhost -display :0 -many' 
Хорошо, вы гений, но объясните мне это: команда xserver указывает на скрипт, который запускает Xvfb. так почему бы просто не поместить Xvfb в командную строку xserver? Я попробовал это, и это не сработало, потому что lightdm все еще передает параметры X таким образом, но когда я делаю это так, как вы предлагаете, это не так, и это работает. Что мне не хватает? Рад, что это работает, хотя. Stu 11 лет назад 0
Секрет в том, что lightdm по-прежнему передает все эти аргументы скрипту. Но скрипт просто игнорирует эти аргументы и вместо этого вызывает Xvfb с фиксированной командой. Очевидно, что lightdm получает значение команды xserver и добавляет все аргументы, которые должны работать для X, а затем выполняет это как команду. Вы можете убедиться в этом, зарегистрировав аргументы, переданные в xserverrc. Вставка следующей строки непосредственно перед тем, как exec Xfvb записывает аргументы в /tmp/xvfbargs.log. `echo" $ @ "> / tmp / xvfbargs.log` Затем вы можете просмотреть аргументы, переданные сценарию` cat / tmp / xvfbargs.log` Andreas 11 лет назад 0
Теперь я понял, ты все еще гений. Это милый трюк, о котором я раньше не думал. Я имею в виду, что я все время создаю сценарии для объединения строк параметров из одного сценария в другой, но я никогда не думал об его использовании для удаления параметров раньше. :-) Stu 11 лет назад 0