VNC-Server auf dem Raspberry Pi einrichten (X11VNC)

Mit Raspbian Jessie geprüft.

Typischerweise wird ein VNC-Server auf dem Raspberry Pi installiert, um aus der Ferne den Desktop zu steuern. Per VNC-Client bekommt man dann einen virtuellen Desktop des Raspberry Pi auf den eigenen Rechner dargestellt. Über diesen Remote-Desktop kann man den Raspberry Pi dann fernwarten oder fernsteuern.

VNC eignet sich vor allem dann, wenn man anstelle über SSH auf der Konsole lieber mit einem grafischen Desktop arbeitet oder wenn man jemandem über die Schulter schauen und Remote-Unterstützung geben möchte. Der Vorteil ist dabei, dass sich Bildschirm-Inhalt spiegeln lässt.

Das Ziel ist eine VNC-Verbindung herstellen, um den aktuellen Desktop am Raspberry Pi sehen und steuern zu können. Diese Lösung ist dann geeignet, wenn man einer am Raspberry Pi sitzenden Person aus der Ferne über die Schulter schauen möchte (Remote-Unterstützung). Hierfür eignet sich der VNC-Server X11VNC am besten.

VNC-Clients

Um übers Netzwerk per VNC auf den Raspberry Pi zugreifen zu können, benötigt man einen VNC-Client. Es gibt sehr viele davon. In der Regel reicht einer mit einem geringen Funktionsumfang, der in der Regel kostenlos zu haben ist. Deshalb hier nur eine kleine Auswahl.

  • Windows: z. B. TightVNC
  • Mac OS X: z. B. Chicken
  • Linux: z. B. vncviewer (tigervnc) oder andere

Aufgabe

  1. Besorgen Sie sich einen geeigneten VNC-Client für ihren Client-PC.
  2. Installieren Sie einen VNC-Server auf dem Raspberry Pi.
  3. Richten Sie den VNC-Server so ein, dass er automatisch startet.

Vorbereitungen

Um den Desktop per VNC fernsteuern zu können, muss der Raspberry Pi natürlich den Desktop automatisch starten. Dazu stellt man mit "raspi-config" den Start-Modus auf "Enable Boot to Desktop/Scratch". Wahlweise mit oder ohne automatischer Anmeldung durch den Benutzer "pi".
Außerdem empfiehlt es sich den Grafikspeicher in "raspi-config" unter "Advanced Options > Memory Split" auf den Wert 64 (MByte) zu stellen.
Damit die Einstellungen übernommen werden muss der Raspberry Pi neu gestartet werden.

Lösung: VNC-Server für Remote-Unterstützung installieren

Hinweis: Achten Sie darauf, dass Sie nicht mehrere VNC-Server gleichzeitig installiert haben und beim Booten automatisch starten. Bevor Sie X11VNC installieren, machen Sie vorhergehende VNC-Server-Installation und -Konfigurationen rückgängig.

Zuerst installieren wir das Paket "x11vnc".

sudo apt-get update
sudo apt-get install x11vnc

Dann starten wir "x11vnc" in einem eigenen Terminal-Fenster oder -Reiter.

x11vnc -usepw -forever -display :0

Das Kommando sieht vor, dass der X11VNC-Server auch nach der Verbindungstrennung weiterläuft (Option -forever) und beim Verbindungsaufbau durch den VNC-Client nach dem VNC-Passwort gefragt wird. Beim ersten mal, wenn der X11VNC-Server gestartet wird, muss dieses Passwort festgelegt werden. Dieses Passwort hat aber mit dem Benutzer-Passwort nichts zu tun. Dieses Passwort kann man frei wählen und muss ein zweites Mal bestätigt werden. Eine eventuell anschließende Frage nach einem Readonly-Passwort kann man verneinen.

Solange der X11VNC-Server im Terminal läuft, kann man mit einem VNC-Client den aktuellen Desktop aufrufen und steuern. Hierzu benötigt man die IP-Adresse oder den Hostnamen des Raspberry Pi und die Portnummer 5900 (z. B. 192.168.1.2:5900), das man beides im VNC-Client einträgt.
Den X11VNC-Server kann man bei Bedarf mit Strg + C beenden.

Hinweis: Der Kommando-Parameter ":0" bezieht sich auf den aktuell sichtbaren Desktop. Der hat den Port "5900". Möchte man mit X11VNC virtuelle Desktops per VNC betreiben, dann erhöht man auf ":1" und wählt entsprechend auch den Port "5901". Für den zweiten virtuellen Desktop dann ":2" und den Port "5902", und so weiter.

Erweiterung: Autostart des X11VNC-Servers nach dem User-Login

Es ist natürlich umständlich bei jeder VNC-Verbindung vorher den X11VNC-Server manuell starten zu müssen. Es wäre schön, wenn der sich beim Booten des Raspberry Pi automatisch starten würde.
Dazu legen wir eine Autostart-Datei an.

nano /home/pi/.config/autostart/x11vnc.desktop

In die Datei fügen wir folgende Zeilen ein:

[Desktop Entry]
Type=Application
Name=X11VNC
Exec=x11vnc -usepw -forever -display :0
StartupNotify=false

Dann die Datei speichern und schließen: Strg + O, Return, Strg + X.

Jetzt sollte man den Raspberry Pi einmal neu starten.

sudo reboot

Danach sollte, wenn der Desktop gestartet wurde, auch eine VNC-Verbindung zum Raspberry Pi möglich sein.

Hinweis: Der X11VNC-Server wird in diesem Fall erst dann gestartet, wenn der Benutzer sich angemeldet hat oder er automatisch eingeloggt wird.

Erweiterung: Autostart des X11VNC-Server vor dem User-Login

Man kann den X11VNC-Server auch vor dem User-Login starten. Dann zeigt er den Login-Desktop an.

Zuerst müssen wir das VNC-Passwort an einer zentralen Stelle ablegen.

sudo x11vnc -storepasswd /etc/x11vnc.pass

Geben Sie das Passwort zwei mal ein und bestätigen das Speichern in der Datei.

Dann legen wir eine Systemd-Unit an:

sudo nano /lib/systemd/system/x11vnc.service

Dort tragen wir folgende Zeilen ein:

[Unit]
Description=Start X11VNC
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -display :0 -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared

[Install]
WantedBy=multi-user.target

Anschließend die Datei speichern und schließen mit Strg + O, Return, Strg + X.

Dann müssen wir die Systemd-Unit für den automatischen Start konfigurieren.

sudo systemctl enable x11vnc.service

Dann den Raspberry Pi einmal neu starten.

Problem: Auflösung zu klein oder zu groß

Wenn man mit X11VNC den aktuellen Bildschirm (Parameter ":0") anschauen und steuern will, dann nimmt die Größe des VNC-Clients die aktuelle Auflösung des Bildschirms auf dem Raspberry Pi an. Wenn dort kein HDMI-Bildschirm angeschlossen ist, dann ist die Auflösung ziemlich klein, was dann auch vom VNC-Client übernommen wird. Damit lässt sich aber nicht ernsthaft arbeiten. In diesem Fall ist man gezwungen die Auflösung für HDMI fest einzustellen.

Umgekehrt kann es genauso gut vorkommen, dass die Auflösung des eigenen Bildschirms kleiner ist, also die Auflösung des VNC-Fensters, die sich an der aktuelle Auflösung des entfernten Systems orientiert. In so einem Fall muss man im VNC-Fenster scrollen, was sehr umständlich ist.
Hier hilft die "-scale"-Option, die man an das x11vnc-Kommando anhängt. Bei dieser Option kann man einen Faktor oder eine Zielauflösung angeben.

Variante mit einem Minimierungsfaktor:

... -scale 0.9

Variante mit der gewünschten Zielauflösung:

... -scale 800x600

Wie die Option für den eigenen Bedarf aussehen muss, dass muss man natürlich ausprobieren.

Problem: VNC-Verbindungen mit X11VNC sind instabil

X11VNC kann unter Umständen unter Verbindungsabbrüchen leiden, wenn auf dem Desktop bestimmte Anwendungen ausgeführt oder benutzt werden. In der Regel lassen sich die Abbrüche rekonstruieren. In diesem Fall sollte man X11VNC komplett deinstallieren und es mit RealVNC versuchen. Die speziell für den Raspberry Pi angepasste Version scheint einen stabileren Eindruck zu machen.

Sicherheitshinweise

VNC ist unsicher. Gemeint ist, dass alle Daten (inkl. Passwörter) im Klartext übertragen werden. Deshalb sollte man VNC nur im lokalen Netzwerk verwenden.
Wenn der Raspberry Pi per Port-Forwarding (DNAT, Port-Weiterleitung, DMZ) oder direkt aus dem Internet erreichbar ist, dann ist er über den VNC-Server angreifbar. In dem Fall sollte der VNC ausschließlich mit dem Parameter "-localhost" betrieben und die VNC-Session über SSH gesichert hergestellt werden.

Alternative: Remote-Desktop per RDP und RealVNC

In der Windows-Welt ist VNC weniger geläufig. Hier spricht man von Remote-Desktop-Unterstützung per RDP. Sofern man mit Windows-Clients arbeitet, ist die Einrichtung eines RDP-Servers auf dem Raspberry Pi eine denkbare Alternative zu VNC.
Das Raspbian-Image bringt RealVNC als VNC-Server mit, der nur noch mit einem Konfigurationstool aktiviert werden muss. Anschließend wird er automatisch gestartet.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen