概要
要するに、DISPLAY変数の設定に気を付けましょうというお話です。
$ echo ${DISPLAY}
:0
になっていればOKです。
以下Xserverの設定をwin10時代に頑張っていた人向け。そうでない人も是非。
Windows11でついに誰でもWSL2でGUIアプリを使えるようになりました
ここで告知があったように、WSLg(Windows Subsystem for Linux GUI)を導入した場合にはLinuxのGUIアプリが使えるようになりました。
Windows 10 バージョン22000.0以降(つまりWindows 11以降、Windows 10 バージョン21H1では利用不可)を導入している場合に利用可能です。Windows11を使わせようとしていますね。
ただし、最近使えるようになった wsl --install
で入れるWSL2ではだめで Microsoft StoreからインストールしたWSLgでないと2021/11現在ではだめなようです。
これまで普通のUbuntuなら誰もが愛用しているであろうGeditですら簡単には動かなかったですが、(内蔵GPUでもいいのでGPUの設定を少しだけすると)sudo apt install gedit -y
しただけでgedit ./hoge.txt
が起動できるようになりました。
Windows10時代のGUIのためのWSL2の設定
私はこれまで、Windows10でWSL2を用いてGUIアプリケーションを動かすために、以下のフローを踏む必要がありました。
- X Serverが必要なのでVcXsrvをWindows側にインストール
- WSL2のファイアウォールの設定を緩くする
- 「Windows Defender ファイアウォールのプロパティ->パブリック プロファイル->保護されているネットワーク接続: カスタマイズ」を外す
- (bashrcなどを用いて)Linux側でDISPLAY変数の設定を毎回シェル上でする
最後の「(bashrcなどを用いて)Linux側でDISPLAY変数の設定を毎回シェル上でする」については、WSL2では毎回Linux側のホストIPが変わるために、以下の方法がwslのGitHubリポジトリで提案され、日本語記事でも広く取り上げられています。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
出所: https://github.com/microsoft/WSL/issues/4106#issuecomment-501885675
Windows11+WSLgの時代にどうすべきか
このbashrcを流用したまま意気揚々と
sudo apt install gedit -y
gedit ~/.bashrc
をしたところ、うんともすんともいいませんでした。
ただ、同じことに苦しんでいる人がいて解決方法が提示されていました。
要するに、
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
これをしなければよかったのです。一件落着。
デフォルトで
$ echo ${DISPLAY}
:0
このようになるので、おそらくDISPLAY
を書き換えてしまっていたのがよくなかったのでしょう。