WSL2が Windows 10 バージョン 1903/1909 にバックポートされ(なぜか2004が降ってこない)Sufrace proでようやく使えるようになったので、WSL2への移行メモ。
今使っているWSL1のubuntuをWSL2に変換する
WSL2をデフォルトにするのは> wsl.exe --set-default-version 2
だが、今使っているものは明示的に変換しないとWSL1のまま。
> wsl --list -v
NAME STATE VERSION
* Ubuntu Running 1
> wsl.exe --set-version ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
ディストリビューションは既に、要求されているバージョンです。
> wsl --list -v
NAME STATE VERSION
* Ubuntu Running 2
WSL2のネットワーク構成
WSL1ではホストのWindows 10側とネットワークインタフェースは共有されていたが、WSL2ではvEthernet(WSL)なるHyper-V Virtual Ethernet AdapterがWin 10側に作られ、Win 10と WSL2 がHyper-V仮想スイッチで接続されるようになった。WSL2上のsshdに接続するような使い方で注意が必要そう。
win10
> ipconfig
イーサネット アダプター vEthernet (WSL):
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::18b8:bb13:4def:276a%22
IPv4 アドレス . . . . . . . . . . . .: 172.17.80.225
サブネット マスク . . . . . . . . . .: 255.255.255.240
wsl2
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.80.234 netmask 255.255.255.240 broadcast 172.17.80.239
...
Windows 10側の IP アドレスを知る
Hyper-V 仮想スイッチで接続された Windows 10側のIPアドレスは動的に生成される/etc/resolv.confを見るとよい。
$ cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.17.80.225
Windows X server (例えば VcXsrv)を動かす場合の DISPLAY 変数の設定に使える。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
WSL環境かどうかのチェック方法
これまでWSL1環境でif [[ `uname -a` =~ Microsoft ]]; then
で判定していた方法は使えなくなったのでWSL2ではif [[ `uname -r` =~ microsoft ]]; then
で判定するよう変更。
$ uname -a
Linux NX-01 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ uname -r
4.19.104-microsoft-standard