Wie behebe ich einen Fehler, dass die Anzeige nicht geöffnet werden kann, wenn ein X-Programm nach dem Senden mit aktivierter X11-Weiterleitung geöffnet wird?

111

Nachdem ich die X11-App (XQuartz 2.3.6, xorg-server 1.4.2-apple56) auf meinem Mac (OS X 10.6.8) gestartet, ein Terminal in X11 geöffnet und ausgeführt habe xhost +, gehe ich ssh -Yzu meiner Ubuntu 10.04-VM (läuft auf VMware) Verschmelzung). Wenn ich laufe gedit .bashrc(zum Beispiel), bekomme ich:

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY gibt nichts zurück.

Aber wenn ich ssh -Yin meinem Ubuntu 11.04 Rechner gedit .bashrcarbeite. echo $DISPLAYgibt "localhost: 10.0" zurück.

Ich habe versucht, export DISPLAY=localhost:10.0während sshed in meine VM und dann ausgeführt gedit .bashrc, aber ich bekomme:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

Was könnte an der Konfiguration der beiden unterschiedlichen Ubuntu-Maschinen anders sein, was erklären würde, warum eine funktioniert und die andere nicht?

Update: Wie von Zoredache im Kommentar unten vorgeschlagen, habe ich ausgeführt sudo apt-get install xbase-clients, aber ich habe weiterhin das gleiche Problem.

Daryl Spitzer
quelle
2
Hat die Ubuntu 10.04-Box die richtigen Tools für X11 installiert? Installieren Sie xbase-clients, falls noch nicht geschehen.
Zoredache
Ich habe es installiert, aber immer noch das gleiche Problem. (Siehe oben.)
Daryl Spitzer
3
Versuchen Sie vielleicht, die Option -vv an ssh zu übergeben, wenn Sie eine Verbindung herstellen. Dadurch werden ausführliche Debug-Meldungen ausgegeben. Während der Verbindung sollten mehrere Kommentare zur X11-Weiterleitung angezeigt werden.
Zoredache
1
@jcrawfordor Du hast das X11Forwardingauf dem Ubuntu überprüft , und dass du es xbase-clientsinstalliert hast und dass du Xapps auf dem Mac auf dem Terminal starten kannst, von dem aus du eine SSH-Verbindung herstellst. (Überprüfen Sie, ob $DISPLAYauf dem Endgerät ausgeführt wird Sie ssh aus .
Manwes
1
In meinem Fall ging es nur darum, die XQuartz-Version von MacOS
Waruna Ranasinghe 29.12.16

Antworten:

47

Überprüfen Sie (normalerweise /etc/ssh/sshd_config) die sshd_config des Servers und stellen Sie sicher, dass die X11Forwarding-Option für die Zeile aktiviert ist

X11Forwarding yes

Wenn X11Forwarding nicht angegeben ist, ist der Standardwert Nein auf den Debian-Maschinen, die ich überprüfen kann.

DerfK
quelle
4
Nachdem ich eine andere Ubuntu-VM eingerichtet hatte, stellte ich fest, dass ich sowohl xbase-clients installieren als auch X11Forwarding aktivieren muss. Aktualisieren Sie Ihre Antwort, um beides einzuschließen, und ich werde sie akzeptieren.
Daryl Spitzer
1
Interessant. Zumindest bei der Neuinstallation von 10.04, die ich heute Morgen durchgeführt habe, war X11Forwarding standardmäßig aktiviert. Die Ubuntu-Jungs müssen wieder mit den Standardeinstellungen herumspielen.
Zoredache
28
@DerfK, in meinem System "X11Forwarding yes" gab es schon immer noch eine Fehlermeldung wie: (gedit: 8381): Gtk-WARNING **: Anzeige kann nicht geöffnet werden: in solchen Fällen
AJ
1
Unter Debian müssen Sie möglicherweise das Paket xauth installieren und sich dann erneut anmelden.
Comte
$ ssh Benutzername @ Hostname -Y das hat bei mir
funktioniert
60

Von xhost +: So beheben Sie den Fehler „Anzeige kann nicht geöffnet werden“ beim Starten der GUI auf dem Remote-Server :

Antwort : Sie können den Fehler "Anzeige kann nicht geöffnet werden" beheben, indem Sie die in diesem Artikel beschriebene xhost-Prozedur ausführen.

Ermöglichen Sie Clients, sich mit xhost + von einem beliebigen Host aus zu verbinden

Führen Sie den folgenden Befehl aus, um die Zugriffssteuerung zu deaktivieren, mit der Sie Clients erlauben können, von jedem Host aus eine Verbindung herzustellen.

$ xhost +

Zugriffskontrolle deaktiviert, Clients können von jedem Host aus eine Verbindung herstellen

Aktivieren Sie die X11-Weiterleitung

Verwenden Sie dabei die Option -X, um die X11-Weiterleitung zu aktivieren.

$ ssh username@hostname -X

Aktivieren Sie die vertrauenswürdige X11-Weiterleitung mit der Option -Y.

$ ssh username@hostname -Y

Öffnen Sie GUI-Anwendungen auf diesem Host

Nachdem Sie die SSH-Verbindung zum Remote-Host wie oben beschrieben hergestellt haben, können Sie eine beliebige GUI-Anwendung öffnen, die diese ohne Probleme öffnet.

Wenn die Fehlermeldung "Anzeige kann nicht geöffnet werden" weiterhin angezeigt wird, setzen Sie die Variable DISPLAY wie unten gezeigt.

$ export DISPLAY='IP:0.0'

Hinweis: IP ist die IP-Adresse der lokalen Arbeitsstation, auf der die GUI-Anwendung angezeigt werden soll.

Harrymc
quelle
11
+1 für Beachten Sie, dass IP = die IP der lokalen Workstation ist, auf der Sie die GUI
PCoder
3
Vergewissern Sie sich bei ähnlichen Problemen unter OS X, dass XQuartz installiert ist. Andernfalls hilft keines dieser Fixes. (Die Frage von OP zeigt, dass er XQuartz hat, also ist dies eher eine Randnotiz für diejenigen, die ähnliche Probleme haben wie ich)
Dolan Antenucci
3
Beachten Sie, dass das Laufen xhost +sehr unsicher ist und nicht verwendet werden sollte! Wie Stefan Rogin bereits erwähnt hat, kann der Angreifer dann vom Host aus eine Verbindung zu Ihrer XSession herstellen, alle Eingaben lesen oder sogar den angezeigten Bildschirm ändern.
Jirislav
der letzte export Display=IP:0.0hat es für mich
getan
18

Ich hatte dieses Problem, als ich mich von Mac OS X aus bei einer Ubuntu-VM anmeldete - aus irgendeinem Grund scheint es nicht so, als würde 'localhost' in der Anzeigevariablen lauten. So stellen Sie die IP manuell ein, wie Harrymc vorschlägt:

export DISPLAY="127.0.0.1:10.0"

Dann sollten X11-Programme in Ordnung sein. Es scheint nicht notwendig zu sein, dem Betriebssystem mitzuteilen, dass localhost und 127.0.0.1 gleichwertig sind, aber es funktioniert zumindest.

Spinup
quelle
Das hat bei mir funktioniert. Irgendeine Idee, warum localhost nicht funktioniert hat?
Alex
2
BINGO! Ich bin seit einiger Zeit von diesem Problem betroffen ... Ich habe über SSH eine Verbindung hergestellt und konnte keine Gtk-Programme starten (einfaches X11, wie "xeyes", funktionierte jedoch). ANZEIGE war korrekt. Eigentlich war die Auflösung von "localhost" nicht! Wenn ich DISPLAY = 127.0.0.1: 10.0 oder DISPLAY = :: 1: 10.0 manuell einstelle, funktioniert es. Das Bearbeiten von / etc / hosts scheint keine Auswirkungen zu haben. und DNS ist korrekt konfiguriert ("dig localhost" meldet sowohl 127.0.0.1 als auch :: 1 korrekt). Es scheint also ein Fehler in der DNS-Auflösung für X11-Verbindungen in Gtk zu sein (gtk? gdk? glib? other?).
Pablo Saratxaga
1
Bei einer Debian-Installation für Beagle Bone Black wurde / etc / host von niemand anderem als root als lesbar festgelegt. Dies führte zu den hier angegebenen Symptomen. / Etc / hosts für alle lesbar gemacht, und es hat gut funktioniert.
Daniel
13

Ich hatte dieses Problem mit meinem CentOS KVM-Server, mir fehlte das Programm "xauth".

Joril
quelle
1
Dies half mir bei meiner minimalen Debian-Installation, vielen Dank!
BinOr
9

Wenn Sie dieses Problem nach einiger Zeit beim Ausführen mit -Xarg haben. oder einfach ForwardX11in / etc / ssh / ssh_config ausführen $ ssh username@hostname -Y, um die vertrauenswürdige X11-Weiterleitung zu aktivieren , die genaue Ursache nicht kennen, aber ich vermute, dass -Xeinige Funktionen nach einiger Zeit ablaufen, wahrscheinlich um die Sicherheit zu erhöhen.

Folgendes habe ich online gefunden:

Wenn Sie die Remotemachine ssh -X verwenden, wird der Remotecomputer als nicht vertrauenswürdiger Client behandelt. Ihr lokaler Client sendet also einen Befehl an den Remote-Computer und empfängt die grafische Ausgabe. Wenn Ihr Befehl gegen einige Sicherheitseinstellungen verstößt, erhalten Sie stattdessen eine Fehlermeldung.

Wenn Sie jedoch die Remotemachine ssh -Y verwenden, wird der Remotecomputer als vertrauenswürdiger Client behandelt. Diese letzte Option kann zu Sicherheitsproblemen führen. Da andere grafische Clients (X11) Daten von der Remote-Maschine abhören können (Screenshots erstellen, Keylogging und andere unangenehme Dinge ausführen) und es sogar möglich ist, diese Daten zu ändern.

Wenn Sie mehr über diese Dinge erfahren möchten, empfehlen wir Ihnen, die Xsecurity-Manpage oder die X Security-Erweiterungsspezifikation zu lesen. Außerdem können Sie die Optionen ForwardX11 und ForwardX11Trusted in Ihrer / etc / ssh / ssh_config überprüfen.

Quellen:

Stefan Rogin
quelle
6

Gerade auf meinem Mac getestet, könnten andere Systeme in Ordnung sein :

  1. Ermöglichen Sie Clients, sich mit xhost + von einem beliebigen Host aus zu verbinden

    $ xhost +

  2. Sie sollten eine Umgebung haben, die die X11-Anzeige unterstützt

    [Mac System] Installieren Sie X11 für Mac https://www.xquartz.org/

  3. Sie sollten Ihren SSH-Server x11-Anzeige weiterleiten lassen

    aktualisieren /etc/ssh/sshd_configund einstellen X11Forwarding yes, dann den ssh server neu starten

  4. Sie sollten Ihre ssh-Sitzung mit dem -XParameter x11-Anzeige weiterleiten lassen

    $ ssh -X user @ ip

  5. Wie öffne ich die X11-App in PyCharm?
    • Öffnen Sie eine SSH-Sitzung, die die X11-Anzeige unterstützt (denken Sie daran, diese Sitzung beizubehalten).
    • Führen Sie echo $DISPLAYin dieser SSH-Sitzung
    • Set - DISPLAYUmgebungsvariable für Ihren PyCharm
Farbe
quelle
1
Warum ist dies anders oder warum sollte es einer der anderen Antworten vorgezogen werden? Bitte erläutern Sie, wenn Sie mit einer einfachen Bearbeitung können . Du kannst es schaffen!!
Pimp Juice IT
@ McDonald's Danke, aktualisiert mit mehr Details.
Farbe
4

Beim Ausführen von UXTERM oder XTERM nur ausstellen

export $DISPLAY 

Die Variable wird da sein. Dann einfach einstellen und exportieren.

Oracle2066
quelle
4

Ich musste /etc/ssh/sshd_configFolgendes eingeben:

X11UseLocalhost no

Setzen Sie es lieber auf "Ja". Seltsam, wenn die Standardeinstellung "NEIN" ist. Benutzer, die Putty mit XMing unter Windows verwenden. Ich benutze gerade ssh über Fedora. Gelegentlich gab es uns etwas

error can't open display localhost

Ein Neustart des Servers würde normalerweise das Problem beheben, aber das ist blöd. Habe das oben angeführte getan, den Dienst sshdauf dem Server neu gestartet und dafür gesorgt, dass neue Verbindungen wieder einwandfrei funktionieren.

Luigi
quelle
2

Ich hatte auch dieses Problem mit Solaris 10 und stellte fest, dass der Listener nicht eingerichtet war.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true
Doug Somers
quelle
1

Unter CentOS 6.5 verlor ich plötzlich den Zugriff auf entfernte X-Programme, nachdem ich mit / etc / hosts rumgespielt hatte. Gleiches Symptom für leere Variable $ DISPLAY (keine Hilfe beim manuellen Einstellen / Exportieren).

Der 127.0.0.1-Eintrag, der auf den tatsächlichen Hostnamen verweist, ist erforderlich. in der Tat scheint die Reihenfolge auch relevant zu sein (zuletzt & es wird nicht funktionieren ...)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

Nachdem dies behoben wurde, funktionieren xeyes, xclock und andere X-Testspielzeuge wieder, daher ist mein benötigter virt-manager auch wieder online.

David Ramirez
quelle
1

Ich habe gerade ein Problem in meinem Setup gefunden, das das Weiterleiten von x verhindert hat: Meine Firewall hat alle Verbindungen von localhost blockiert und somit verhindert, dass der Tunnel erreicht wird

Pelle
quelle
1

Wenn Sie Konsole verwenden, wechseln Sie einfach zu einem anderen Terminalemulator wie Xfce Terminal und versuchen Sie es erneut mit root.

Oliver Dechant
quelle
1

Öffne das Terminal $ ssh username @ hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY = "127.0.0.1:10.0" sollte alles funktionieren.

Kenny Gichuhi
quelle
Vielen Dank. Funktioniert für meinen speziellen Fall, wenn DISPLAY='localhost:10.0'nicht funktioniert.
9.
1

Dieses Setup funktioniert für mich:

Lokal (64-Bit-Cygwin unter Windows 10) DISPLAY=:0

Server (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Diese Einstellungen wurden gefunden, indem Sie in der Taskleiste auf "X-Anwendungsmenü auf: 0" klicken und Systemprogramme> Terminal auswählen

qwr
quelle
0

Nach einiger Frustration stellte ich fest, dass der Eintrag für den Hostnamen des Servers in seiner / etc / host-Datei falsch war.

iceburn_pt
quelle