chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

WSL上のUbuntuから Cygwin上の X11にWindowを出す(未検証)

今後出てくるWSLではGUIも使えるそうだけど、今の時点ではGUIアプリは動かない。
代替え手段として、Cygwin上でX11を走らせて、WSL上のUbuntuからCygwin上のX11めがけてWindowを出すことでGUIアプリを走らせることができる。

Cygwin上で X11を起動。--listen tcpとすることで、ポート接続でのWindow出力が可能になる(X11は6000番ポート)

$ startx -- -listen tcp

昔は、xhostsによりXサーバへの接続IP許可を行っていたが、xhostsコマンドは脆弱性があるとのことで今はxauthが使われる。Cygwin上のX11内でxauthを起動して鍵を取得する。鍵はX11を起動するたびに更新されるらしい。

$ xauth
Using authority file /home/sumi/.Xauthority
xauth> list
192.168.10.NNN:0  MIT-MAGIC-COOKIE-1  440935118XXXXXXXXXXX3ae29a7
DESKTOP-TRNV8F8:0  MIT-MAGIC-COOKIE-1  c5ec2XXXXXXXXXXXXXf78e81990

つらつらと鍵が出てくるので、MIT-MATIC以降をメモしておく
つぎに、ubuntu側に移り、xauthを起動。先ほどのメモした鍵をaddコマンドで追加する。以下はxauthで鍵を追加する例

$xauth
> add   192.168.10.NNN:0.0  MIT-MAGIC-COOKIE-1  440935118XXXXXXXXXXX3ae29a7
> add   192.168.10.NNN:0.0  MIT-MAGIC-COOKIE-1  c5ec2XXXXXXXXXXXXXf78e81990
>exit

上記IPはCygwinX11がListenしているIP(すなわちCygwinが走っているPC)を指定する。複数addしているのはどちらが有効な鍵かわからなかったため。exitで抜けると.Xauthorityに書き込まれる。

正しく書き込めているか、listオプション指定でxauthを実行して再確認

$ xauth list
192.168.10.NNNN:0  MIT-MAGIC-COOKIE-1  440XXXXXXXXXXXXXX5e73ae29a7
192.168.10.NNN:0  MIT-MAGIC-COOKIE-1  c5ec2XXXXXXXXXXXXXf78e81990

次に、Ubuntu側でGUIアプリを起動する。この時、引数でdisplay指定する。display指定するIPはX11がLIstenしているIP(すなわち、、Cygwinが動いているPCのIP)

xterm -display 192.168.10.NNN:0.0

上記操作により、UbuntuのxtermのGUICygwin X11上に描画される。あとは、xterm内で好きなGUIアプリを起動すればCygwin上のX11に表示される。

以下は、Cygwin上のX11Ubuntu上のscratchを出しているところ(一回成功しただけ。もう少し確認)