Remotezugriff mit X von und auf Unix/Linux/Mac-Systemen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Wenn ein Desktop auf einem Linux-Rechner gestartet ist, geschieht die Kommunikation der grafischen Oberfläche mit dem Betriebssystem über einen X-Server. Er bildet vereinfacht gesagt, eine Zwischenschicht zwischen Desktop und Betriebssystem. Er verwendet dabei grundsätzlich das Netzwerk, auch wenn der Rechner nicht in einem Netzwerk steht.
    Das Geniale an dem X-Protokoll ist seine Netzwerktransparenz: Ein X-Server ist nicht auf den lokalen Rechner angewiesen, man kann mit ihm auf andere Rechner zugreifen und andere Rechner können den lokalen X-Server verwenden.

    Laufen der remote-Rechner und der Lokale mit unixoiden Betriebssystemen, dann sind dadurch zusätzliche Protokolle wie VNC oder RDP überflüssig.

    Zusätzlich bietet X einen weiteren Vorteil:
    Während bei VNC oder RDP erst die Ausgabe erzeugt wird und dann das Ergebnis über das Netzwerk geschickt wird, geschieht das Rendern bei X erst auf dem Zielrechner. Der remote-Rechner wird damit nicht belastet, er muss die grafische Oberfläche lokal nicht gestartet haben.

    Das X-Protokoll hat einen Nachteil, es schickt die Daten unverschlüsselt über das Netz (liegt wohl am Alter des Protokolls). Aber dieses Problem läßt sich lösen.

    Dieses Tuturial beschreibt die Konfiguration des lokalen Rechners und des Pis mit Rasbian und LXDE.

    Drei Arten des Zugriffs werden beschrieben:

    • Öffnen einzelner Fenster bzw. Anwendungen auf dem lokalen Desktop
    • Anzeigen des remote-Desktop mit einen zweiten (oder dritten) lokalen X-Server
    • Anzeigen des remote-Desktops innerhalb eines Fensters (geschachtelter X-Server)

    Öffnen von Fenstern auf dem lokalen Desktop

    Hier gibt es zwei Möglichkeiten.

    • Ich wähle mich mit ssh auf einen remote-Rechner ein und rufe dann ein Programm auf
    • Ich rufe das Programm mit Hilfe von ssh direkt auf.


    Da beides über ssh aufgerufen wird, ist der Netzwerkverkehr auch verschlüsselt.

    1.)
    In einem Terminalfenster führe ich aus:

    Code
    ssh -X username@remote-rechner

    Gegebenenfalls muss ich ein Passwort eingeben und bin anschließend auf dem remote-Rechner. Jetzt kann ich beliebige Programme aufrufen. Sollte das Programm ein eigenes Fenster aufmachen, geschieht dies auf dem lokalen Desktop.

    2.)
    Man muss sich nicht erst auf dem Rechner einwählen und anschließend das Programm aufrufen. Es geht auch direkt:

    Code
    ssh -X username@remote-rechner /pfad/programm-aufruf

    Voraussetzung für beide Arten ist, dass auf dem remote Rechner das X11 forwarding aktiviert
    ist. In der Datei /etc/ssh/sshd_config muss stehen:

    Code
    X11Forwarding yes

    Dies ist die von mir bevorzugte Methode. Da ich meistens nur bestimmte Programme verwende, ist der komplette remote-Desktop überflüssig. Und so habe
    ich auf meinem Desktop ein schönes Durcheinander von lokalen und remote-Anwendungen.

    Empfehlenswert ist übrigens Folgendes nicht:

    Code
    ssh -X username@remote-rechner lxsession

    Dann geht es wirklich durcheinander.


    Anzeigen des des remote-Desktop in einem zweiten X-Server

    Man kann auf seinem Rechner noch weitere X-Server starten.

    Spaßeshalber in einem Terminal mal eingegeben:

    Code
    X :1

    Der Desktop scheint zu verschwinden und der Bildschirm ist schwarz, vielleicht blinkt links oben etwas.
    Mit STRG ALT F7 kommt man zurück zum Desktop. Mit STRG c im Terminal den X-Server wieder beenden.
    Der neu gestartete X-Server kann natürlich nichts anzeigen, da wir ihm nicht gesagt haben, was er anzeigen soll. Machen wir das:

    Vorausgesetzt wir haben einen fertig eingerichten remote Rechner, z.B. einen Pi mit Rasbian und der LXDE-Oberfläche.

    Code
    X :1 -terminate -query user@remote-machine

    Nach einer kurzen Denkpause kann man sich auf dem Pi einloggen.
    Zwischen den X-Servern wechselt man mit STRG ALT Fn. Mal anfangen mit F7 und F2

    Die Option -terminate bewirkt, das der X-Server beendet wird, wenn ich mich
    auf dem Pi abmelde. Ohne diese Option hängt die Einwahl in der Schleife und
    ich kann den X-Server nur von einem lokalen Fenster aus beenden.


    Richten wir den Pi ein (oder einen anderen Rechner mit LXDE)

    Zuerst nehmen wir uns die Datei /etc/lightdm/lightdm.conf vor, denn hier muss stehen:

    Desweiteren muss der Dienst lightdm gestartet sein.
    In einem Terminal als root eingeben:

    Code
    service lightdm start

    Man kann den Dienst auch immer starten lassen.

    Code
    update-rc.d /etc/init.d/lightdm defaults


    Anzeigen des Desktops in einem Fenster

    In der zuvor beschriebenen Methode habe ich den remote-Desktop auf dem ganzen Bildschirm und umschalten muss ich mit STRG ALT Fn. Das ist nicht immer praktisch.
    Und wenn ich einen Monitor mit großer Auflösung habe auch nicht notwendig (was soll der Pi mit 2560x1440 schon machen?).
    Wenn man zwei Monitore betreibt, läuft der X-Server zuerst nur mit der kleineren Auflösung der beiden Monitore und der Desktop ist gespiegelt auf beiden
    Monitoren.
    Natürlich kann man sich jetzt hinsetzen und eine Konfigurationsdatei für den zweiten X-Server erstellen. Dies ist aber aufwändig und imho nicht notwendig. Denn es gibt eine weitere Lösung: den geschachtelten X-Server, mit dem ich einen remote-Desktop in einem Fenster laufen lassen kann.

    Hierfür gibt es zwei Programme: Xnest und Xephyr. Letztere ist der Neuere und die Beschreibung bezieht sich auf ihn.
    Zuerst muss ich Xephyr lokal installieren.

    z.B. Debian

    Code
    apt-get install xserver-xephyr

    z.B. OpenSuse

    Code
    zypper install xorg-x11-server-extra

    Gib es auch für Mac OSX


    Jetzt kann man z.B. folgende Befehle in einem Terminal ausführen (root-Rechte nicht notwendig):

    Code
    Xephyr :1 -screen 1200x1200 -dpi 96 -keybd ephyr,,,,xkblayout=de &
    DISPLAY=:1 ssh -X username@remote-machine lxsession &

    Zunächst erscheint ein Fenster, dass 1200x1200 Pixel groß ist (plus Umrandung und Menüleiste).
    Mit dem zweiten Befehl erscheint in diesem Fenster der Desktop des remote Rechners.

    Der Aufruf von Xephyr sieht erstmal furchtbar aus. Im Einzelnen:

    • Da der laufende X-Server die Nummer :0 hat, muss der Neue die :1 bekommen (der nächste dann :2)
    • -screen 1200x1200 ist selbsterklärend. Es lassen sich beliebige Auflösungen angeben, muss natürlich zum eigenen Monitor passen.
    • -dpi 96 sollte sein, da Xephyr die Monitordaten nicht abfragen kann. Ohne diese Angabe ist u.U. die Schrift zu klein. Ausprobieren, welche Auflösung am besten passt. Sie muss nicht identisch mit der Auflösung des eigenen Monitors sein.
    • -keybd sollte sein, das sonst die Tastaturbelegung englisch ist. Die Mühe herauszubekommen, was die einzelnen Parameter der Option bedeuten, habe ich mir nicht mehr gemacht. Wer Spass daran hat, ...


    Der nächste Befehl ist der Aufruf des Desktop auf dem remote-Rechner:

    • Mit DISPLAY=1 weise ich die Ausgabe des folgenden Befehls den X-Server :1 zu, also den zuvor aufgerufenen Xephyr.
    • Der ssh-Befehl ruft auf dem remote-Rechner das Programm lxsession auf, also den Desktop, der dann im Fenster erscheint.


    Das Ganze ist jetzt auch verschlüsselt, da es über ssh läuft.

    Schön ist auch: Bei dieser Lösung braucht lediglich das X11Forwarding erlaubt sein.
    /etc/lightdm/lightdm.conf muss nicht angepasst werden. Genauso wenig muss der Dienst lightdm laufen.


    Aber aufgepasst!
    Der remote-Desktop läuft in einem Fenster. Schliesse ich es, dann ist auch der Inhalt weg. Pech gehabt, wenn da etwas nicht gespeichert ist.

    Viel Spaß

    Keep it simple [,&] stupid

    Einmal editiert, zuletzt von kungel (27. Oktober 2013 um 12:57)

  • Remotezugriff mit X von und auf Unix/Linux/Mac-Systemen? Schau mal ob du hier fündig wirst!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!