VNC Server

Aus Linupedia.org
Wechseln zu: Navigation, Suche

Im Folgenden möchte ich einmal die vielen verschiedenen Möglichkeiten erläutern, wie man einen Rechner per VNC von außen zugreifbar machen kann. Ich beziehe mich dabei auf ein SuSE Linux 9.3 System. Zumindest teilweise müßten die Anleitungen aber auch auf anderen Linuxen funtionieren.

Entscheidungshilfe Die unten beschriebenen Methoden decken jeweils einen anderen Anwendungsfall ab. Methoden 1 und 2 starten für jeden Menschen, der sich per VNC verbindet eine neue Sitzung, die auch nach dem Abmelden wieder stirbt. Es ist also damit nicht möglich, ein grafisches Programm zu starten, sich abzumelden und dabei das Programm weiterlaufen zu lassen. Methoden 3 bis 7 ermöglichen genau das, unterscheiden sich nur im Grad der Automation, oder darin, ob auf eine existierende Oberfläche einer schon am VNC-Server lokal angemeldeten Nutzerin zugegriffen werden kann oder ob eine dauerhafte aber separate Oberfläche gestartet wird. So werden wohl Methoden 5, 6 und 7 zu wählen sein, falls beabsichtigt ist, lokalen Nutzerinnen per VNC Hilfestellung leisten zu wollen, Methoden 3 und 4 sind eher tauglich, um mal eben auf dem VNC-Server ein Programm zu starten oder diesen zu administrieren. Die Methoden 5 bis 7 setzen voraus, daß der VNC-Server dauerhaft im Runlevel 5 läuft bzw. sogar jemand angemeldet ist, Methoden 1 bis 4 funktionieren auch auf einem Server im Runlevel 3.

Methode 1: Im YaST gibt es unter 'Netzwerkdienste' den Punkt 'Administration von einem entfernten Rechner'. Das ist etwas mißverständlich, da man damit den Rechner nicht nur administrieren kann, sondern auch den Zugang per VNC auf den Ports 5901 (VNC) und 5801 (VNC über Browser) freischaltet. Öffnet den Unterpunkt und wählt 'Verwaltung via entfernten Rechner (remote) erlauben' aus, beenden. Die folgende Meldung fordert Euch dazu auf, den Befehl 'rcxdm restart' auszuführen. Bevor Ihr das macht, öffnet noch die Datei /etc/opt/kde3/share/config/kdm/kdmrc mit root-Rechten in einem Editor Eurer Wahl und ändert ziemlich weit unten den Wert 'Enable=false' unter dem Punkt [Xdmcp] auf 'Enable=true'. Wechselt jetzt per Strg-Alt-F1 auf die Konsole, meldet Euch als root an und gebt 'rcxdm restart' ein. Nun müßte es Euch möglich sein, per VNC auf den Port 5901 oder per Browser auf den Port 5801 Eures Rechners zuzugreifen. Es sollte die normale Anmeldemaske erscheinen. Wichtig: Natürlich muß der VNC-Server im Runlevel 5 laufen, da es sonst keinen laufenden X-Server gibt, mit dem man sich verbinden kann.

Methode 2: Im YaST gibt es unter 'Netzwerkdienste' den Punkt 'Netzwerkdienste (xinetd)'. Öffnet diesen und klickt auf 'Aktivieren'. In der Mitte des Fensters könnt Ihr jetzt Dienste auswählen, die per xinetd gestartet werden können. Nun könnt Ihr einen oder alle der Dienste namens 'vnc' und 'vnchttpd' auswählen. Sie unterscheiden sich in der verwendeten Auflösung. vnc1 lauscht auf Port 5901 und liefert eine Auflösung von 1024x768, vnc2 auf Port 5902 mit einer Auflösung von 1280x1024 und vnc3 auf Port 5903 mit einer Auflösung von 1600x1200. Entsprechende Auflösungen liefern vnchttpd1 bis vnchttpd3 auf den Ports 5801 bis 5803. Jetzt noch wie oben die kdmrc editieren und 'rcxdm restart' ausführen. Das Ergebnis sollte das selbe sein wie oben. Wichtig: Natürlich muß der VNC-Server im Runlevel 5 laufen, da es sonst keinen laufenden X-Server gibt, mit dem man sich verbinden kann.

Methode 3: Falls Ihr nicht grundsätzlich den Zugriff per VNC erlauben wollt, gibt es auch die Möglichkeit, von Fall zu Fall den VNCServer von Hand zu starten. Dazu kann jede Benutzerin einen vncserver per 'vncserver' starten. Es folgt eine Ausgabe 'New 'X' desktop is RECHNERNAME:ZAHL'. '5900+ZAHL' ist dann der Port, auf dem der VNCServer lauscht und 'ZAHL' die entsprechende Displaynummer. Den Port kann man auch selbst festlegen durch den Befehl 'vncserver :ZAHL'. Beim ersten Start wird das Setzen eines Passwortes verlangt. Das ist wichtig, da sonst jedermann ohne Passwort Zugriff auf den Rechner hat, wenn der VNCServer läuft. Grundsätzlich unterscheidet sich das Ergebnis von Methode 1 und 2 dadurch, daß hier keine Anmeldemaske erscheint, sondern nur das VNC-Passwort abgefragt wird und dann ein X-Desktop derjenigen Benutzerin erscheint, die den VNCServer gestartet hat. Standardmäßig ist bei SuSE der TWM als Windowmanager eingestellt. Außer diesem startet nur ein X-Terminal. Wem das zu arm ist, der kann das in der Datei ~/.vnc/xstartup umstellen. Wichtig ist hierbei, das '&' am Ende jeder Zeile nicht zu vergessen. KDE z.B. kann man dadurch starten, daß man 'twm' durch 'startkde' ersetzt, bei XFCE ist es 'startxfce4', bei Gnome 'gnome', bei Openbox 'openbox, etc.. Das X-Terminal kann man per Auskommentierung oder Löschen der entsprechenden Zeile unterdrücken. 'xsetroot' setzt die Hintergrundfarbe und ist auch nicht wichtig. Die Auflösung ist die Eures eigenen Desktops. Beenden könnt Ihr den VNCServer mittels 'vncserver -kill :ZAHL'

Methode 4: Methode 3 ließe sich auch automatisieren. z.B. durch einen Eintrag in die .profile der jeweiligen Nutzerin.

Methode 5: KDE bringt eine eigene VNC-Freigabe mit, mit der der momentane KDE-Desktop freigegeben werden kann. Dazu muß das Paket 'kdenetwork3-vnc' installiert sein. Startet das Kontrollzentrum, wählt den Punkt 'Internet & Netzwerk' und darunter 'Arbeitsfläche freigeben' aus. Nun könnt Ihr auswählen, ob Ihr Euren Desktop standardmäßig freigebt oder nur auf Einladung hin, ob Ihr vor einer Verbindung gefragt werden wollt und noch einiges mehr. Die Optionen sind eigentlich ziemlich selbsterklärend. Der VNCServer lauscht auf Port 5900.

Methode 6: Auch Gnome bringt eine eigene Desktopfreigabe mit. Dazu muß das Paket 'vino' installiert sein. Die Einstellungen finden sich hier etwas versteckt im 'Gnome Configuration Editor'. Wählt dort unter 'desktop' 'remote access' aus. Einfach 'enabled' anhaken. Die Dokumentation zu den einzelnen Schlüsseln ist selbsterklärend. Vino lauscht auf Port 5900.

Methode 7 (Dank an hep83): Yast-Kontrollzentrum/Hardware/Grafikkarte und Monitor/ dort auf "ändern" klicken. (oder direkt Sax2) Dann gibts da einen Unterpunkt (Zugriffskontrolle-VNC), wo man das VNC Protokoll aktivieren kann. Nach nem Neustart der grafischen Oberfläche läufts perfekt. In VNC einfach per IP oder Name einloggen, ohne Portangabe - nimmt automatisch Port 5900. Der Vorteil dieser Methode ist der, daß der aktuelle Desktop angezeigt wird, ohne von Gnome oder KDE abhängig zu sein.

Firewall: Für alle hier vorgestellten Methoden muß natürlich in der SuSEFirewall2 oder einer anderen verwandten Firewall der oder die entsprechende(n) Port(s) freigegeben werden. Für das Freischalten in der SuSEFirewall2 geht man folgendermaßen vor. Startet YaST, wählt 'Sicherheit und Benutzer', darunter 'Firewall' aus. Im Unterpunkt 'Erlaubte Dienste' markiert Ihr jetzt die Zone, in der Ihr den VNCServer freischalten wollt und wählt 'Erweitert' aus. Hier schreibt Ihr nun in die Zeile 'TCP-Ports' alle Ports durch Leerzeichen getrennt hinein, die Ihr freigeben wollt.

Verbindung zum Server: Im Allgemeinen kann man sich in einem VNC-Viewer per SERVERNAME:DISPLAYNUMMER oder SERVERNAME::PORT verbinden. Für Port 5900 genügt auch SERVERNAME alleine. In einem Browser verwendet man SERVERNAME:PORT.

Fehlersuche: Im Folgenden liste ich mal ein paar Anhaltspunkte auf, wo man suchen kann, falls es mal nicht klappt. Natürlich sind nicht alle Anhaltspunkte für alle Methoden einschlägig. - Es erscheint nur ein grauer Bildschirm: kdmrc editiert?, xstartup editiert? - Es kommt gar keine Verbindung zustande: Firewalls richtig eingestellt (Server und Client)?, funtioniert die Namensauflösung?, xinetd auf Server gestartet?

Absicherung der VNC-Verbindung per SSH-Tunnel: Das Problem bei VNC-Verbindungen ist, daß sie unverschlüsselt sind. Das mag im heimischen LAN kein Problem sein, jedoch schon beim heimischen WLAN und spätestens bei einer Verbindung über das Internet wird es eines. Der unverschlüsselte Verkehr kann abgehört werden und niemand möchte, daß seine VNC-Server plötzlich von jemand Böswilligen gesteuert werden. Deshalb ist es sinnvoll, außerhalb des eigenen LANs die VNC-Verbindung per SSH-Tunnel zu verschlüsseln. So spart man sich außerdem, die VNC-Ports in der Firewall freigeben zu müssen. Das Vorgehen ist folgendermaßen: Auf dem VNC-Server muß ein SSH-Server laufen und in der Firewall der entsprechende Port freigegeben sein (standardmäßig Port 22). Dann öffnet man ein X-Terminal seiner Wahl und gibt folgendes ein:

ssh -l USERNAME_AUF_SSH-SERVER -C -L PORT_AUF CLIENT:VNC-SERVER:PORT_AUF_SERVER SSH-SERVER

Danach kann man sich mit einem VNC-Viewer nach localhost::PORT_AUF_CLIENT verbinden (geht auch mit der Displaynummer, dann nur mit einem Doppelpunkt).

Beispiel: ssh -l tux -C -L 5901:pinguin.antarktis.de:5901 pinguin.antarktis.de; danach vncviewer localhost::5901 oder vncviewer:1.

Nähere Erläuterungen zu SSH-Tunnels gibt auch http://www.linux-club.de/viewtopic.php?t=18914. Für SSH-Tunnel von Windowsrechnern aus empfehle ich Putty zu verwenden. Ein howto findet sich hier: http://www.netzmafia.de/skripten/internet/putty-tunnel.html

Anmerkungen, Verbesserungen und Nachfragen bitte unter Diskussion zum VNC-Howto posten.


Rolle