Wie kann ich lightdm auf Xvfb auf einem Raspberry Pi ausführen?

12219
Stu

Ich habe ein Himbeer-Pi und verwende es als Headless-Server. Aber ich möchte X darauf laufen lassen. Es kommt mit lightdm, und wenn Sie es mit dem mitgelieferten HDMI- oder Video-Ausgang ausführen, funktioniert es, und ich kann das und x11vnc dazu verwenden. Wenn jedoch kein Monitor angeschlossen ist, ist der Standardwert 800x600 oder etwas wirklich kleines. Ich habe versucht, die Geometrie einzustellen, keine Wirkung.

Also dachte ich, ich würde Xvfb laufen lassen, dann lightdm und dann x11vnc den ganzen Shebang.

Das Problem ist, dass lightdm keine Verbindung zu einem bereits laufenden X-Server herstellen möchte, sondern einen eigenen erstellen möchte. Gut, also sage ich ihm, Xvfb anstelle von X auszuführen, und schlägt fehl, weil lightdm versucht, 'vt7' als Parameter an den X-Server zu übergeben, Xvfb akzeptiert jedoch nicht das virtuelle Terminal als Parameter, da es kein Terminal verwendet ist es ein virtueller Frame-Puffer.

Also hilf mir raus Wie bekomme ich entweder lightdm (ich habe die Docs und Optionen überprüft, nichts offensichtliches), um Xvfb korrekt zu starten (ohne vt7 param), oder es an einen bereits bestehenden X-Server anschließen zu lassen und nicht selbst zu starten.

5

1 Antwort auf die Frage

7
Andreas

Übrigens hatte ich zur gleichen Zeit das gleiche Problem. Wollte auch einen Headless-Server mit Xvfb und VNC betreiben, allerdings nicht mit RPi. Ich habe eine funktionierende Lösung gefunden, die folgende Schritte ausführt ...

apt-get install lubuntu-core xvfb x11vnc 

Ich habe herausgefunden, dass alle Konfigurationsoptionen von lightdm.conf in /usr/share/doc/lightdm/lightdm.conf.gz dokumentiert sind. Schauen Sie sich diese an, indem Sie den folgenden Befehl ausgeben.

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

Wie Sie bereits berichtet haben, versucht lightdm, seinen eigenen X-Server zu instanziieren und übergibt einige Argumente, mit denen Xvfb nicht umgehen kann. Um dies zu umgehen, fügen Sie der Konfigurationsdatei /etc/lightdm/lightdm.conf von lightdm eine Zeile 'xserver-command' hinzu (standardmäßig xserver-command = X).

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

Danach habe ich / etc / X11 / xinit / xserverrc geändert, um Xvfb anstelle eines echten X-Servers zu starten (beachten Sie, dass ich die ursprüngliche X-Exec-Zeile, die die Befehlszeilenargumente an X übergibt, auskommentiert). Wenn Sie stattdessen eine Exec-Zeile hinzufügen, die Xvfb ausführt, genügt es, dass lightdm mit Xvfb funktioniert.

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

Dies scheint mir eine bequeme Methode zu sein, den lightdm X-Befehl in ein geeignetes Wrapper-Skript einzubinden, das bereits in der (L) Ubuntu-Standardinstallation vorhanden ist.

Schließlich verwende ich VNC nach dem ssh'ing in das System, leite den VNC-Port weiter und verbinde mich mit dem weitergeleiteten Port auf localhost mit einem VNC-Client (in meinem Fall Bildschirmfreigabe für Mac OS).

ssh -L 5900:localhost:5900 user@machine 'x11vnc -localhost -display :0 -many' 
Okay, Sie sind ein Genie, aber erklären Sie mir Folgendes: Der Befehl xserver zeigt auf ein Skript, das Xvfb ausführt. Warum also nicht einfach Xvfb in die Xserver-Kommandozeile schreiben? Ich hatte es versucht und es hat nicht funktioniert, weil lightdm immer noch X auf diese Weise an X übergeben hat, aber wenn ich es so mache, wie Sie es vorschlagen, funktioniert es nicht und es funktioniert. Was vermisse ich? Glücklich, dass es funktioniert. Stu vor 11 Jahren 0
Das Geheimnis ist, dass lightdm all diese Argumente immer noch an das Skript übergibt. Das Skript ignoriert diese Argumente jedoch einfach und ruft Xvfb mit einem festen Befehl auf. Natürlich erhält lightdm den xserver-Befehlswert und hängt alle Argumente an, die für X funktionieren sollen, und führt diese dann als Befehl aus. Sie können dies überprüfen, indem Sie die an xserverrc übergebenen Argumente protokollieren. Durch Einfügen der folgenden Zeile unmittelbar vor dem Exec-Xfvb werden die Argumente in /tmp/xvfbargs.log geschrieben. `echo" $ @ "> / tmp / xvfbargs.log` Anschließend können Sie die an das Skript übergebenen Argumente mit `cat / tmp / xvfbargs.log` anzeigen Andreas vor 11 Jahren 0
Ich verstehe es jetzt, du bist immer noch ein Genie. Das ist ein süßer Trick, an den ich vorher nicht gedacht hatte. Ich meine, ich mache ständig Skripte, um Strings von Params von einem Skript zum nächsten zu bündeln, aber ich habe nie daran gedacht, Params vorher zu entfernen. :-) Stu vor 11 Jahren 0