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.

Von "http://www.lug-wr.de/wiki/index.php/Howto:VNC"

Diese Seite wurde bisher 12789 mal abgerufen. Diese Seite wurde zuletzt geändert um 19:58, 7. Aug 2009. Inhalt ist verfügbar unter der GNU Free Documentation License 1.2.