今後出てくる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はCygwinのX11が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のGUIがCygwin X11上に描画される。あとは、xterm内で好きなGUIアプリを起動すればCygwin上のX11に表示される。