WSL(Windows上でLinuxを動かす)今時の方法まとめ
今? 2024/10 時点の記事です。
WSLは、Windows Subsystem Linuxの略で、文字通りWindows上のサブシステムとしてUbuntuやDebianといったLinuxを動かせるというものです。
「Windowsマシン上でLinuxを動かす」となると、わりと面倒くさそうで、いろいろやらないといけないんだろうな~という気がしますが、この辺の機能は日進月歩。今となってはずっと簡単に入れることができます。
ただ変化が激しいためか、自分でいざやってみる際に、過去の資料などを調べてみるといろんな時期の情報や断片的な情報が混在していて、少し迷走することになりました。
本記事は、今の時点で、私の環境においては、ゼロの状態からこうやれば行けたよ、という備忘録です。
- Windows 11 & PowerShell 5.1で検証しています
使うものは、Windows PowerShellです。
Windowsの機能の有効化
WSLの機能は当初Windowsの設定で無効になっているため、これを有効化します。
これ自体はコンパネのWindowsの機能の有効化または無効化
でも可能なのですが、
PowerShellからdism.exe
コマンドでもできるので、そちらでやった方が楽だと思います。
0) Windows PowerShellを管理者権限で実行し、コンソールを開く
どうやって?っていう人居ます?
Windows検索窓でPowerShellを検索するか、スタートメニューから、Windows PowerShellアイコンを探し出して右クリックから「管理者として実行」1) 機能が有効になっているかどうかを確認する
必要な機能とは、次の2つです。
- Microsoft-Windows-Subsystem-Linux (WSL)
- VirtualMachinePlatform (仮想マシンプラットフォーム)
dism.exe /online /get-features | select-string "Linux","Virtual" -Context 0,1
> 機能名 : VirtualMachinePlatform
状態 : 無効
> 機能名 : Microsoft-Windows-Subsystem-Linux
状態 : 無効
dism.exe
で起動中のOS (/online
) の機能一覧を取得(/get-features
) ⇒
結果をselect-string
で"Linux
","Virtual
"を含む行を検索し、該当行の0行目~1行目 を表示
(PowerShellを使いこなすならselect-string
は覚えておくと便利かも)
両方とも有効になっているなら、次のステップと再起動は不要です。
2) 機能を有効にする
無効になっていれば、/enable-feature
オプションで有効化します。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
オプションの意味は、/all
が必要な親機能もセットで有効化する、/norestart
は再起動させないフラグ、の模様。
3) PCを再起動する
再起動自体は必要なので再起動します。
wslのコマンドの確認と導入
0) PowerShellを管理者権限で実行し、コンソールを開く
1) wslコマンドを確認する
wsl -l
結果の例(これは後述の導入などが済んでいる場合です):
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-24.04 (既定)
Ubuntu-22.04
2) もし、wslコマンドが無いよ!と言われた場合は
wslをインストールする。
wsl --install --no-distribution
これはwslのディストリビューションのインストールコマンドなのですが、
--no-distribution
を指定すると、wslの基本的な仕組みだけ入れることができます。
環境によっては--no-distribution
を解釈してくれないケースもあるようで、
その場合は仕方なしで飛ばす。(本当は要らないのかなこれ?)
3) WSLのデフォルトバージョンを2に設定する
もしかしたら元から2で設定されている可能性もありますが、
これを設定することで、今後、バージョン2で確定で使われるようになります。
wsl --set-default-version 2
ちなみに大雑把に言うと、1はLinuxもどきで、2はLinuxそのものが動いているらしい。
2が使える環境であるなら、1を使う必要はあまりないと思います。
WSLのディストリビューションのインストール
wslコマンドが使えるようになったら、ディストリビューションをインストールします。
WSLのディストリビューションは
一般的にディストリビューションと言った場合、LinuxのOS本体+基本的なソフトウェアを纏めたパッケージのカタマリ(それこそUbuntuやDebian)のイメージのことですが、WSLにおいてのディストリビューションは、インストールするだけでなく、起動や終了といった操作の対象になるもの(起動時にディストリビューション名を指定します)です。 つまり、仮想マシンのインスタンス名のようにも扱われているようです。1) インストール可能なディストリビューションを確認する
wsl -l --online
-l --onlene
を指定すると、インストールできる一覧が確認できます。
結果の一例
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.6 openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed openSUSE Tumbleweed
2) ディストリビューションのインストールをする
好きなディストリビューションを選び‥‥ここでは Ubuntu-22.04 を選んでいます。
--install -d <ディストリビューション名>
でインストール。
wsl --install -d Ubuntu-22.04
インストール中: Ubuntu 22.04 LTS
Ubuntu 22.04 LTS はインストールされました。
Ubuntu 22.04 LTS を起動しています......
プロンプト画面が別に起動し、しばらく待つとユーザーの名とパスワードを聞かれるので、最初のユーザとパスワードを登録してインストール完了。
プロンプト画面
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: tabito
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This message is shown once a day. To disable it please create the
/home/tabito/.hushlogin file.
tabito@MyComputer:~$
このプロンプト画面がそのままlinuxのシェルなのでこっちはUnixのコマンドで実行可能です。
[0x800701bc]エラー!
Win10あたりだと、ユーザ名を聞かれずに
WslRegisterDistribution failed with error: 0x800701bc
というエラーがでてしまうことがあります。(これが出ると導入には失敗しています)
これは、WSL2 Linux カーネルが古いためですので、
learn.microsoft.comに貼られているリンクからパッケージをダウンロード・導入してから、もう一度インストールコマンドを実行すればうまく行くと思います。
4) WSLの状態を確認する
-l
の後に-v
をつけると状態とWSLのバージョンが確認できます。
wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Stopped 2
VETSION 2であることを確認できればOK。
WSLの操作
動作させるぶんにはコレで終わっているわけですが、
WSLの操作についてメモしておきます。
起動してコンソールを開く
Windowsのスタートメニューにディストリビューションの名前で登録されているので、
それでシェルを開けられます。
この時、ディストリビューションが起動していなければ自動起動してくれます。
ちなみにPowerShell上でも-d <ディストリビューション名>
で起動・シェル接続できます。
wsl -d Ubuntu-22.04
この時は、PowerShell上のコンソールがそのままシェルになりますが、
カレントディレクトリが良く分からない所にいるので注意が必要です。これを避けるには
wsl ~ -d Ubuntu-22.04
-d
の前に~
をつけると、アイコンから起動したのと同様、/home/ユーザ名/
から始められます。
止める
シェルを閉じてもディストリビューションは起動しっぱなしになるようです。
PCを落とすと止まりますが、自分で止めるなら--terminate <ディストリビューション名>
で止まります。
wsl --terminate Ubuntu-22.04
規定の変更
複数のディストリビューションを入れているところで、規定を変更したい場合は、
--set-default <新しい規定のディストリビューション名>
です。
wsl --set-default Ubuntu-22.04
ちなみに漠然とwsl
コマンドだけ実行すると、wsl -d <規定のディストリビューション名>
と同じ動作、つまり、規定のディストリビューションの起動と接続になります。
wsl ~
で規定かつhome配下で始められるので、これが一番楽でしょう。
アンインストール
--unregister
で削除です。データ類は全て消えるのでご注意を。
wsl --unregister Ubuntu-22.04
WindowsとLinuxのデータのやりとり
WindowsからLinuxのフォルダを
エクスプローラにLinuxの項目が追加されていて、そこからアクセスできます。
具体的なフォルダ名は \\wsl.localhost\Ubuntu-22.04
みたいな感じになるようです。
LinuxからWindowsのフォルダを
シェルからは、/mnt/<ドライブ名>/~~~
で、ドライブを参照できます。
「いまどき」なんて書いてますが、
実のところ、私は「いつからこの形で、できるようになったか」というのは知らないで書いておりまして、ここ数年は、この形であった可能性があります。
WSL1は2016年、WSL2は2019年、なので、WSL2として考えてもゆうに5年前からはあるテクノロジなんですけど、さすがにそのころは、コマンド一発ではなかったと思います。ディストリビューションをMicrosoft Storeから探してくる手順とかも見つかるもので‥‥なのでここ1年くらいではないかなとか考えています。
知っている人にとってはもう今更何やねんみたいな感じの記事なのかもしれません。
そう思ってもご容赦くださいませ。
独学のため正確でない可能性があります。
(っ・x・)っ きゅ