• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]ssh - remote X11 Anwendungen starten - $DISPLAY

A

Anonymous

Gast
Hallo zusammen,

nach langer Zeit muss ich euch mal wieder um eure Hilfe bitten.

Folgendes Ziel strebe ich an:
Mit meinem Laptop oder Handy per ssh auf einem Desktoprechner verbinden und auf diesem eine X11-Anwendung (VLC, Amarok) starten, die dann auch dort auf dem X11 Server (User ist angemeldet, und Desktopoberfläche läuft) startet. Es sei nochmal erwähnt das hier kein X11Forwarding durchgeführt werden soll. Eine vnc, krdc - Verbindung wird auch nicht angestrebt - wäre mit einem Handy ziemlich mühselig ;)

Die SSH Verbindung ist soweit kein Thema, was mich langsam meschugge macht ist diese $DISPLAY Variable.auf dem Desktoprechner. Lokal habe ich den Wert $DISPLAY=:0 oder auch :1, wenn eine zweite X-Oberfläche läuft.

Nun - wenn ich mich auf dem Desktoprechner mit
Code:
ssh user@desktoprechner
einlogge,.ist der Wert von $DISPLAY nicht gesetzt. Ist für mich logisch.
Mit
Code:
 ssh -X username@desktoprechner

erhalte ich
Code:
echo $DISPLAY
localhost:10.0
Was ich auch in etwa noch verstehe, da hier nun das X11Forwarding vom Server zum Einsatz kommt. Aber warum localhost:10.0 ?

Durch vieles herumprobieren und googeln, habe ich viele "export"-Varianten der $DISPLAY-Variable auf dem Desktoprechner (ssh-konsole) ausprobiert. Gefühlt hätte ich schon aus Zufall auf die richtige Lösung kommen müssen. :D

Es sei noch erwähnt das ich auf dem Desktoprechner auch schon
Code:
xhost +laptop
in der Userumgebung ausgeführt habe, aber entweder starten die Anwendungen auf dem Laptop, oder das Display ("Das Unwort des Abends ;-) ) wird nicht gefunden.

Ich bin mir mir (fast) sicher, das ich das mal in der Vergangenheit mal hinbekommen habe. Könnt Ihr mir meine Gedächtnislücke schliessen?

Vielen Dank im Voraus.

Euer

Silmarillion / Sascha
 
OP
A

Anonymous

Gast
Silmarillion schrieb:
Nun - wenn ich mich auf dem Desktoprechner mit
Code:
ssh user@desktoprechner
einlogge,.ist der Wert von $DISPLAY nicht gesetzt. Ist für mich logisch.
Mit
Code:
 ssh -X username@desktoprechner

erhalte ich
Code:
echo $DISPLAY
localhost:10.0
Was ich auch in etwa noch verstehe, da hier nun das X11Forwarding vom Server zum Einsatz kommt. Aber warum localhost:10.0 ?

Ist doch ganz einfach. ;) du hast wahrscheinlich vergessen deine selbst angelegte DISPLAY Variable zu exportieren.

An der Kiste mit laufenden X-Server aus einem am besten neu geöffneten xterm Fenster als der User der angemeldet ist, folgendes abgeben
Code:
xhost +
danach sich von einem anderem Rechner ganz normal mit ssh an diesen Rechner anmelden
dort ist jetzt keine DISPLAY Variabel definiert. also wird die normale jetzt gesetzt ":0.0" und das ist eine Umgebungsvariable die von aufgerufenen Programmen benutzt werden soll, also darf ich nicht vergessen dieses zu exportieren. ;)
Code:
export DISPLAY=":0.0"
und schon sollte es funktionieren
Code:
xeyes
sollte jetzt ein paar wachende Augen auf den Bildschirm zaubern.


was soll jetzt bei X11-Forwarding die DISPLAY Variable "localhost:10.0" bedeuten ?
Die Variable setzt sich zusammen aus HOST:DISPLAY-NUMMER.SCHIRMNUMMER

sshd , also der Daemon der die ssh-Anfrage entgegengenommen hat, hat hier einen virtuellen X-Server gestartet, der jetzt genommen werden kann um auf dem anderem Rechner die Bilder anzuzeigen. viertueller X-Server ist hier eigentlich viel zuviel gesagt, er hat eigentlich nur eine Portweiterleitung installiert die jetzt am Host an dem wir uns mit ssh angemeldet haben am Port "tcp localhost:6010" Listet und dadurch als verfügbarer X-Server an diesem Port ausgibt.
Das andere Ende der Weiterleitung hat ssh beim absetzten auch schon vorbereitet, bzw, ssh hat in seiner Umgebungsvariable DISPLAY beim Aufruf ja den aktuellen X-Server enthalten. Die Verbindung dieser beiden Enden ist dann die ssh-Verbindung. Also das ganze ein Tunnel.

:10.0 ist der erste Schirm vom 10.Display, zu finden "localhost:10.0" , also localhost, (hier ist eigentlich aber nur der Beginn eines Portforwarding und weiterleitung auf einen anderen Rechner und dort zu einem wirklichen X-Servers)

der nächste User der sich mit "ssh -X " anmeldet bekommt jetzt das 11. Display als Portweiterleitung "tcp localhost:6011"
sshd fängt vorsichtshalber erst mit 10 an, da es nicht wissen kann, wie viele wirkliche X-server schon über Unix-Sockets auf dem Rechner laufen, nutzt aber keine Sockets sonderen TCP Ports, und diese sind ab 6000 für X-Server reserviert.
in der /etc/services wird man die Ports als
Code:
#x11             6000-6063/tcp   X Window System
#x11             6000-6063/udp   X Window System
auch eindeutig finden.

Das Ganze hört sich ein bisschen kompliziert an, das liegt aber daran, das auf dem ersten flüchtigen Blick bei X nach dem normalem Verständnis scheinbar Server und Client vertauscht zu sein scheint, wenn man sich aber ein bisschen damit auseinandersetzt erkennt man das doch richtig rum ist.


robi
 
OP
A

Anonymous

Gast
Hi robi,

vielen Dank für deine schnelle, verständliche und ausführliche Antwort. Nach deiner Anleitung funktioniert es so, wie ich es mir vorgestellt habe.
Mein Vorgehen war eigentlich richtig. nur dies war die eigentliche Ursache des Scheiterns:

Code:
xhost +laptop

Ein einfaches
Code:
xhost +
hätte gereicht. :roll:

EDIT: Es muss natürlich die IP-Adresse eingetragen werden ;-)
Code:
xhost +192.168.178.20
EDIT{END]

Jetzt kann ich wieder weiter probieren. Nochmals Vielen Dank und eine gute Nacht :)

Silmarilion / Sascha
 
Oben