VNC

Aus crazylinux.de
Version vom 9. Januar 2007, 21:43 Uhr von Jonathan (Diskussion | Beiträge) (cat)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Virtual Network Computing (VNC)

@Autor: André Stiehm

VNC dient zur Bildschirmübertragung und Fernbedienung von Computern übers Netzwerk. Der Zugriff ist plattformunabhängig möglich, man kann also auf einem Linux einen Windows-Desktop anzeigen lassen und umgekehrt. Naürlich ist es auch möglich, unter Linux einen Unix- oder einen anderen Linux-Desktop anzuzeigen.

Es ist mir bei meiner Lektüre von Usenet-Postings und Foren immer wieder aufgefallen, dass einige Unklarheiten betreffend dem VNC-Server unter Linux bestehen. Kann man nun die aktuell laufende X-Session übernehmen oder nicht? Die Antwort ist, es gibt zwei, besser gesagt sogar drei, verschiedene VNC-Server-Arten unter Linux. Aber beginnen wir am Anfang, in diesem Fall mit der Installation von VNC unter Slackware Linux - unter anderen Distributionen erfolgt die Installation mittels RPM- oder .deb-Paketen, der Rest der Anleitung bleibt sich aber grösstenteils gleich!

  $> apt-get install vnc

Wurde dies getan, kann zum "normalen" User gewechselt werden. Als erstes muss jetzt ein Passwort für den Server vergeben werden. Dies wird per Aufruf von vncpasswd gemacht. Das Password wird von diesem Tool verschlüsselt in das File ~/.vnc/passwd geschrieben.

  $> su - MYUSER
  #~> vncpasswd
  Password:
  Verify:


Ich habe vorhin gesagt, es gäbe drei verschiedene Arten, den VNC-Server zu starten. Also beginnen wir mit der...

Variante 1

  #~> vncserver
  New 'MYHOSTNAME:1 (MYUSER)' desktop is MYHOSTNAME:1
  Starting Applications specified in /home/MYUSER/.vnc/xstartup
  Log file ist /home/MYUSER/.vnc/MYHOSTNAME:1.log

Damit kann man nun auf einem anderen Rechner den vncviewer starten. Als VNC Server muss in diesem Fall MYREMOTEHOST-IP:5901 eingegeben werden. Nach der Eingabe des vorher vergebenen Passwortes erreicht man nun zwar den entfernten Rechner, nicht aber den eigenen, aktuellen Desktop, wie man es eventuell von Windows her gewöhnt ist. Diese Variante hier ist dafür aber sehr schnell! Per default wird in diesem Fall nur ein xterm und der twm gestartet. Dies muss aber nicht so bleiben, denn was gestartet wird, kann in der Datei ~/.vnc/xstartup definiert werden, dabei ist xstartup nach dem selben Prinzip wie die .xinitrc aufgebaut! Will man zB openbox anstelle von twm als Window Manager in der VNC-Session verwenden, kann in der Datei xstartup einfach "twm &" mit "openbox &" ersetzt werden. Alternativ kann sogar die gesamte .xinitrc eingelsen werden. Wer das will, kann das File folgendermassen anpassen:

  #~> vi .vnc/xstartup
     #!/bin/bash
     [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
     . ~/.xinitrc

Um eine neue Konfiguration zu aktivieren, muss der vncserver gestoppt und neu gestartet werden. Dies kann mit den folgenden Kommandos realisiert werden:

  #~> vncserver -kill :1
  #~> vncserver


Oft will man aber, wie unter Windows, per VNC den aktuellen Bildschirminhalt anzeigen lassen. Auch dies ist möglich - damit sind wir nun bei...

Variante 2

Um die Übernahme des derzeit aktiven Desktops zu ermöglichen, wird im VNC-Package als erste Möglichkeit das Tool x0vncserver mitgeliefert. Hierbei handelt es sich aber um einen extrem ineffizienten Weg, da dieser einfach ununterbrochen jede Anzeige vom X-Server abfragt und an den Client liefert. Für die tägliche Arbeit ist dieser also nicht geeignet - aber der Vollständigkeit halber möchte ich ihn hier trotzdem nicht vernachlässigen:

Gestartet wird mit dem Pfad zum mit vncpasswd erstellten Passwort als Parameter:

  #~> x0vncserver -PasswordFile .vnc/passwd

Parameter zu x0vncserver gibts per Manpage oder mit x0vncserver -h. Jetzt kann mit dem VNC Viewer und der Eingabe von MYREMOTEHOST-IP:5900 als Server String der momentane Desktop übernommen werden. Leider ist die Performance dabei nicht gerade überwältigend - im Gegenteil, bei dieser Variante schläft einem das Gesicht ein. Und deshalb last but not least....


Variante 3

Mit dieser Variante gelangen wir ans Ziel, wenn die Aufgabe lautet, die aktuelle Session, also das :0-Display, zu übernehmen. Hierbei wird das $DISPLAY direkt auf den entfernten Rechner übertragen - und man erreicht damit um Faktoren bessere Performance als mit dem x0vncserver Dieser Weg wird damit realisiert, dass ein ladbares Modul in Xorg (oder XFree86 > Version 4) eingebunden wird, welches den X-Server um diese Funktionalität erweitert:

Zuerst muss sichergestellt werden, dass das shared object vnc.so am richtigen Platz liegt. Der Pfad dahin muss dem im untenstehenden Beispiel entsprechen. Wenn dies nicht so sein sollte, muss das Modul dorthin kopiert werden. Am einfachsten kann man die Lage der Datei mit dem Befehl locate herausfinden:

   $> locate vnc.so
      /usr/X11R6/lib/modules/extensions/vnc.so

Ist der Pfad so wie hier beschrieben, muss als nächstes die xorg.conf angepasst werden, damit das Modul geladen wird. Dazu sind zwei Einträge nötig: Im Abschnitt Module muss Load "vnc" eingetragen werden, damit das Modul beim Start des X-Servers eingebunden wird, und in der Sektion Screen muss die Zeile Option "passwordFile" "/home/MYUSER/.vnc/passwd" eingetragen werden, damit beim Login das Passwort mit dem im Passwordfile verglichen werden kann.

Das ganze sieht dann ungefähr so aus:

   $> vi /etc/X11/xorg.conf
	...
	Section "Module"
		...
		Load "vnc"
	EndSection
	...
	...
	Section "Screen"
		...
		Option "passwordFile" "/home/MYUSER/.vnc/passwd"
	EndSection
	...

Wurde alles dies erledigt, muss X neu gestartet werden. Danach kann per VNC-Client der aktive Screen auf dem entfernten Rechner übernommen werden.

SSH Forwarding

Da bei VNC alles als Klartext übertragen wird, wäre es nun noch sinnvoll, das ganze per SSH-Forwarding zu verschlüsseln. Hat man also einen Windows-Client, auf dem man einen Linux-Desktop anzeigen lassen möchte, kann man im SSH Programm seiner Wahl, im untenstehenden Beispiel mit PuTTY, den Port des VNC Servers auf dem Linux auf dem Windows-Rechner weiterleiten.

Beispiel gefällig?

In PuTTY eine Verbindung zum entfernten Linux-Rechner einrichten und dort dann unter Tunnels ein Port forwarding einrichten, wie auf dem Bild gezeigt. Screenshot

Diese Einstellungen speichern, damit sie nicht jedes Mal neu gemacht werden müssen, und danach per PuTTY auf dem Linuxrechner einloggen. Wenn dies geschehen ist, kann der VNC Viewer auf dem Win-PC geöffnet werden und als VNC Server wird nun localhost:99 eingetragen. Et voilà, die verschlüsselte VNC Verbindung ist erstellt.

Anleitung gefunden bei http://www.manpage.ch/faq/vnc.php