WSL2のDNSサーバーアドレスとX11の$DISPLAYを別にする
環境
既存の方法における問題
WSL2ではネットワーク構成が従来のWSL1と異なるため、X Window SystemでGUIをホストOSのWindows上に表示させるといったケースでは、DISPLAY環境変数を(:0.0
などから)変更する必要がありました。
その指定方法として、多くのサイトでは次のような設定が提示されていました。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
上記の指定方法ではWSL2のネームサーバーとして、仮想ネットワーク上のホストOS(Windows)のローカルIPアドレスを指定しています。
しかしながら、この方法では/etc/resolv.conf
を参照しているため、DNSとして(GoogleやCloudflareなどといった)外部のDNSサーバーを指定することができません。
WSL2を使っているとDNSとX11が参照するIPアドレスを分けたくなる場合があります。 そのための設定手順をまとめます。
注意
OSやディストリビューションの違いによってはうまく動作しないかもしれません。 動作しないようなら元に戻しておくことをお勧めします。
手順
/etc/wsl.conf
を編集し、generateResolvConfをfalseにする- Powershell/cmd上で
wsl --shutdown
を実行する - WSL2を再起動し
sudo unlink /etc/resolv.conf
でシンボリックリンクを解除する /etc/resolv.conf
を作成(中身は"nameserver 1.1.1.1"など)し、2.と同様にWSL2を再起動する~/.bashrcなどで指定されているDISPLAY環境変数を次のように変更する*1
bash export DISPLAY=$(arp -a | sed -E "s/.*\((.+)\).*/\1/"):0.0
bash export DISPLAY=$(ip route show 0.0.0.0/0 | awk '{print $3}'):0.0
- WSL2にログインしなおし、DNSサーバーとDISPLAY環境変数の設定が問題ないことを確認する