Virtual Network Computing (kurz VNC) ist ein quelloffenes Protokoll, um Bildschirminhalte eines entfernten Computers zu übertragen – inklusive Tastatur und Maus. Mitte der 1980er Jahre entwickelt ist es älter als das proprietäre Remote Desktop Protocol von Microsoft. Man kann RDP als geschlossene Alternative zu VNC betrachten. Wie man RDP auf dem Raspberry Pi einrichtet, zeigt ein älterer Beitrag.
Wofür kann man VNC einsetzen?
Dieser Beitrag setzt im Grunde das gleiche um, nämlich: Die grafische Oberfläche des Raspberry Pi über einen anderen Computer fernzusteuern. Ob das Sinn macht, hängt stark vom Einsatzzweck ab. Für klassische Serverdienste benötigt man in den meisten Fällen gar keine grafische Oberfläche – diese lassen sich per SSH effizienter verwalten, oft ist dies sogar die einzige Möglichkeit.
Wer jedoch grafische Programme benötigt oder für den Pi entwickeln möchte, der kommt um eine Desktopumgebung nicht herum. In diesem Falle könnte man zwar auch direkt mit angeschlossenem Bildschirm und Eingabegeräten am Pi arbeiten. In der Regel wird aber ein PC oder Laptop als Hauptgerät genutzt. Per VNC ist das Arbeiten am PC/Laptop und Pi mit flexiblem wechseln möglich.
VNC auf dem Raspberry Pi installieren
Als Voraussetzung benötigst du Raspberry Pi OS Bullseye in der Desktop-Edition. Auf einer minimalen Konsolen-Installation muss zunächst eine grafische Benutzeroberfläche nachinstalliert werden.
Im Gegensatz zu RDP ist ein VNC-Server bereits in das Raspberry Pi OS eingebaut und muss lediglich aktiviert werden. Dazu öffnet man das Konfigurationswerkzeug mit sudo raspi-config und navigiert zu 3 Interface Options > I3 VNC.
Mit <Enter> öffnet sich ein Dialog, in dem wir das Aktivieren von VNC mit <Yes> bestätigen:
Anschließend bestätigen und per <Tab> Taste zu Finish navigieren. Ein Neustart des Pis wird empfohlen. In der aktuellsten Version des Raspberry Pi OS konnte der VNC-Server sofort genutzt werden.
Mit einem VNC-Client verbinden
Auf dem Computer der sich mit dem Pi verbinden soll, benötigt man nun noch einen VNC-Clinent. Manche Linux-Distributionen verfügen über einen eingebauten, jedoch nicht alle. Unter Windows ist immer Drittanbieter-Software nötig. Es gibt verschiedene Clients, etwa den RealVNC Viewer für Windows. Dort legt man per Rechtsklick eine neue Verbindung mit dem Hostname oder der IP-Adresse des Pi an. „Name“ ist hierbei frei wählbar und dient nur zur Zuordnung.
Per Doppelklick auf die Verbindung wird sie geöffnet. Beim ersten Mal erscheint eine Warnmeldung, da sich Client und Server nicht kennen:
Anschließend meldet man sich mit einem Linux-Benutzer an. Standardmäßig heißt dieser pi, sofern ihr keinen eigenen angelegt habt.

Linux
Unter Linux kann ich Remmina empfehlen. Es ist sehr mächtig und unterstützt neben VNC noch zahlreiche weitere Protokolle – darunter grafische wie RDP, aber auch beispielsweise SSH. Unter manchen Distributionen wurden einzelne Protokolle in eigene Pakete ausgelagert. Unter Manjaro etwa in libvncserver. Diese Abhängigkeiten müsst ihr ggf. installieren, um VNC nutzen zu können.
Damit das Plugin auch in der „Protokoll“ Liste zur Auswahl steht, ist zumindest unter Manjaro ein Neustart des Systemes notwendig.

In dieser Konstellation wird allerdings nur die VNC-Authentifizierung unterstützt. Der Raspberry Pi setzt RealVNC ein. Dort hat man den VNC-Standard erweitert. Das funktioniert aber nur, wenn RealVNC auch als Client genutzt wird – andere Clients unterstützen die eigenmächtig durchgeführten Erweiterungen nicht. Wer also andere Clients wie Remmina zusammen mit dem Standard RealVNC nutzen möchte, muss die VNC-Authentifizierung auf dem Raspberry Pi aktiviert und dort ein eigenes Passwort setzen. Die Anmeldung erfolgt somit über das selbst gesetzte VNC-Passwort, nicht über die Anmeldedaten des Linux-Benutzers.
Dazu ändert man das Authentifizierungsschema auf dem Raspberry Pi in der Datei /root/.vnc/config.d/vncserver-x11 durch das Einfügen folgender Zeile:
Authentication=VncAuth
# Siehe Nachtrag unten
Encryption=PreferOn
Schlussendlich noch auf VNC-Ebene ein Passwort festlegen (max. 8 Zeichen). Für aktuelle Raspberry Pi 11 Systeme müsst ihr zusätzlich den Schalter -legacy verwenden, damit dies mit allen VNC-Clients kompatibel ist:
sudo vncpasswd -service
# Altes Verfahren, welches mit allen Clients kompatibel ist
sudo vncpasswd -legacy -service
Damit die Änderungen wirksam werden, den Dienst des VNC-Server neu starten:
sudo systemctl restart vncserver-x11-serviced.service

Anpassen der Auflösung
Sollte die Auflösung zu gering sein, kann man in raspi-config unter 2 Display Options > D5 VNC Resolution die gewünschte Auflösung setzen. Im folgenden Beispiel etwa Full-HD:
VNC ist langsam? Workaround für Raspberry Pi OS 11
Unter Raspberry Pi OS 11 (Bullseye) kommt es zu Problemen mit der Leistung, wenn kein physischer Bildschirm angeschlossen ist. Es gibt einen Workaround, den man in der Datei /boot/config.txt aktiviert:
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=82
# Diese Zeile muss weiter unten auskommentiert werden
#dtoverlay=vc4-kms-v3d
Die Eigenschaft hdmi_mode bezieht sich dabei auf die Auflösung. 82 steht für Full-HD. Andere Auflösungen sind verfügbar, eine Liste aller Modi findet sich in der Raspberry Pi Dokumentation.
Ergänzung vom 17.09.2023
Der vom Raspberry Pi OS eingebettete RealVNC Server hat mit Version 7 die Art geändert, wie sie ihre Passwörter abspeichern. Das Raspberry Pi OS hatte bislang Version 6.10 eingesetzt, wofür der Beitrag geschrieben wurde. Mittlerweile wurde auf Version 7 aktualisiert, wodurch Probleme mit bestimmten Clients (z.B. Remmina unter GNU/Linux) entstehen.
$ dpkg -l | grep realvnc
ii realvnc-vnc-server 7.5.1.50075 armhf VNC® Server
Als Workaround muss in der vncserver-x11 Datei zusätzlich folgende Zeile eingebaut werden:
Encryption=PreferOn
Um das Passwort nach dem alten Verfahren zu speichern (welches kompatibel ist), ruft ihr vncpasswd
mit dem Schalter -legacy
auf:
sudo vncpasswd -legacy -service
Fazit
Es muss nicht zwingend RDP sein, auch wenn viele Windows-Nutzer das Protokoll kennen – VNC bietet eine offenere Lösung. Beide Protokolle sind jedoch schon einige Jahrzehnte alt und sollten daher keinesfalls direkt per Internet erreichbar gemacht werden. Hierfür kann man bei Bedarf auf einen VPN bzw. SSH-Tunnel zurückgreifen. Beide Wege sind verschlüsselt.