VNC-Server auf dem Raspberry Pi einrichten (TightVNCServer)

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.

Im Linux-Umfeld gibt es einige VNC-Server, die alle mehr oder weniger geeignet sind. Viele Anleitungen und Tutorials verwenden "tightvncserver". Der ist äußerst schlank und lässt sich schnell einrichten. Er hat leider einen Nachteil. Er unterstützt nicht die Darstellung des aktuellen Desktops, sondern kann nur zusätzliche virtuelle Desktops übertragen.

Wenn man auf den aktuell sichtbaren Desktop des Raspberry Pi per VNC zugreifen möchte, dann lässt man die Finger von TightVNCServer und verwendet X11VNC.

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 beim Booten 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 virtuelle Desktops installieren

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

Den VNC-Server TightVNCServer installieren:

sudo apt-get update
sudo apt-get install tightvncserver

Dann richten wir ein Passwort für den VNC-Client ein (empfohlen):

vncpasswd

Hier muss man ein Passwort eingeben und anschließend noch mal bestätigen. Dieses Passwort wird später für den VNC-Client auf dem entfernten Rechner benötigt. Es ist selbst auszuwählen und hat nichts mit dem Benutzer-Passwort zu tun. Es ist das VNC-Server-Passwort.
Die Nachfrage nach einem Readonly-Password kann man verneinen.

Danach können wir den VNC-Server manuell starten.

Kommando zum Starten einer VNC-Session:

vncserver :1

Anschließend kann man sich mit einem VNC-Client mit dem Raspberry Pi verbinden. Hierbei muss man beachten, dass man neben dem Hostnamen oder der IP-Adresse des Raspberry Pi auch den Port 5901 angeben muss (z. B. 192.168.1.2:5901).

Hinweis: Der Parameter ":1" bezieht sich auf den ersten virtuellen Desktop. Der hat den Port "5901". Möchte man weitere virtuelle Desktops per VNC betreiben, dann erhöht man auf ":2" usw. und wählt entsprechend auch den Port "5902" usw.

Parameter von TightVNCServer

Kommando zum Starten einer VNC-Session mit zusätzlichen Parametern (optional):

vncserver :1 -geometry 1920x1080 -depth 16 -name raspi -localhost

Kommando zum Beenden der VNC-Session:

vncserver :1 -kill

-geometry: Mit diesem Parameter legt man die Auflösung des Desktops fest, die an den VNC-Client übertragen werden soll. Prinzipiell kann man hier beliebige Werte angeben. Sinn machen aber nur Auflösungen, die auf dem Client darstellbar sind. Wenn die Werte zu groß sind, dann sind Teile des Desktops verdeckt und dann muss man im Fenster des VNC-Clients scrollen.
Wenn man auf dem VNC-Client mit Vollbild arbeiten möchte, dann muss man hier die Auflösung des Clients eintragen. Aber, je höher die Auflösung, desto größer ist auch das zu übertragende Datenvolumen. Im lokalen Netzwerk ist das sicherlich kein Problem. Beim Übertragen über das Internet schon.

-depth: Mit diesem Parameter legt man die Farbtiefe in Bit der zu übertragenden Bilder fest. Die beste, farblich detaillierte Darstellung bekommt man mit den Werten von 24 bzw. 32. Allerdings erfordert das eine entsprechend hohe Bandbreite bzw. Übertragungsgeschwindigkeit, um das dabei entstehende Datenvolumen übertragen zu können. In der Regel erreicht man das nur im lokalen Netzwerk. Ein Wert von 16 ist mit Sicherheit auch akzeptabel. Ein Wert von 8 das Minimum. Je geringer der Wert, desto geringer ist das Datenvolumen und desto höher ist die notwendige Bandbreite.

-name: Mit diesem Parameter legt man den Namen fest, der im VNC-Client angezeigt werden soll. Interessant ist das dann, wenn man mit mehreren VNC-Sessions zu unterschiedlichen Systemen arbeitet und die Fenster voneinander unterscheiden möchte.

-localhost: Mit diesem Parameter verhindert man, dass die VNC-Session über das Internet ungesichert aufgebaut werden kann. Die Idee ist hierbei, dass man zuerst eine sichere SSH-Verbindung herstellt und darüber die VNC-Session betreibt.

-kill: Mit diesem Parameter kann man die VNC-Session beenden.

Erweiterung: VNC-Server-Autostart auf dem Desktop

Möchte man den VNC-Server automatisch beim Booten des Raspberry Pis starten lassen, dann muss man dazu noch eine Autostart-Datei anlegen.

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

In diese Datei fügen wir folgende Zeilen ein:

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

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

Jetzt muss man den Raspberry Pi einmal neu starten.

sudo reboot

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

Erweiterung: Autostart von TightVNCServer per systemd-Service

Es gibt noch eine zweite Variante, um den TightVNCServer beim Booten automatisch zu starten. Und zwar nicht über die Autostart-Einstellungen des grafischen Desktops, sondern über eine systemd-Service. Diese zweite Variante hat den Vorteil, dass man ihn etwas feiner steuern kann, sofern man sich das über die Kommandozeile zutraut.

Zuerst erstellen wir eine neue Datei im systemd-Systemverzeichnis:

sudo nano /etc/systemd/system/vncserver@.service

Der Inhalt der Datei sieht wie folgt aus:

[Unit]
Description=VNC mit TightVNCServer
After=syslog.target network.target

[Service]
Type=forking
User=pi
PAMName=login
PIDFile=/home/pi/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

In der Zeile, die mit "ExecStart..." beginnt gibt es die VNC-Parameter "-depth" und "-geometry", die man nach eigenen belieben anpassen kann.

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

Dann muss man systemd noch mitteilen, dass es einen neuen Service/Daemon gibt.

sudo systemctl daemon-reload

Die folgenden Kommandos erläutern, wie man diesen VNC-Dienst auf der Kommandozeile steuert.

VNC-Dienst starten:

sudo systemctl start vncserver@1.service

Laufenden VNC-Dienst stoppen:

sudo systemctl stop vncserver@1.service

Status des VNC-Dienstes anzeigen:

sudo systemctl status vncserver@1.service

Automatisches Starten beim Booten einschalten:

sudo systemctl enable vncserver@1.service

Automatisches Starten beim Booten ausschalten:

sudo systemctl disable vncserver@1.service

Anzeigen, ob der VNC-Dienst beim Booten automatisch gestartet wird:

sudo systemctl is-enabled vncserver@1.service

Sicherheitshinweise

VNC ist unsicher. Alle Daten (inkl. Passwörter) werden im Klartext übertragen. 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 werden und die VNC-Session über SSH gesichert hergestellt werden.

Alternative: Remote-Desktop per RDP

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.

Troubleshooting: Aktuell sichtbarer Desktop anzeigen geht nicht

Wenn man sich auf diese Weise mit einem VNC-Client mit dem Raspberry Pi verbindet, dann bekommt man nicht den gleichen Desktop angezeigt, der aktuell am Raspberry P zu sehen ist, sondern einen anderen. Die Frage ist, wie kann das sein?
Dazu muss man wissen, dass der VNC-Server eine neue Instanz des X-Servers startet. Also einen eigenständigen Desktop. Und deshalb hat man per VNC-Client nur Zugriff auf einen eigenen Desktop, und nicht auf den aktuellen Desktop. Der TightVNCServer stellt sich an der Stelle sehr störisch an.
Um den aktuellen Desktop sehen zu können, muss man X11VNC verwenden.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen