10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-06-28

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 など) でインストールすると現状ダメなのだが、そのうち対応して勝手に直ってくれるのかもしれない。

10
3
0

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
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?