Warum funktioniert die x11-Anzeige nicht über die SSH-Anmeldung?

22

Ich habe mich bei einem Remote-Server angemeldet und versuche, eine x-Anwendung (z. B. Firefox) anzuzeigen. Es wird jedoch eine Fehlermeldung angezeigt. Das Folgende sind meine Versuche, Firefox zu öffnen

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

Ich habe -X, -Y verwendet, weil ich irgendwo gelesen habe, dass diese beiden Optionen mit den Anmeldeinformationen für X11 zusammenhängen und diese Schalter die Arbeit für mich erledigen. Auch ohne die Schalter -X, -Y schlug mein Versuch fehl.

Was bedeutet der Fehler "Keine Anzeige angegeben"?

PS Das Seltsame ist, dass, wenn ich über PUTTY eine Verbindung zum Remote-Server herstelle und den Befehl 'firefox' wiederhole, dies funktioniert?!?! (Firefox wird auf dem lokalen Computer angezeigt)

PS Mein lokaler Computer ist Windows 7, daher wird Xming im Hintergrund ausgeführt, damit X11 angezeigt werden kann. Was den im oberen Teil beschriebenen Versuch betrifft, wurden die Befehle am Cygwin-Terminal eingegeben.

kwagjj
quelle
Haben Sie versucht, etwas von Ihrem Cygwin-Terminal aus lokal anzuzeigen? Sie könnten beispielsweise ein lokales X-Dienstprogramm wie xclock suchen und ausführen, um zu sehen, was passiert. Wenn Sie nicht lokal anzeigen können, funktioniert die Fernanzeige nicht. Möglicherweise benötigen Sie auch den X-Server für Cygwin.
Unxnut
1
@unxnut, wie Sie bereits betont haben, wurde meine DISPLAYVariable nicht festgelegt. also habe ich es mit export DISPLAY=:0.0' and executed xclock` eingerichtet und die xclock erschien. Aber als ich mich dann über ssh beim Remote-Server anmeldete und es xclockerneut versuchte , stand dortError: Can't open display:
kwagjj

Antworten:

16

Stellen Sie sicher, dass Sie die DISPLAY-Variable in Ihrer Cygwin-Umgebung gesetzt haben:

export DISPLAY=:0.0

Überprüfen Sie nach dem Verbinden mit SSH, ob diese Shell auch die richtige DISPLAY-Variable kennt:

echo $DISPLAY
jensd
quelle
4
Ich habe die DISPLAY-Variable im cygwin-Terminal des lokalen Computers eingerichtet und anschließend auf den Remote-Server gesendet und getippt echo $DISPLAY. Aber immer noch ist die DISPLAY-Variable auf dem Remote-Server auf nichts gesetzt.
kwagjj
2
Error: Can't open display: :0.0
Ahmed
2
Tun Sie dies:export DISPLAY=localhost:0
Trogne
18

Ich bin gerade auf dieses Problem beim Verbinden mit einem kopflosen RHEL7-Server gestoßen.

Sie müssen das Paket xorg-x11-xauth auf Ihrem Host installiert haben, damit die Variable DISPLAY festgelegt und ordnungsgemäß autorisiert wird.

Hoffe, ich habe jemandem etwas Zeit gespart.

Mike S
quelle
3
genau das, wonach ich gesucht habe. Sehr geschätzt!
Josh-Cain
1
Gute Antwort! Die anderen Lösungen (DISPLAY manuell per Export einstellen) führen zu einer unverschlüsselten Übertragung zwischen Client und Server! Auf Debian Squeeze musste das Paket "xauth" installiert werden, damit alles funktioniert. Nach einem erneuten Login über ssh -Xeinen echo $DISPLAYzurückgegebenen URL + Port und einem Aufruf xterm &öffnete sich ein Terminal in einem lokalen Fenster.
Jpsy
7

Vielen Dank an @jensd, @unxnut für die Hilfe. Aufgrund Ihrer Kommentare konnte ich das Problem herausfinden.

Die Lösung benötigte zwei Schritte:

  1. Die Variable DISPLAY sollte richtig eingestellt sein.
  2. Wenn Sie eine Verbindung zum Remote-Server herstellen, muss der Schalter -X aktiviert sein

Bei meinen vorherigen Versuchen fehlen eine oder beide dieser beiden Bedingungen.

Für spätere Benutzer, die dies sehen, sind hier Beispiele, um Ihnen zu zeigen, was ich zu sagen versuche.

Fall 1

Auf meinem lokalen Computer ist keine DISPLAY-Variable festgelegt. Und dann werde ich mit -X-Schalter auf Remote-Server ssh und dann versuchen, auszuführen xclock.

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

Wie Sie sehen, Error: Can't open display:wird am Remote-Server-Terminal ein Fehler angezeigt.

case2

Dieses Mal werde ich auf dem lokalen Computer die Variable DISPLAY angeben. Aber wenn ich ssh'ing bin, werde ich den -X-Schalter nicht einschalten. Das Ergebnis wird ein Fehler sein:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

Zu Beginn sehen Sie, dass ich die Variable DISPLAY richtig eingestellt habe. Aber auch so wird nach ssh'ing (ohne den Schalter -X) die xclock nicht ausgeführt.

* Ein anderes Ergebnis mit setenv | grep DISPLAYist hier zu sehen (vergleiche mit case1). in case2 ist das Ergebnis einfach leer. Auf der anderen Seite ist das Ergebnis von case1 für diese Befehlszeile DISPLAY: undefined variable.... Ich bin nicht sicher, wie dieser Unterschied verursacht wird, aber ich bekomme eine Vermutung, dass es damit zusammenhängt, ob Sie entweder Bedingung 1 oder 2 erfüllt haben .

case3

Dieses Mal werde ich die DISPLAY-Variable auf dem lokalen Computer und auch ssh an den Remote-Server mit eingeschaltetem -X-Schalter korrekt angeben.

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

xclockfunktioniert mit dieser einstellung !! Hier ist ein Screenshot, der zeigt, dass ich nicht lüge. Bildbeschreibung hier eingeben Die Uhr wird erfolgreich auf meinem lokalen Computer angezeigt.

Überprüfen Sie setenv | grep DISPLAYin diesem Fall erneut das Ergebnis von . Es zeigt jetzt DISPLAY=localhost:11.0. Soweit ich weiß, hängt dies mit MIT-MAGIC-COOKIE in der .Xauthority-Datei zusammen, aber da ich nicht viel darüber weiß, gehe ich nicht weiter.

Schlussfolgerung: In den drei oben genannten Fällen können wir bestätigen, dass für die ordnungsgemäße Anzeige von Remote-X-Windows sowohl die Variable 1. DISPLAY des lokalen Computers als auch der -XSchalter 2. ssh ordnungsgemäß festgelegt sein müssen. Natürlich sollte der Remote-Server X11forwarding zulassen.

kwagjj
quelle