2011-07-13 18:13:00 +0000 2011-07-13 18:13:00 +0000
117
117

Wie behebe ich einen Fehler "Anzeige kann nicht geöffnet werden" beim Öffnen eines X-Programms nach ssh'ing mit aktivierter X11-Weiterleitung?

Nachdem ich die X11-Anwendung (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 xhost + ausgeführt habe, habe ich dann ssh -Y auf meine Ubuntu 10.04 VM (die auf VMware Fusion läuft) angewendet. Wenn ich z.B. gedit .bashrc ausführe, erhalte ich:

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

set | grep DISPLAY gibt nichts zurück.

Aber wenn ich ssh -Y auf meiner Ubuntu 11.04-Maschine ausführe, funktioniert gedit .bashrc. echo $DISPLAY gibt “localhost:10.0” zurück.

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

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

Was könnte in der Konfiguration der beiden unterschiedlichen Ubuntu-Rechner anders sein, das erklären würde, warum der eine funktioniert und der andere nicht?

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

Antworten (14)

62
62
62
2012-02-21 08:47:03 +0000

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 erwähnte xhost-Prozedur befolgen.

Clients die Verbindung von jedem Host mit xhost+ erlauben

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

$ xhost +

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

X11-Weiterleitung

Während ssh ausgeführt wird, verwenden Sie die Option -X, um die X11-Weiterleitung zu aktivieren.

$ ssh username@hostname -X

Vertrauenswürdige X11-Weiterleitung aktivieren, indem Sie die Option -Y verwenden,

$ ssh username@hostname -Y

GUI-Anwendungen auf diesem Host öffnen

Nachdem Sie die ssh-Verbindung zum entfernten Host wie oben erklärt geöffnet haben, können Sie jede GUI-Anwendung öffnen, die diese ohne Probleme öffnet.

Wenn Sie immer noch den Fehler “Anzeige kann nicht geöffnet werden” erhalten, setzen Sie die Variable DISPLAY wie unten gezeigt.

$ export DISPLAY='IP:0.0'

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

49
49
49
2011-07-13 18:54:50 +0000

ÃœberprÃ?fen Sie die sshd_config des Servers (normalerweise /etc/ssh/sshd_config) und stellen Sie sicher, dass die Option X11Forwarding mit der Zeile

X11Forwarding yes

Wenn X11Forwarding nicht angegeben ist, ist die Vorgabe auf den Debian-Rechnern, die ich zum ÃœberprÃ?fen zur VerfÃ?gung habe, nein.

18
18
18
2012-06-29 20:44:03 +0000

Ich hatte dieses Problem auch bei der Anmeldung an einer Ubuntu-VM von Mac OS X aus – es scheint aus irgendeinem Grund “localhost” in der Anzeigevariablen nicht zu mögen. Setzen Sie also die IP manuell, 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.

14
14
14
2012-10-22 07:59:02 +0000

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

9
9
9
2014-10-17 08:06:53 +0000

Wenn Sie dieses Problem nach einiger Zeit haben, wenn Sie mit -X arg. oder einfach ForwardX11 in /etc/ssh/ssh_config ausführen, dann führen Sie $ ssh username@hostname -Y aus, um vertrauenswürdige X11-Weiterleitung zu aktivieren, ich kenne die genaue Ursache nicht, aber ich vermute, dass bei -X einige Funktionen nach einiger Zeit ablaufen, wahrscheinlich um die Sicherheit zu erhöhen.

Hier ist, was ich online gefunden habe :

Wenn Sie ssh -X remotemachine verwenden, wird der entfernte Rechner als nicht vertrauenswürdiger Client behandelt. Ihr lokaler Client sendet also einen Befehl an den entfernten Rechner und empfängt die grafische Ausgabe. Wenn Ihr Befehl einige Sicherheitseinstellungen verletzt, erhalten Sie stattdessen eine Fehlermeldung.

Wenn Sie jedoch ssh -Y remotemachine verwenden, wird der entfernte Rechner als vertrauenswürdiger Client behandelt. Diese letzte Option kann zu Sicherheitsproblemen führen. Weil andere grafische (X11-)Clients Daten von der entfernten Maschine schnüffeln könnten (Screenshots, Keylogging und andere unangenehme Dinge) und es sogar möglich ist, diese Daten zu ändern.

Wenn Sie mehr über diese Dinge wissen wollen, empfehle ich Ihnen, die Xsecurity-Manpage oder die Spezifikation der X-Sicherheitserweiterung zu lesen. Außerdem können Sie die Optionen ForwardX11 und ForwardX11Trusted in Ihrer /etc/ssh/ssh_config überprüfen:

sources:

6
6
6
2017-08-30 11:36:06 +0000

Nur auf meinem Mac getestet, andere Systeme könnten OK sein :

  1. Erlauben Sie Clients die Verbindung von jedem Host mit xhost+

$ xhost +

  1. Sie sollten über eine Umgebung verfügen, die die X11-Anzeige unterstützt

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

  1. Lassen Sie Ihren ssh-Server x11 weiterleiten, zeigen Sie

an

update /etc/ssh/sshd_config und setzen Sie X11Forwarding yes, dann starten Sie Ihren ssh-Server

neu 4. lassen Sie Ihre ssh-Sitzung x11 weiterleiten, zeigen Sie x11 an mit -X Parameter

$ ssh -X user@ip

  1. Wie öffnet man eine X11-Anwendung in PyCharm?
  • öffnen Sie eine ssh-Sitzung, die X11-Anzeige unterstützt (vergessen Sie nicht, diese Sitzung zu behalten)
  • führen Sie echo $DISPLAY in dieser ssh-Sitzung aus
  • setzen Sie die Umgebungsvariable DISPLAY für Ihren PyCharm
4
4
4
2017-09-01 01:17:28 +0000

Ich musste /etc/ssh/sshd_config wie folgt eingeben:

X11UseLocalhost no

Stattdessen musste ich sshd auf “ja” setzen. Seltsam, wenn die Standardeinstellung “NEIN” ist Benutzer, die Kitt mit XMing unter Windows verwenden. Ich verwende straight ssh über Fedora. Gelegentlich würde es anfangen, uns

error can't open display localhost

zu geben. Ein Neustart des Servers würde das normalerweise beheben, aber das ist dumm. Haben Sie das oben genannte getan, den Dienst &007 auf dem Server neu gestartet und neue Verbindungen hergestellt, die wieder einwandfrei funktionieren.

4
4
4
2012-07-10 21:26:59 +0000

Wenn Sie UXTERM oder XTERM ausführen, geben Sie einfach

export $DISPLAY

Die Variable ist dann vorhanden. Dann setzen Sie sie einfach und exportieren Sie sie.

3
3
3
2019-07-08 17:25:35 +0000

Dieses Setup funktioniert bei mir:

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-Anwendungen Menü auf :0” klicken und Systemwerkzeuge > Terminal

2
2
2
2015-03-18 22:52:32 +0000

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

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop options/tcp_listen = true
1
1
1
2017-05-01 04:13:35 +0000

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

1
1
1
2014-07-15 15:13:51 +0000

Unter CentOS 6.5 verlor ich plötzlich den Zugang zu entfernten X-Programmen, nachdem ich mich mit /etc/hosts herumgetrieben hatte. Dasselbe Symptom einer leeren $DISPLAY-Variable (keine Hilfe beim manuellen Setzen/Exportieren)

Der 127.0.0.1-Eintrag, der auf den tatsächlichen Hostnamen zeigt, ist notwendig; tatsächlich scheint die Reihenfolge ebenfalls relevant zu sein (zuletzt setzen & 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 auch mein benötigter virt-manager wieder in Betrieb.

1
1
1
2016-06-10 11:56:04 +0000

Ich habe gerade einen netten Schluckauf in meinem Setup gefunden, der das Weiterleiten von x verhindert hat: Meine Firewall blockierte alle Verbindungen von localhost und verhinderte so, dass der Tunnel erreicht werden konnte

1
1
1
2018-05-30 13:40:40 +0000

open terminal $ ssh username@hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY=“127.0.0.1:10.0” alles sollte funktionieren.