Achtung

Dieser Beitrag ist schon sehr alt, und die Infos hier sind sicherlich hoffnungslos veraltet…

Per VNC auf UBUNTU zugreifen

Ubuntu
Autor:in

produnis

Veröffentlichungsdatum

23. April 2009

Wie schon erwähnt habe ich UBUNTU 8.10 auf meinem alten Video-PC installiert. Da die Kiste im Dachgeschoss steht, würde ich sie gerne per VNC steuern. UBUNTU bringt von Hause aus einen VNC-Server mit, der per “System => Einstellungen => Entfernter Desktop” scharfgeschaltet werden kann. Der Server, der hier von UBUNTU genutzt wird, heisst vino und bringt einige Nachteile mit sich:

  1. die Einstellungsmöglichkeiten sind vergleichsweise dürftig

  2. Er läuft selbst im LAN sehr träge!

* Wenn ich mich mit OSX per [Chicken of the VNC](http://sourceforge.net/projects/cotvnc/) zu UBUNTU verbinde, kann es bis zu 30 Sekunden dauern, bis meine Mausbewegungen und Befehle übertragen sind bzw. das Bild aufgebaut ist. 


* Unter Leopard läuft das ein wenig (wirklich nur ein wenig) besser, wenn ich nicht per Chicken zugreife, sondern mit dem Apple-eigenen VNS-Viewer (im Finder unter der Leiste "Freigabe" beim UBUNTU-Rechner auf "Bildschirm steuern" klicken). 


* Es kann ein wenig helfen, wenn man bei UBUNTU die Desktop-Effekte abschaltet (System => Einstellungen => Erscheinungsbild => Reiter "Visuelle Effkte") und das Hintergrundbild nicht mitüberträgt
  1. die Zwischenablage wird nicht zwischen den Rechnern synchronisiert

Das ist sehr ärgerlich, denn die OSX-Bildschirmsteuerung (von OSX zu OSX) ist selbst dann super schnell, wenn das Bild von 2 angeschlossenen Monitoren übertragen wird.

[Wenn man nun ganz auf VNC verzichten möchte, kann man es mit der Alternative “FreeNX” versuchen, welche viel schnellere Übertragungen bietet und recht einfach installiert werden kann.]

Nunja, ich wollte zunächst jedoch bei VNC bleiben und habe daher einen alternativen VNC-Server auf dem UBUNTU-Rechner installiert: x11vnc in Kombination mit autocutsel. Letzteres synchronisiert die Zwischenablage und funktioniert evtl. auch bei vino.) Und das geht so:

  1. Setze dich an den UBUNTU-PC und öffne ein Terminalfenster

  2. Installiere (falls noch nicht vorhanden) openssh-server per Terminaleingabe:

sudo apt-get install openssh-server

SSH ermöglicht es dir, per Terminal von OSX aus auf die Kommandozeile von UBUNTU zuzugreifen. Somit kann man den Rechner auch dann steuern, wenn VNC mal “streikt”. Ist auf jeden Fall gut, wenn man sich SSH einrichtet

  1. Entferne vino vom System per
sudo apt-get remove vino
  1. Installiere x11vnc und autocutsel per
sudo apt-get install x11vnc autocutsel
  1. Gehe an deinen OSX-Rechner und öffne ein Terminal-Fenster. Per SSH kann man sich nun bei dem UBUNTU-Rechner anmelden:
ssh UBUNTU

wobei UBUNTU durch die lokale IP-Adresse des UBUNTU-PCs ersetzt werden muss. Voraussetzung hierbei ist, dass du einen Benutzeraccount am UBUNTU-Rechner hast. Sollte der Username von deinem OSX-Kurznamen abweichen, musst du folgendes eintippen:

ssh USER@UBUNTU

wobei USER durch deinen UBUNTU-Usernamen ersetzen musst. Du wirst nun aufgefordert, das Passwort des Ubuntu-Users einzutippen. Tue dies und wundere dich nicht, dass keine Symbole (z.B. ****) erscheinen. Tippe dein Passwort ein und drücke die RETURN-Taste. Voila, du bist nun mit dem UBUNTU-PC verbunden.

  1. Versuche nun x11vnc zu starten. Hierfür tippst du folgendes ein:
x11vnc -display :0

Hierdurch wird x11vnc gestartet, und der Bildschirm 0 (Standard-Monitor) wird versendet (wenn z.B. zwei Monitore angeschlossen sind, wäre Display 1 die Nummer des zweiten Monitors). Auf der Konsole werden nun einige Logdaten ausgegeben. Am Ende sollte etwas in dieser Art stehen:

screen setup finished. PORT=5901

Der letzte Eintrag ist der wichtige: Der Bildschirminhalt wird über Port 5901 übertragen (der Standardport wäre eigentlich 5900, aber anscheined hat vino (bei mir zumindest) diesen Port für sich reserviert. Nuja, egal).

  1. Öffne nun Chicken of the VNC und verbinde dich zum UBUNTU-Pc, wobei du bei Host die lokale IP-Adresse von UBUNTU, und bei Display die 1 einträgst (der Anfang der Portnummer, also 590, wird vom Chicken automatisch hinzugefügt. Da unser UBUNTU auf Port 5901 sendet, muss nur die 1 eingetragen werden. Bei Port 5900 müsstest du die 0 eintragen).

  2. Funktioniert? Ja, super!

  3. Du kannst die Freigabe des Bildschirms noch durch ein Passwort absichern. Hierzu musst du am UBUNTU-PC folgendes eintippen:

x11vnc -storepasswd

Das Passwort musst du 2mal eingeben. Anschließend wird es (automatisch) in ~/.vnc/passwd gespeichert. Um das Passwort wirklich abzufragen, muss x11vnc künftig wie folgt gestartet werden:

x11vnc -avahi -usepw -display :0

Der Zusatz -avahi erlaubt es, unseren Rechner in den Übersichten der VNC-Clienten als “potentiell verfügbar” anzuzeigen.

  1. Jetzt muss autocutsel gestartet werden, damit die Zwischenablage der beiden Bildschirme synchronisiert werden. Dies geschieht mit einem neuen Terminal auf UBUNTU in welchen man eingibt:
autocutsel
  1. Fertig!

Per SSH-Tunnel Bei mir ist x11vnc sogar schnell genug, um den Bildschirm über das Internet zu übertragen. So kann ich von der Uni aus meinen UBUNTU-PC zu hause steuern. Hierfür nutze ich einen so genannten SSH-Tunnel.

  1. Du benötigst einen so genannten dynDNS-Eintrag (kostenlosen) für deine Internetverbindung. Die meisten Router verstehen sich gut mit dynDNS.org. Durch so einen Eintrag wird eine von dir gewählte Adresse (z.B. MeinNickname.dyndns.org) automatisch mit deiner derzeitigen Internet-IP-Adresse synchronisiert. Das heisst: dein lokales Netzwerk zu hause ist immer über diese Adresse im Internet erreichbar!

  2. Stelle deinen Router so ein, dass Port 22 an die lokale IP des UBUNTU-PC weitergereicht wird.

  3. Bevor du zur Uni gehst, schalte den UBUNTU-PC ein :-)

  4. An der Uni öffnest du ein Terminal und tippst dort ein:

ssh -t -L 5901:localhost:5901 USER@MeinNickname.dyndns.org 'x11vnc -usepw -display :0'

Natürlich musst du USER und MeinNickname durch deine Daten ersetzen. Dieser Befehl bewirkt folgendes:

* du stellst eine SSH-Verbindung zum UBUNTU-PC her


* durch die Option `-L` wird an deinen Port 5901 der UBUNTU-Port 5901 gebunden. Dies geschieht durch den Eintrag "`localhost`". Der UBUNTU-PC denkt, mit `localhost` sei er gemeint. Dein Fernsteuer-PC denkt das aber auch von sich...


* im zweiten Teil wird dann der Befehl zum Start von `x11vnc` gesetzt.
  1. Jetzt brauchst du noch ein Terminalfenster um autocutselzu starten.
autocutsel
  1. Öffne jetzt Chicken of the VNC und verbinde dich wie folgt:
Host: localhost Display: 1 Password: (dein generiertes VNC-Passwort)
  1. Et Voila, du bist über das Internet mit einem relativ gut verschlüsselten SSH-Tunnel per VNC zu deinem UBUNTU-PC verbunden

automatisch starten Natürlich können x11vnc und autocutsel automatisch gestartet werden, sobald ein User sich am Desktop anmeldet. Ein schönes Script stellt Intangible zur Verfügung:

  1. Vorraussetzung ist, dass x11vnc bereits installiert ist, und dass per x11vnc -storepasswd ein Passwort in ~/.vnc/passwd hinterlegt wurde

  2. das Script startet x11vnc, sobald sich ein User eingeloggt hat, zeigt den verwendeten Port an und speichert ihn in ~/.vnc/port.txt ab.

  3. setze dich an deinen UBUNTU-PC, öffne ein Terminalfenster und gebe dort ein:

sudo gedit /usr/local/bin/sharex11vnc

Es öffnet sich der graphische Editor gedit. Hier hinterlegen wir folgenden Code und speichern dann ab:

`#!/bin/sh x11vnc -nap -bg -many -rfbauth ~/.vnc/passwd -desktop “VNC \({USER}@\){HOSTNAME}”|grep -Eo “[0-9]{4}”>~/.vnc/port.txt

comment out the following if you don’t want a popup telling you which port you’re using.

zenity –info –text=“Your VNC port is cat ~/.vnc/port.txt”`

Wenn du nicht möchtest, dass der VNC-Port beim Login ausgegeben wird, dann setze eine # vor das zenity in der letzte Zeile

  1. nach dem Speichern kannst du den Editor schließen. Gib nun im Terminal folgendes ein:
sudo chmod 755 /usr/local/bin/sharex11vnc

Hierdurch wird das Script ausführbar.

  1. Damit das Script bei jedem Login gestartet wird, klicke in UBUNTU auf “System => Einstellungen => Sitzungen”, wähle dort den Reiter “Startprogramme” aus und klicke auf “Hinzufügen”. Jetzt kannst du bei “Befehl” auf “Durchsuchen” klicken und das Script in /usr/local/bin/sharex11vnc auswählen. Als “Name” kannst du z.B. “x11vnc Start” verwenden.

  2. Anschließend klickst du nochmals auf “Hinzufügen” und schreibst in die Felder “Name” und “Befehl” je “autocutsel” (ohne die ““)

  3. Fertig! Beachte aber: bei mir ist bei dieser Variante die Portnummer wieder auf den Standard (5900) gesetzt worden. Folglich musst du beim Chicken Display 0 wählen! Ähnlich anders muss auch der SSH-Tunnel aufgebaut werden, falls du über das Internet zugreifen möchtest:

ssh -t -L 5900:localhost:5900 USER@MeinNickname.dyndns.org

Auch wird der Befehl zum Starten von x11vnc nicht mehr angegeben, da x11vnc ja jetzt immer automatisch gestartet wird.

Links