概要
Docker経由でX11転送を実行できるように、XQuartzをOSXで動作させようとしています。ここの指示に従っています。私の質問は最初の部分だけで答えられると思いますが、念のため (XY 問題を回避するために) 2 番目の部分も提供しました。
インストール
を介して、自作でインストールしましたbrew cask install xquartz
。それから私はそれopen -a XQuartz
を始めます。
ローカル xterm
テストして、を開こうとすると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 は実際に何を聞いていますか?
socat を使用した Docker 転送
いずれにせよ、次に進むと、この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
socat
私が得るウィンドウから:
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
機能する DISPLAY 変数も使用できません。
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