基本
新しい環境では以下で使用可能になる。
管理者権限でコマンドプロンプトを起動して実行する。
wsl --install
内部的にWindowsの機能の有効化などがされるのか、再起動を求められることがあるのでその時は再起動する。
状態の確認
wsl --status
「既定のバージョン: 2」となっていたらWSL2
C:\WINDOWS\system32>wsl --status
既定の配布: Ubuntu
既定のバージョン: 2
Linux 用 Windows サブシステムの最終更新日: 2022/01/10
Windows Subsystem for Linux カーネルは、'wsl --update' を使用して手動で更新できますが、システム設定が原因で自動更新が発 生することはありません。
カーネルの自動更新を受け取るには、 Windows Update の設定を有効にしてください:' Windowsの更新に、その他のMicrosoftの製品 の更新情報を受け取る'。
詳細については、 https://aka.ms/wsl2kernel.
を参照してください
カーネル バージョン: 5.10.60.1
既定のバージョンを2にする
既定のバージョンが1だったら、以下のコマンドで2にする
wsl --set-default-version 2
うまくいかないとき
「Windowsの機能の有効化」で以下を有効にする
- Linux用Windowsサブシステム
- 仮想マシンプラットフォーム
コマンドなら管理者権限のPowerShellで以下を実行
Enable-WindowsOptionalFeature -online -featurename VirtualMachinePlatform Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
管理者権限のコマンドプロンプトでも可能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
BIOSで仮想化支援技術 (VT-xなど) を有効化する
タスクマネージャーで仮想化が有効か無効か確認できる。
無効になっていたら、BIOS設定画面を開いて「Virtualization Technology (VT-x)」を「Enabled」にする。
BIOS設定画面は、「設定」アプリを起動して、「更新とセキュリティ」→「回復」→「今すぐ再起動する」ボタンを押す→「オプションの選択」という青い画面が開いたら「トラブルシューティング」→「詳細オプション」→「UEFIファームウェアの設定」を押す。
「Advanced」「Security」「Chipset」「Processor」「Virtualization」などのメニューを開いていくと、「Intel Virtualization Technology (VT-x)」や「Intel VT-d」などが見つかるはず。
Dell OPTIPLEX 3050 では Virtualization と VT for Direct I/O どちらも有効にした。
最近のPCは最初から有効になっているかもしれない。面倒なのは古いPCの場合だと思う。
カーネルコンポーネントをバージョンアップ
WSL2を利用しようとすると以下のようにエラーになる場合
C:\WINDOWS\system32>wsl --set-version Ubuntu-18.04 2
変換中です。この処理には数分かかることがあります…
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
カーネルをバージョンアップする。
wsl --update
C:\WINDOWS\system32>wsl --update
更新をチェック中…
更新をダウンロード中…
更新をインストール中…
この変更は、次回の WSL 再起動時に有効になります。強制的に再起動するには、'wsl --shutdown' を実行してください。
カーネル バージョン: 5.10.60.1
ブート構成データの設定に問題がある場合
まだうまくいかないとき、
以下のコマンドでブート構成データの状態を確認
bcdedit
hypervisorlaunchtype が Off となっていたら、以下のコマンドで設定を変更する。
bcdedit /set hypervisorlaunchtype auto
めんどくさかったら
WSL1でも、bashを利用したり、簡単なWeb開発環境を作ったり、ある程度は問題なく使えるので、すんなり行かないPCではWSL2をあきらめてもよいのではと思う。
どうしてもdockerなどを動かす必要があれば頑張りましょう。
WSL環境ができたらLinuxをインストールへ進む
インストールできる有効なディストリビューション
wsl --list -o
C:\WINDOWS\system32>wsl --list -o
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d ' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
ディストリビューションの追加
wsl --install -d Debian
wsl --install -d Ubuntu-20.04
インストールしたディストリビューションの確認
wsl --list -v
C:\WINDOWS\system32>wsl --list -v NAME STATE VERSION * Ubuntu Running 2
既存のWSL1のディストリビューションのバージョンをWSL2にする
wsl --set-version ディストリビューション名 2
C:\WINDOWS\system32>wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります…
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
さくっと数分で終わる環境もあれば、何時間もかかる環境もあるらしい。
インストールしてすぐのWSL1は数分もかからずWSL2に変換された。
ある環境では下図の状態が1時間ほど続いた。CPUが古いためか、長期間利用していたWSL1のためか、容量の大きいデータベースなどが入っていたためか、どれかわからないが心当たりはある。
WindowsからLinuxの中のファイルにアクセスする
ネットワーク経由な感じになる。
エクスプローラーで以下のパスを開く。
\\wsl$
LinuxからWindowsのファイルにアクセスする
/mnt にマウントしている感じになる。
Cドライブなら、以下のパスでアクセスできる。
/mnt/c
ls すると、 Windows や Program Files などが見える。
簡単なWeb開発するとき
Linux側にWindows側のファイルを参照してもらうようにするなら、Cドライブに www フォルダを作って、WebサーバーのDocumentRoot を /mnt/c/www のようにすることで、C:\www にソースを置ける。
Windows側がLinux側のファイルを見に行く形なら、\\wsl$\var\www\html などにファイルを置くとよい。ただしパーミッションの問題があるので要調整。
WSL1とWSL2の違い
バージョンアップというよりは根本的に仕組みがらしい。
パフォーマンスはかなりアップするらしい。
ただ使用感は特に変わらない。
dockerを使って開発をしたい場合など、どうしてもWSL2じゃないといけないとき以外はどちらでもよいかもしれない。
トラブルシューティング
WSL2にしたら 127.0.0.1 でアクセスできなくなった
WSL1の時と勝手が違うところで乗り換えた人は戸惑うかも。
WSL用にネットワークができている。
以下のいずれかでアクセスできるはず。
- IPv6 ::1 (httpなら http://[::1]/ )
- localhost(Webなら http://localhost/ )
- Linux側でifconfig して確認したIPアドレス(例: 172.28.123.123)
WSL2で 127.0.0.1, 127.0.0.2, 127.0.0.3 … のような複数のホスト名でアクセスしたい
IPv4のローカルループバックアドレスは 127.0.0.1~127.255.255.254 まで大量にあるが、IPv6は [::1] しかない。
IPアドレスはあきらめる。
localhost でアクセスできるのと、localhostのサブドメイン *.localhost でもアクセスできるのでこれで対処する。
例) test.localhost, dev.localhost, dev1.localhost, dev2.localhost ……