2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

WSL 2 で X に接続する際に環境変数 DISPLAY に指定すべきアドレス (2020/06 時点)

WSL 1 では問題なく X の GUI に繋がっていたが、WSL 2 にしてから繋がらなくなってしまった。Windows 10 May 2020 Update の一般リリース後に仕様が変わってしまったのか、各所で紹介されている方法や こちらこちら の記事の方法を試してもダメだったが、別の IP を試したら解決したので一例として書き残しておく。ただし今後の WSL 2 の仕様変更によっては勝手に直ったりするかもしれない。

結論: ホスト側 IP を指定する

localhost/etc/resolv.confnameserver の IP ではダメなことがあり、その場合、WSL 側ではなく Windows 側のネットワークアダプターの IPv4 を指定すると繋がることがある。 ※ May 2020 Update 一般リリース後に /etc/resolv.conf の仕様が変わってしまったものと思われる。なお WSL 1 ではホストと IP が共有されていたようだ。

具体的には、DISPLAY 環境変数を次のように export すればよい(コピペで OK)。

export DISPLAY=$(ipconfig.exe | grep "IPv4" | head -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")'):0

どの環境でも上手くいくかどうかは分からないが、手元の環境ではこれで X に繋がるようになったので一度試してみて頂いてもよいだろう。

各自の環境での ipconfig.exe の出力内容に合わせて適宜スクリプトは修正すること

どの IP にすればよいのか?

image.png

これらの記事: WSL2のGUI設定でつまずいたところWSL2のX-ServerでGUI表示する際に「export DISPLAY=:0.0」が効かない では /etc/resolv.confnameserver の IP で直っていたようだが、現時点 (2020/06) の私の手元の環境ではダメだった。現在の /etc/resolv.confnameserver は WSL 側の vEthernet アダプターを指しており、そちらではなくホスト側 Windows のネットワークアダプターの IP にしたところ、手元の環境ではそれで直った。

WSL 上で Windows 側の実行形式はそのまま動くので、ipconfig.exe で IP を取得しそれを DISPLAY 環境変数に export する。Windows の改行コードが悪さをするので削ってから渡している。環境によって ipconfig.exe が表示するアダプターの順番などは異なる可能性があるので、冒頭に示したスクリプトでダメだった場合は各自の環境での出力内容に合わせて適宜修正すること

ちなみに Pengwin では元々ホスト側アダプターの IP が参照されており何もしなくても X に繋がっている。他の Microsoft ストアアプリ (Ubuntu 20.04 LTS など) でインストールすると現状ダメなのだが、そのうち対応して勝手に直ってくれるのかもしれない。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
2
Help us understand the problem. What are the problem?