Xt error: Can ' T open display, wenn mit dem default-DISPLAY
Übersicht
Ich bin versucht zu bekommen XQuartz arbeiten auf OSX, so dass ich tun kann, X11-forwarding über das Andockfenster. Ich bin folgenden die Anleitung hier. Ich glaube, meine Frage kann beantwortet werden, indem nur der erste Teil, aber nur für den Fall (um zu vermeiden das XY-problem), habe ich den zweiten Teil als gut.
Installation
Habe ich das installiert via homebrew, über brew cask install xquartz
. Dann habe ich open -a XQuartz
zu starten.
Lokalen xterms
Testen Sie es aus, wenn ich versuche, öffnen Sie ein xterm
funktioniert es nicht:
MacBook-Pro:opencv-gui csaftoiu$ xterm
xterm: Xt error: Can't open display: /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
Die pseudo-Datei vorhanden ist, obwohl:
MacBook-Pro:opencv-gui csaftoiu$ echo $DISPLAY
/private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
MacBook-Pro:opencv-gui csaftoiu$ ls -alh $DISPLAY
srw-rw-rw- 1 csaftoiu wheel 0B May 6 21:12 /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0
Ich kann öffnen Sie ein xterm über XQuartz. Dann:
bash-3.2$ echo $DISPLAY
:0
Dieser Wert funktioniert aus einem normalen OSX zu:
$ DISPLAY=:0 xterm
# opens xterm, waits for it to finish
$
Folgende nicht funktionieren, nicht sicher, warum, basierend auf hier die Antwort:
xterm: Xt error: Can't open display: localhost:0
MacBook-Pro:opencv-gui csaftoiu$ DISPLAY=127.0.0.1:0 xterm
xterm: Xt error: Can't open display: 127.0.0.1:0
MacBook-Pro:opencv-gui csaftoiu$ DISPLAY=`ipconfig getifaddr en0`:0 xterm
xterm: Xt error: Can't open display: 192.168.1.15:0
Beachten Sie, dass xinit
funktioniert, für einige reason:
$ xinit
xinit: XFree86_VT property unexpectedly has 0 items instead of 1
# opens xterm, waits for it to finish
xinit: connection to X server lost
waiting for X server to shut down
Frage 1: Was ist XQuartz tatsächlich hören Sie auf?
Docker-Weiterleitung mit schockiert
In jedem Fall bewegen Sie sich auf, diese socat
Befehl funktioniert nicht:
MacBook-Pro:opencv-gui csaftoiu$ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
Laufen, von einem anderen Fenster Mach ich:
MacBook-Pro:opencv-gui csaftoiu$ docker run --rm -it -e DISPLAY=`ipconfig getifaddr en0`:0 ubuntu:14.04 bash
root@912eec31b8cb:/# apt-get update && apt-get install xterm
... such install, wow ...
root@912eec31b8cb:/# xterm
Warning: This program is an suid-root program or is being run by the root user.
The full text of the error or warning message cannot be safely formatted
in this environment. You may get a more descriptive message by running the
program as a non-root user or by removing the suid bit on the executable.
xterm: Xt error: Can't open display: %s
root@912eec31b8cb:/# echo $DISPLAY
192.168.1.15:0
Aus der socat
Fenster bekomme ich:
2016/06/14 21:08:15 socat[24289] E connect(5, LEN=68 AF=1 "/private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0", 68): Connection refused
Ich kann nicht mit der DISPLAY-variable, die funktioniert, entweder:
MacBook-Pro:opencv-gui csaftoiu$ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\":0\"
2016/06/14 21:09:43 socat[24309] E connect(5, LEN=4 AF=1 ":0", 4): No such file or directory
Nun, dies ist nicht ein UNIX-CLIENT IP-Adresse. Aber, ich weiß nicht was DISPLAY=:0
verbunden ist. Es ist sicherlich nicht von port 6000, da dieser port es benutzt zu werden, hören auf. Wenn ich es ändern zu 6005
zur Weiterleitung an 6000
, und stellen Sie die Docker-container ANGEZEIGT werden $(ipconfig getifaddr en0):5
statt, dann ist die Verbindung natürlich abgelehnt:
$ socat TCP-LISTEN:6005,reuseaddr,fork TCP:localhost:6000
2016/06/14 21:20:32 socat[25379] E connect(8, LEN=16 AF=2 127.0.0.1:6000, 16): Connection refused
Frage 2: Wie Vorgehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte nicht neu gestartet, nachdem die neu-Installation von XQuartz. Ich neu gestartet, und jetzt funktioniert es. :).
Dockerized UI-Apps in das Andockfenster für Desktop-MacOS 2018+
Ging durch all die Schmerzen zu Holen Sie sich die einfachste version möglich, das hängt nicht von der überprüfung, port, ip, etc... Hier ist es.
XQuartz 2.7.11 (xorg-server 1.18.4)
docker version 18.06.1-ce
Stellen Sie sicher, installieren Sie XQuartz
1. Schließen Sie alle 6000
Auf ein neues terminal, überprüfen Sie, ob es etwas gibt, läuft auf port 6000
Wenn es alles gibt, nur den Prozess zu beenden
2. Schließen Sie alle 6000
Öffnen Sie einen socket auf diesem port und halten Sie die terminal öffnen
3. Überprüfen Sie 6000 ist offen
In einem neuen terminal, überprüfen Sie, wenn es geöffnet wird
4. Erstellen und Ausführen von einfachen UI-App
Magie geschieht mithilfe der Variablen aus dem Andockfenster. Nur mit der
-e DISPLAY=docker.for.mac.host.internal:0
hat den trick, wie es auf die interne IP-Adresse und vorsehen, dass der docker-image. Den Anschluss nach vorne tun seine Magie.Bemerkte ich, dass an dieser Stelle XQuartz ist eröffnet, es selbst zu den gleichen port
5. Gewinn-und laufen mehr apps
Ich brauchte, um zu beenden Sie Terminal und dann neu starten, um es zu bekommen, um zu arbeiten.
Für OS X 10.6.3 und höher, pro XQuartz 2.7.11 Anweisungen:
Nach der Installation XQuartz 2.7.11 auf meinem macOS High Sierra, Abmelden von meinem Mac und einloggen war wieder genug für diese Arbeit über mein MacOS Terminal. Allerdings können Sie vermeiden, dass Sie auf Abmelden und melden Sie sich öffnen Sie die XQuartz Terminal-Anwendung (XQuartz > Anwendungen > Terminal), und läuft dein X-Anwendung von dort aus. Zum Beispiel:
dann