Erfahrene Linux-Anwender arbeiten viel und oft sogar gerne in Terminalfenstern, sei es direkt auf dem betroffenen Rechner oder via SSH. Wenn Sie aber den Komfort und das optische Feedback einer grafischen Benutzeroberfläche vorziehen und über eine Netzwerkverbindung arbeiten möchten, dann ist VNC die richtige Lösung.
Virtual Network Computing (VNC) ist eine Software, um den gesamten Bildschirminhalt über ein lokales Netzwerk zu übertragen und von einem anderen Rechner aus zu steuern. VNC wird von Linux und OS X standardmäßig unterstützt. Für Windows gibt es kostenlose VNC-Clients. Also geht es nur noch darum, den Raspberry Pi als VNC-Server zu konfigurieren.
VNC-Server manuell starten
Um das Konzept eines VNC-Servers rasch und unkompliziert auszuprobieren, installieren Sie das Paket tightvncserver
und starten das Programm auf dem Raspberry Pi in einem Terminalfenster. Dabei müssen Sie zuerst zweimal ein Passwort angeben, das später auch beim Verbindungsaufbau anzugeben ist.
sudo apt-get install tightvncserver
vncserver
Password: ******
Verify: ******
Would you like to enter a view-only password? n
New 'X' desktop is raspberrypi:1
Wichtig ist hier die letzte Zeile: Der VNC-Server stellt seine Dienste am Display :1 zur Verfügung. Da für VNC Portnummern ab 5900 vorgesehen sind, entspricht :1 der Portnummer 5901. Ports sind, vereinfacht ausgedrückt, Kennzahlen, die Netzwerkpakete bestimmten Diensten zuordnen.
Der VNC-Server läuft nun als Hintergrundprozess, bis dieser explizit beendet wird. Dazu führen Sie vncserver -kill
aus und geben mit :n
die Display-Nummer an:
vncserver -kill :1
Das beim ersten Start angegebene VNC-Passwort wird in der Datei .vnc/passwd
in verschlüsselter Form gespeichert. Bei weiteren Starts ist deswegen keine neuerliche Passwortangabe erforderlich. Um das Passwort später zu ändern, führen Sie vncpasswd
aus.
VNC-Viewer für Windows, Linux oder OS X
Jetzt versuchen Sie von Ihrem Arbeitsrechner aus, die Verbindung zum VNC-Server herzustellen. Unter Windows installieren Sie zuerst das Programm TightVNC, das Sie hier kostenlos herunterladen können:
http://www.tightvnc.com/download.php
Unter Linux ist in der Regel bereits ein VNC-Viewer installiert — allerdings hängt es von der Distribution ab, welcher. Mögliche Programmnamen sind unter anderem vinagre
, vncviewer
, krdc
oder remmina
. Unter Ubuntu steht standardmäßig remmina
zur Verfügung. Verbindung/Neu führt in einen sehr komplexen Einstellungsdialog. Am besten ist es, dem Verbindungsprofil
einen Namen zu geben und es anschließend zu speichern. Damit ersparen Sie sich die Neueingabe der Parameter bei jeder Verbindung.
Unter OS X ist zwar standardmäßig ein VNC-Client installiert, dieser funktioniert aber mehr schlecht als recht. Deswegen ist es zweckmäßig, kostenlose Programm Chicken herunterzuladen und zu installieren:
http://sourceforge.net/projects/chicken
Verbindungsaufbau
Im Dialog zum Verbindungsaufbau müssen Sie den Hostnamen und die Portnummer angeben. In unserem Beispiel wäre das raspberrypi:5901
. Falls auf Ihrem Arbeits-PC der Hostname des Raspberry Pi unbekannt ist, müssen Sie stattdessen die IP-Nummer angeben, also z.B. 10.0.0.8:5901
. Die IP-Nummer können Sie auf dem Raspberry Pi mit dem Kommando ip addr | grep inet
ermitteln. Schließlich müssen Sie noch das Passwort angeben, das Sie beim Start von vncserver
auf dem Raspberry Pi verwendet haben. Nun erscheint das VNC-Viewer-Fenster mit dem Raspberry-Pi-Desktop.
Recht unübersichtlich ist der Verbindungsdialog, wenn Sie mit Remmina (Ubuntu) arbeiten. Entscheidend sind aber auch hier nur drei Einstellungen: Sie geben als Protokoll VNC –
Virtual Network Computing, als Server hostname:portnr
sowie das erforderliche Passwort an. Für eine optimale Darstellungsqualität stellen Sie außerdem Farbtiefe = Echtfarben und Qualität = Beste ein.
VNC nutzen
Der VNC-Server hat seinen eigenen Desktop! Möglicherweise irritiert es Sie, dass der Bildschirminhalt im VNC-Fenster nicht mit dem Monitorbild des Raspberry Pi übereinstimmt. Das liegt daran, dass für den VNC-Server ein eigener Desktop gestartet wird, der vom echten Desktop des Raspberry Pi unabhängig ist! Der VNC-Server agiert also nicht wie eine Fernwartungs-Software, die den vorhandenen Bildschirminhalt dupliziert.
Update 22.2.2015: Wenn Sie aus einer VNC-Sitzung heraus Programme mit grafischer Benutzeroberfläche mit root-Rechten starten möchten (also sudo programm
), tritt der Fehler cannot open display auf. Im folgenden Beispiel gehe ich davon aus, dass Sie VNC nutzen und die Kommandos in einem Terminal ausführen:
sudo idle
Client is not authorized to connect to ServerTraceback (...)
...
_tkinter.TclError: couldn't connect to display ":1.0"
sudo lxterminal
Client is not authorized to connect to Server
(lxterminal:nnn): Gtk-Warnung **: cannot open display: :1.0
Der Grund für die Fehlermeldungen besteht darin, dass X aus Sicherheitsgründen verbietet, dass fremde Benutzer Programme starten können. Abhilfe: Führen Sie vorher im Terminal xhost +localhost
aus, um diese Sicherheitsregel zu deaktivieren:
xhost +localhost
localhost being added to access control list
sudo idle
sudo lxterminal
Start des VNC-Servers automatisieren
Hinweis: Dieser Abschnitt gilt für das alte Raspbian Wheezy. Für die neue Raspbian-Version »Jessie« gehen Sie besser nach der folgenden Anleitung vor.
Nachdem Sie sich davon überzeugt haben, dass VNC prinzipiell funktioniert, geht es nun darum, einen automatischen Start des VNC-Servers sicherzustellen. Alle weiteren Konfigurationsarbeiten sind also wieder auf dem Raspberry Pi durchzuführen.
Der erste Schritt besteht darin, das folgende Listing in der Datei /etc/init.d/vncserver
zu speichern. Dazu müssen Sie einen Editor mit root-Rechten ausführen, also z.B. sudo leafpad
. Im folgenden Script passen Sie die gewünschte Auflösung des VNC-Desktops in der Variablen GEOMETRY
an. Da das Script den vncserver
im Account pi
startet (USER
-Variable), gilt das VNC-Passwort in /home/pi/.vnc/passwd
. Dieses Passwort können Sie gegebenenfalls mit vncpasswd
ändern.
#!/bin/sh -e
# Datei /etc/init.d/vncserver
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# der Benutzer, für den der VNC-Server gestartet wird
export USER="pi"
export HOME="/home/pi"
# die Display-Nummer
DISPLAY="1"
# die Farbtiefe (8, 16 oder 24) und die Auflösung
DEPTH="16"
GEOMETRY="1300x800"
# der Name des VNC-Desktops
NAME="pi-VNC"
OPTIONS="-name ${NAME} -depth ${DEPTH}
-geometry ${GEOMETRY} :${DISPLAY}"
case "$1" in
start)
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;
stop)
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;
restart)
$0 stop
$0 start
;;
esac
exit 0
Update 3.3.2015: Das Script wurde aktualisiert. Zum einen wurde die Zeile export HOME="/home/pi"
hinzufügt (erforderlich, damit sich Scratch starten lässt), zum anderen wurden die Zeilen . /lib/lsb/init-functions
(einmal) sowie log_action ...
(zweimal) entfernt.
Damit dieses Script ausgeführt werden kann, müssen Sie mit chmod a+x
die execute-Bits setzen:
sudo chmod a+x /etc/init.d/vncserver
Mit den folgenden Kommandos können Sie den VNC-Server nur manuell starten und stoppen:
sudo service vncserver start
sudo service vncserver stop
Der eigentliche Sinn dieses Scripts besteht aber darin, dass der VNC-Server in Zukunft bei jedem Bootprozess automatisch gestartet werden soll. Diesen Auto-Start aktivieren Sie wie folgt (er gilt ab dem nächsten Neustart):
sudo insserv vncserver
Falls Sie zu einem späteren Zeitpunkt bemerken, dass Sie den VNC-Server nicht mehr oder nur ganz selten benötigen, sollten Sie den Auto-Start wieder deaktivieren. Der Betrieb eines Parallel-Desktops für den VNC-Server erfordert nämlich erheblichen Speicherplatz und verlängert den Bootprozess spürbar.
sudo insserv -r vncserver