Institut für Theoretische Informatik, Algorithmik

Remote X-Sessions

Allgemeines

Das Ausführen von Programmen/Experimenten kann teilweise implizite graphische X-Objekte erzeugen, so dass eine entferntes Ausführen mittels screen nicht möglich ist. Für diesen Fall kann man sich eine minimalistische X-Session auf entfernten Rechner, wie sie mittels VNC zur Verfügung gestellt wird, nutzen. Prinzipiell handelt es sich dabei um gewöhnliche X-Sessions (wie sie auch lokal am Rechner genutzt werden), allerdings ist die Geschwindigkeit der Interaktion mit graphischen Elementen relativ langsam!

Basics

Zur erst loggt man sich auf dem gewünschten Zielrechner ein und startet mittles

vncserver -geometry 1024x768

eine X-Session. Die Angabe über den Parameter geometry legt die Auflösung fest; wird diese Option nicht mitangegeben, so wird die lokale Auflösung übernommen. Startet man das Programm zu ersten Male, so wird man aufgefordert ein Passwort einzugeben. Dieses wird dann zu Authentifizierung des Clients benutzt. Die Ausgabe schaut in etwa wie folgt aus

New 'X' desktop is HOSTNAME:SESSION_NUMBER

Starting applications specified in /home/USER/.vnc/xstartup
Log file is /home/USER/.vnc/HOSTNAME:SESSION_NUMBER.log

mit folgenden wichtigen Informationen:

  • HOSTNAME ist der Name des Rechners auf dem die X-Session läuft
  • SESSION_NUMBER ist die ID der X-Session und wird benötigt, um diese wieder ansprechen zu können

Anschließend kann man sich wieder ausloggen und sich mittles

vncviewer HOSTNAME:SESSION_NUMBER

zur entfernten X-Session verbinden. Sind alle Programme durchgelaufen, so lässt sich die X-Session via

vncserver -kill :SESSION_NUMBER

auf dem entsprechenden Rechner beenden. Das schliessen des Fensters mit der X-Session beendet diese natürlich nicht ;)

Advanced Features

Die Interaktion in der entfernten X-Session erfolgt dadurch, dass Input-Signale (Tastatur, Maus, etc.) auf dem Client registriert werden und an den entfernten Rechner übertragen werden. Dazu wird ein einfaches Protokoll verwendet, welches nicht verschlüsselt ist. Das bedeutet, dass jeder im lokalen Netz sensitive Information, die in der X-Session eingegeben werden mitlauschen kann. Um dies zu unterbinden, sollte man (insbesondere, wenn man sich nicht im lokalen Netz befindet) die Daten verschlüssel übertragen. Am einfachsten ist dies mittels Port-Forwarding und SSh zu erreichen:

ssh -N -L 5901:localhost:PORT_X-SESSION HOSTNAME_X-SESSION

dabei steht PORT_X-SESSION für den Port der X-Session und HOSTNAME_X-SESSION für den Rechner auf dem die X-Session läuft. (Man beachte, dass solange der Port-Forward steht, das SSH-Kommando weder terminiert noch eine Ausgabe von sich gibt!) Den Port der X-Session bestimmt sich durch 5900 + SESSION_NUMBER. Entsprechend muss auch der Aufruf von vncviewer abgeändet werden zu:

vncviewer localhost:1

Natürlich lassen sich auch mehrere X-Session verschlüsselt übertragen, man muss nur 5901 durch höhere Ports ersetzen.

In Kürze

Die wichtigsten Befehl zusammengefasst sind:

Entfernter Rechner

  • vncserver -geometry 1024×768, welches eine X-Session start
  • vncserver -kill :SESSION_NUMBER, welches eine X-Session beendet

Lokaler Rechner

  • ssh -N -L 5901:localhost:590p HOSTNAME_X-SESSION baut ein Port-Forwarding auf (p steht für die SESSION_NUMBER)
  • vncviewer localhost:1 verbindet sich zu der X-Session