Howto:VNC
Inhaltsverzeichnis |
Desktopfreigabe mit VNC
Eine Freigabe des Desktops ist nützlich, um z.B. sich helfen zu lassen oder von zu Hause auf dem Arbeitsrechner zu arbeiten. Es gibt mehrere Protokolle, die benutzbar sind:
- ICA - von Citrix entwickelt, propritär
- RDP - von Microsoft entwickelt, propritär
- VNC - von AT&T entwicklelt, GPL-Lizenz
Desktopfreigabe mit KDE
Man kann den Desktop von KDE mit dem integriertem VNC-Server freigeben. Man kann dies im KDE-Kontrollzentrum einstellen: "Internet & Netzwerk - Arbeitsfläche freigeben"
Man kreuzt dann "Verbindung ohne Einladung erlauben" und "Für uneingeladene Verbindung um Bestätigung bitten" an und setzt ein Paßwort.
Freigabe durch mit x11vnc
Die Desktopfreigabe von KDE ist einfach zu bedienen. Warum sollte man dann eine andere Variante in Betracht ziehen?
Die KDE-Lösung hat Vor- und Nachteile:
Vorteile:
- einfach einzurichten
- KDE bringt alles mit
- Benachrichtigung bei Verbindung
Nachteile:
- nur Desktop des aktuellen Benutzers sichtbar
- hohe CPU-Nutzung
Wenn man z.B. den Anmeldemanager von KDE sehen will oder die CPU-Last ein Problem wird, kann man als Alternativlösung x11vnc verwenden. Hier wird das aktuelle X11-Display per VNC freigegeben.
Einrichtung
Es müssen folgende Pakete installiert werden:
- vncserver
- x11vnc
Danach muss man ein Paßwort für die VNC-Verbindung setzen:
mkdir -p /root/.vnc vncpasswd /root/.vnc/passwd
Nun kann man auf einer freien Konsole als root x11vnc starten:
x11vnc -loop -rfbauth /root/.vnc/passwd -auth /var/run/xauth/dasdsad -display :0
Dies ist natürlich umständlich und kann noch optimiert werden. Ein kleines Skript, dass unter "/usr/local/sbin/start_x11vnc.sh" abgespeichert wird, vereinfacht einige Dinge:
#!/bin/bash DISPLAY=":0" TARGET_DEPTH=8 PASSWDFILE="/root/.vnc/passwd" AUTHFILE=$(ls -1 /var/run/xauth | grep $DISPLAY) USE_XRDP="0" ######### dont change below USER=$(id -u) if [ $USER -ne 0 ]; then echo "$0 must be run as root, exiting" exit 1 fi if [ -z $AUTHFILE ]; then echo "no auth file found, is x server running on display $DISPLAY? Exiting." exit 1 fi if [ "$USE_XRDP" = "1" ]; then XRP_RUNNING=$(ps ax | grep xrdp | grep -v grep | wc -l) if [ $XRP_RUNNING -lt 1 ]; then echo "starting xrdp server..." /usr/bin/xrdp else echo "xrdp already running" fi fi echo "Starting x11vnc (passwd file: $PASSWDFILE, auth file: $AUTHFILE, display: $DISPLAY)..." x11vnc -loop -rfbauth $PASSWDFILE -auth /var/run/xauth/$AUTHFILE -display $DISPLAY echo "exiting"
Wer RDP als Protokoll zusätzlich haben möchte, kann "USE_XRDP" auf 1 stellen, xdrp installieren und folgende Einträge in der "/etc/xrdp/xrdp.ini" eintragen:
[globals] bitmap_cache=yes bitmap_compression=yes port=3389 crypt_level=low channel_code=1 [xrdp1] name=login lib=libvnc.so username=na password=ask ip=127.0.0.1 port=5900
Um das x11vnc-Wrapper-Skript bei der Anmeldung zu starten, trägt man es in der Datei "/etc/kde3/kdm/Xsetup" ein:
/usr/local/sbin/start_x11vnc.sh &
Nach einem Neustart des "kdm" mittels "/etc/init.d/kdm restart" wird dann der x11vnc-Server automatisch mitgestartet.
Ich habe festgestellt, dass die Performanz bei der reinen VNC-Verbindung besser ist, als wenn man per RDP auf den VNC-Server verbindet.
Verbindung zu einem VNC-Server
Um eine Verbindung zu einem VNC-Server aufzubauen, gibt es verschiedene Programme:
- vncviewer - original VNC-Client (Unix, Windows, Mac)
- krdc - KDE-Client (in KDE enthalten) (Unix)
Verbindung zu einem RDP-Server
Um eine Verbindung zu einem RDP-Server aufzubauen, gibt es verschiedene Programme:
- rdpclient - eingebauter RDP-Client unter Win32-Betriebssystemen
- rdesktop - RDP-Client für Unix-Betriebssysteme
- krdc - KDE-Client (in KDE enthalten)
- ssvnc - x11vnc client mit vielen Extras (Sound, Drucken, Dateitransfer, etc
Portweiterleitung, wenn Rechner hinter DSL-Router
Wenn der Rechner, dessen Bild man sehen möchte, hinter einem DSL-Router ist, muss man den ensprechenden Port weiterleiten. Hierzu empfiehlt es sich, bei diesem Rechner eine statische IP-Adresse einzurichten.
Der weiterzuleitende Port ist "5900" (für VNC-Display 0), 5901 entsprechend "5901".
Absicherung via SSH-Tunnel und SSVNC
Man kann zusätzliche Sicherheit hinzufügen, in dem man über SSH tunnelt (was meist schon vorhanden ist). Hierzu verwendet man am besten den ssvnc-Client vom x11vnc-Projekt, der für Linux, Windows und Mac verfügbar ist: ssvnc (http://www.karlrunge.com/x11vnc/ssvnc.html)
- Linux+Mac: Linux-/Mac-Version (http://downloads.sourceforge.net/ssvnc/ssvnc_unix_only-1.0.21.tar.gz?use_mirror=)
- Windows: Windowsversion (http://downloads.sourceforge.net/ssvnc/ssvnc_windows_only-1.0.21.zip?use_mirror=)
Leider existiert (noch) kein Debian-Paket dafür, so dass man das Binary so ziehen muss.
Man benötigt dafür TCL/TK.
Man startet den Client mit "./ssvnc" und wählt "SSH". Bei "VNC-Host" trägt man den Host und das Display ein: "127.0.0.1:0" für das erste Display. In "Proxy/Gateway" trägt man den Server ein: "benutzer@meinserver:22" bzw "benutzer@meinserver:2200" (wenn SSH-Port auf 2200 liegt). Dann natürlich noch das Passwort eingeben und auf "Connect" klicken. Es wird dann ein Terminalfenster geöffnet, wo man u.a. seine Passphrase (wenn nicht vom SSH-Agenten verwaltet) bzw. sein Paßwort eingeben kann. Man kann dort auch ein Kommando z.B. zum Aufbau eines SSH-Tunnels ins LAN eingeben, wenn man Port 22 nicht auf den Server weitergeleitet hat.
Absicherung via SSH-Tunnel und krdc
Leider unterstützt krdc (KDE-Client für VNC) keine SSH-Verschlüsselung. Mann kann aber den Tunnel auch manuell aufbauen und danach mit dem krdc auf localhost verbinden.
krdc vnc:/127.0.0.1:0 & ssh benutzer@meinserver:22 -N -C -L 5900:127.0.0.1:5900
Man muss dann in dem Terminal das Paßwort bzw Paßphrase eingeben. Danach kann man dann auf "Verbinden" klicken.