search
LoginSignup
2

More than 3 years have passed since last update.

posted at

WSL+VcXsrv+sshでX11のフォワード

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の後のポートをそちらに合わせればよい、と。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2