VNC-Server unter Linux einrichten

In meinen Linux-Büchern beschreibe ich, wie Sie unter KDE oder Gnome den Desktop vorübergehend zur Fernsteuerung freigeben können. Hinter den Kulissen kommt dabei VNC (Virtual Network Computing) zum Einsatz.

Dieser Blog-Beitrag erklärt, wie Sie Linux konfigurieren, dass ständig ein VNC-Server läuft. Das ermöglicht es, den Rechner im Keller stehen zu lassen und dessen grafische Benutzeroberfläche über einen anderen Rechner zu steuern.

Vorweg eine Warnung: Bei VNC werden die Daten standardmäßig unverschlüsselt übertragen. Der Einsatz von VNC sollte daher auf sichere lokale Netzwerke beschränkt werden. Wenn Sie einen Rechner über eine Internet-Verbindung via VNC fernsteuern möchten, sollten Sie VNC via SSH nutzen. Darauf gehe ich in diesem Artikel nicht ein. Entsprechende Informationen finden Sie aber beispielsweise hier.

VNC verwendet standardmäßig IP-Ports ab 5900. Diese dürfen innerhalb des LANs nicht durch eine Firewall blockiert werden.

VNC-Server unter Fedora einrichten

Zuerst installieren Sie den VNC-Server:

yum install vnc-server

Damit werden diverse Pakete des tigervnc-Servers installiert. Anschließend geben Sie in /etc/sysconfig/vncservers an, für welchen existierenden Fedora-Benutzer der VNC-Server gestartet werden soll, welche Auflösung der VNC-Desktop haben solletc. Die Einstellungen können z.B. so aussehen:

# in /etc/sysconfig/vncservers
VNCSERVERS="2:kofler"
VNCSERVERARGS[2]="-geometry 1300x800 -nolisten tcp"

Das bedeutet, dass für der VNC-Server das Grafiksystem für den Benutzer kofler starten soll und über den TCP-Port 5902 zur Verfügung stellen soll. Beachten Sie, dass Sie die aus Sicherheitsgründen standardmäßig vorgesehene Option -localhost entfernen müssen (es sei denn, sie wollen VNC über einen SSH-Tunnel nutzen).

Anschließend loggen Sie sich am Fedora-Rechner ein und führen in Ihrem per VNC zu nutzenden Account das Kommando vncpasswd aus. Damit geben Sie ein Passwort an, dass für den VNC-Verbindungsaufbau erforderlich ist. (Damit verhindern Sie, dass jeder im lokalen Netzwerk die VNC-Verbindung herstellen kann. Wirklich sicher wird VNC damit nicht, aber zumindest für das Heimnetzwerk ist diese Vorsichtsmaßnahme ausreichend).

Zuletzt starten Sie den VNC-Server neu und stellen sicher, dass das Programm in Zukunft automatisch gestartet wird:

service vncserver restart
chkconfig vncserver on

VNC-Server unter Debian/Ubuntu einrichten

Die Vorgehensweise unter Debian bzw. Ubuntu ist insofern komplizierter, als keines der in den Paketquellen verfügbaren VNC-Server-Pakete ein Init-Script für den automatischen Start des VNC-Servers enthält.

Diese Anleitung zeigt, wie Sie den tightvncserver unter Debian oder Ubuntu so einrichten, dass das beim Hochfahren des Rechners automatisch gestartet wird. Zur Installation führen Sie das folgende Kommando aus:

apt-get install tightvncserver

Um den VNC-Server zu testen, führen Sie nun in Ihrem Benutzer-Account in einem Terminal-Fenster (ohne root-Rechte!) das Kommando vncserver aus. Beim ersten Mal müssen Sie dabei ein Passwort angeben. Das Kommando zeigt die VNC-Verbindungsdaten an (z.B. New X desktop is myhostname:1). Wenn der Verbindungsaufbau prinzipiell funktioniert, stoppen Sie den VNC-Server mit vncserver -kill :n wieder, wobei Sie statt n die Display-Nummer angeben (für das obige Beispiel also :1).

Nun geht es noch darum, den VNC-Server so einzurichten, dass er beim Einschalten des Rechners automatisch gestartet wird. Dazu übertragen Sie das folgende Listing (das ich mit wenigen Veränderungen von diesem Artikel übernommen habe) in die neue Datei /etc/init.d/vncserver:

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    networking
# Default-Start:     S
# Default-Stop:      0 6
### END INIT INFO

# der Benutzer, für den der VNC-Server gestartet wird
export USER="kofler"
# die Display-Nummer
DISPLAY="1"
# die Farbtiefe (8, 16 oder 24)
DEPTH="16"
# die gewünschte Auflösung
GEOMETRY="1300x800"
# der Name des VNC-Desktops
NAME="kofler-VNC"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
. /lib/lsb/init-functions

case "$1" in
start)
  log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
  su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
  ;;
stop)
  log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
  su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
  ;;
restart)
  $0 stop
  $0 start
  ;;
esac
exit 0

chmod a+x macht das Script ausführbar:

chmod a+x /etc/init.d/vncserver

Mit diesem Kommandos starten bzw. stoppen Sie den VNC-Server manuell:

/etc/init.d/vncserver start
/etc/init.d/vncserver stop

Damit das beim Hoch- oder Herunterfahren des Rechners automatisch geschieht, richten Sie die entsprechenden Init-V-Links ein:

update-rc.d vncserver defaults