WSL2 で export DISPLAY=:0 で GUI が動かない: Windows10 2004(20H1)

Windows10 2004(20H1) Windows Subsystem for Linux 2nd (WSL2) でGUI を使うまでハマった話の続きです。

Windows10 pro 2004(201H) にバージョンアップし、WSL2(Windows Subsystem for Linux 2nd) のバージョン変換も無事終わりました。ホントに Windows10 はナニするにも時間がかかる。ITエンジニアの常として「待つのも仕事」です。

Windows10 1903 から 2004、ISOでアップデート

Windows10 2004(20H1) で WSL1から WSL2 へのアップデート

さぁて、GUI の YaST でも使おうかと思い、MobaXterm を立ち上げて、"X server" を ON にしました。(初期設定でONです)

Windows から Mac へ MobaXterm で VNC デスクトップ共有接続

WSL2 で export DISPLAY=:0 で GUI が動かない: Windows10 2004(20H1)_a0056607_11013601.png

従来の WSL(1) の様に export DISPLAY=:0 を実行したんですが....

w10pro:/home/myme # export DISPLAY=:0
w10pro:/home/myme # export | grep DISPLAY
declare -x DISPLAY=":0"
w10pro:/home/myme # yast2 &
[1] 623
w10pro:/home/myme # QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
qt.qpa.screen: QXcbConnection: Could not connect to display :0
Could not connect to any X display.

怒られてしまいました。

調べてみたら /etc/resolv.conf に書かれている IP アドレスがホストアドレスなので、それを指定して使え、という Google 大魔神のご指示がいくつか見つかったのですが、

前バージョンから大幅に性能向上した新Linux環境「WSL 2」の実力を探る

 "また、WSL 2内では、「/etc/resolv.conf」に記載されているDNSサーバが常にWin32側の仮想ネットワーク側IPアドレスを示すようになっている(このファイルはWSL 2の起動時に自動的に生成される)。この仕組みを利用すれば、Linux側でも一定の手順でWin32側のIPアドレスを得ることが可能だ"

という事で

# export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

とやってもやっぱりだめ。

という事で ipconfig でDHCPから割り当てられた IP を確認して、export DISPLAY=xx.xx.xx.xx:0 を実行したら


w10pro:/home/myme # export DISPLAY=192.168.1.44:0
w10pro:/home/myme # export | grep DISPLAY
declare -x DISPLAY="192.168.1.44:0"
w10pro:/home/myme # yast2 &
[1] 648
w10pro:/home/myme #

お、MobaXterm に何か出てきた。初見だ。これも WSL2 になってからハマった所です。

WSL2 で export DISPLAY=:0 で GUI が動かない: Windows10 2004(20H1)_a0056607_11020605.png

「はい」を押す。

※この Application on remote computer xx.xx.xx.xx has requested....... In order to disable this worning....

のダイアログはひどく邪魔なので mobaXterm の Settings > X11 tab > X11 remote access よりトグルボタンで "full" に変更します。
セキュリティ上、キーストロークなどが盗聴される可能性があるよ、という事です。


WSL2 で export DISPLAY=:0 で GUI が動かない: Windows10 2004(20H1)_a0056607_11025279.png

無事 YaST2 が起動できました。

これで openSUSE Leap なら LibreOffice でも Gimp でも使えるでしょう。SLES の場合は Workstation Extension というパッケージが必要です。勿論、自己責任でこれらの Linux GUI アプリケーションをインストールするのは構わないと思います。 

WSL2 で export DISPLAY=:0 で GUI が動かない: Windows10 2004(20H1)_a0056607_11031587.png

動いた。



一応、先行者のご意見通り、 /etc/resolv.conf にある IP アドレスを使っても動くことがあったので、

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

の行を .bashrc に書いておきました。

どうもウチの環境では Windows の再起動だとか、WSL2 を終了させたり立ち上げる都度に環境がおかしくなるみたいです。 resolv.conf の IP アドレスでうまく動かない場合は、ホストの Windows の IP を使うとうまく動くことがあるかも、そんな程度に考えてください。

ちなみに WSL2 では Hyper-V の仮想スイッチを経由して接続されるようです。

WSL2 のネットワークについてはこちらに詳しい解説がありました。

Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能

物理的なマシンの中に「プライベートネットワーク」を作ります。従って Host の Windows マシンからは仮想スイッチを通して WSL に対して通信はできますが、別なコンピューターからは、通信できません。ま、当たり前ですけど。

C:\>ipconfig

Windows IP 構成


イーサネット アダプター イーサネット 3:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

イーサネット アダプター vEthernet (external-rj45):

   接続固有の DNS サフィックス . . . . .: i.islandcenter.jp
   リンクローカル IPv6 アドレス. . . . .: fe80::3d32:8b05:e320:8531%18
   IPv4 アドレス . . . . . . . . . . . .: 192.168.1.44
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.1.1

: 中略

イーサネット アダプター vEthernet (Default Switch):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::8eb:6c67:4766:b3bc%17
   IPv4 アドレス . . . . . . . . . . . .: 172.26.176.1
   サブネット マスク . . . . . . . . . .: 255.255.240.0
   デフォルト ゲートウェイ . . . . . . .:

イーサネット アダプター vEthernet (WSL):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::55a6:d731:cfe8:aee%61
   IPv4 アドレス . . . . . . . . . . . .: 172.18.208.1
   サブネット マスク . . . . . . . . . .: 255.255.240.0
   デフォルト ゲートウェイ . . . . . . .:

C:\>
C:\>ping 172.18.208.1

172.18.208.1 に ping を送信しています 32 バイトのデータ:
172.18.208.1 からの応答: バイト数 =32 時間 <1ms TTL=128
172.18.208.1 からの応答: バイト数 =32 時間 <1ms TTL=128
172.18.208.1 からの応答: バイト数 =32 時間 <1ms TTL=128
172.18.208.1 からの応答: バイト数 =32 時間 <1ms TTL=128

172.18.208.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

C:\>


ネットワークのプロパティを見てみると、 vEthernet(WSL) という仮想アダプタが出てきました。

WSL2 で export DISPLAY=:0 で GUI が動かない: Windows10 2004(20H1)_a0056607_11040511.png

なるほど、奥が深い。






by islandcenter | 2020-06-21 11:40 | Windows | Comments(0)