WSL+VcXsrv でX11 forwading
通常、リモートのX11アプリのウィンドウをssh経由でローカルに出すには、-Xオプションを使えばよい(圧縮の-Cとかは環境と人によるので省略、sshd_configの設定やらなんやらは他にいろいろ記事があるのでそちらも省略)。
ssh -X remote-addr
が、WSLでVcXsrvを使っているとこの方法では次のようなエラーが出てうまくいかない。
connect /tmp/.X11-unix/X0: No such file or directory
xterm Xt error: Can't open display: remote-addr:10.0
理由は、-X
オプションがリモートのlocalhost:(port#)
をローカルのunix:0
に転送しようとするから。VcXsrvはWSL環境外なので、unixドメインのソケットを作っていないため、リモート側でデフォルトに設定されるディスプレイ10(ポート6010)をローカル側の/tmp/.X11-unix/X0
に接続しようとしてエラーになる。
で、とりあえずあまり美しくはないけれど、以下のようにするとできる。
ssh -R 6000:localhost:6000 remote-addr
export DISPLAY=:0
これは単純に転送先をローカルのtcp/6000にしただけで、冷静に考えれば思いつくのだけれど、ちょっとハマったのでメモ的に残しておこうかと。
使用するディスプレイ/ポートを変更する場合は以下のようにすればよい。
ssh -R 6005:localhost:6000 remote-addr
export DISPLAY=:5
要するに普通のポートフォワードとXのディスプレイ設定ですね ;-)
VcXsrv
側で使用するポートが変わる場合は、localhost
の後のポートをそちらに合わせればよい、と。