Xt错误:如果使用默认的DISPLAY,则无法打开显示

概观

我试图让XQuartz在OSX上工作,所以我可以通过Docker做X11转发。 我按照这里的说明 。 我相信我的问题可能只是第一部分的回答,但为了以防万一(为了避免XY问题),我也提供了第二部分。

安装

我已经安装它通过自制软件,通过brew cask install xquartz 。 然后我open -a XQuartz来启动它。

本地xterm

testing一下,如果我尝试打开一个xterm ,它不起作用:

 MacBook-Pro:opencv-gui csaftoiu$ xterm xterm: Xt error: Can't open display: /private/tmp/com.apple.launchd.3wncZULdXC/org.macosforge.xquartz:0 

伪文件存在,但:

 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 

可以通过XQuartz打开一个xterm。 然后:

 bash-3.2$ echo $DISPLAY :0 

该值也适用于常规的OSX:

 $ DISPLAY=:0 xterm # opens xterm, waits for it to finish $ 

下面不工作,但不知道为什么根据这里的答案 :

 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 

请注意,由于某种原因, xinit确实有效:

 $ 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 

问题1:XQuartz实际上在听什么?


Docker转发与socat

无论如何,这个socat命令不起作用:

 MacBook-Pro:opencv-gui csaftoiu$ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" 

从另一个窗口运行,我做:

 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 

从社会窗口我得到:

 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 

我无法使用可用的DISPLAYvariables:

 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 

现在,这不是一个UNIX-CLIENT IP。 但是,我不知道是什么 DISPLAY=:0连接到。 这当然不是6000端口,因为那是它曾经在监听的端口。 如果我将其更改为6005 ,转发到6000 ,并使Docker容器DISPLAY为$(ipconfig getifaddr en0):5 ,则连接当然会被拒绝:

 $ 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 

问题2:如何从这里开始?

重新安装XQuartz后,我没有重新启动。 我重新启动,现在它工作。 :)。

我需要退出terminal,然后重新启动它,以使其工作。