Windows Subsystem for Linux
Windows Subsystem for Linux(ウィンドウズ サブシステム フォー リナックス、WSL)は、米国Microsoft社が開発・提供している、仮想マシンの上でLinux系仮想化OSを動かす仕組み。Windows 10 バージョン 2004(ビルド 19041)以降および Windows 11 で無料※で利用できる。
2016年より提供されていた初代「WSL1」では「LXSS」「LXCore」というWSL専用の疑似カーネルの上で動作していたのに対し、2019年5月に発表された「WSL2」ではVMwareとVirtualBoxの技術を使ったVMの上で通常の Linux Kernel が動作するようになり、様々なディストリビューションがほぼ遜色ない動作をするようになった。 ⇒WSL 1 と WSL 2 の比較
WSL1も引き続き利用できる(今のところ廃止予定はない)が、本稿ではWSL2を扱う。
要件
デスクトップ向け Windows 10 バージョン 2004(ビルド 19041)以降および Windows 11 で利用できる。Proはもちろん、Homeでも利用できる。
ハードウェア要件は比較的緩いが、内部でHyper-V同様の仕組みが使われているため※、CeleronなどエントリークラスのCPUでは動作しないことがある(確認方法)。
比較的低スペックのパソコンでも動作するが、快適に使うにはRAMは8GB以上(できれば16GB以上)用意し、ストレージのシステム領域にはSSDを使う方が良いだろう。システム領域(一般にはドライブC:)には Windows に加えて Linux OS を追加インストールすることになるので、十分な空き容量を確保しておく必要がある※。
Windows Server にインストールすることもできるが、あくまでWindowsが優先で、ホスト(Windows)側のリソース不足などでゲスト(Linux)が強制終了されることもあるので、サーバ用途にはLinuxを単体インストールする方が良い。
また、WSL2ではVirtualBoxの技術が使われているため、他のVirtualBoxが動作していると競合して併用できないことがある。この場合はWSL1を使うと回避できる。
インストール
- WSL用GPUドライバをWindowsにインストールしておく(Intel / AMD Radeon / NVIDIA GeForce)※
- Windowsの設定を開き、【アプリ > オプション機能 > Windowsのその他の機能 > 仮想マシン プラットフォーム】をONにして(右図)再起動する
- スタートメニューを開き、「PowerShell」で検索
- 「Windows PowerShell」を管理者として実行する
- wsl --install を実行
- 画面の指示に従って進める(途中で再起動あり)
- スタートメニュー(の「おすすめ」)に「WSL」(ペンギンのアイコン)が追加されればOK。右クリックし、スタートにピン留めしておこう。
規定では WSL2 を使って Ubuntu が動作する構成でインストールされる。 他のディストリビューションを指定してインストールすることもできる。
ディストリビューションは Microsoft Storeでインストールすることもできる。 複数のディストリビューションをインストールすることもできる(当然そのぶんのディスク容量が必要)。
ディストリビューションの追加
規定ではUbuntuがインストールされるが、他のディストリビューションを使いたい場合などは、Microsoft Storeより追加インストールできる。
インストール済みバージョンの確認
Windows PowerShell またはコマンドプロンプトを開き、下記のコマンドで確認できる。
C:\> wsl -l -v NAME STATE VERSION * Ubuntu Running 2 Ubuntu-20.04 Stopped 2
VERSIONはWSLのバージョン(WSL2/WSL1)を示す。
シャットダウン
WSL関連の全てのウィンドウが閉じて8秒経つと、WSLが自動的にシャットダウンする。
停止状態の確認はコマンドプロンプトで下記コマンドを実行。
C:\> wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2 Ubuntu-20.04 Stopped 2
強制終了
8秒待っても止まらない場合や、急いで確実にWSLを再起動したい場合は、「Windows PowerShell」を管理者として実行し、下記コマンドを実行。
wsl --shutdown
アップデート
「Windows PowerShell」を管理者として実行し、下記コマンドを実行。
wsl --update
リセット
弄っているうちに挙動がおかしくなってしまった場合など、クリーンインストール状態に戻したい場合は、【Windowsの設定 > インストールされているアプリ > Ubuntu(または他のディストリビューション)の右側の「…」 > 詳細オプション > リセット】を実行する。
アンインストール
個別のディストリビューションが不要になった場合は、【Windowsの設定 > インストールされているアプリ > Ubuntu(または他のディストリビューション)の右側の「…」 > アンインストール】で削除できる。
コマンドラインで実行する場合は、「Windows PowerShell」を管理者として実行し、下記コマンドを実行。
wsl --unregister Ubuntu-20.04
※Ubuntu-20.04 はディストリビューション名。
WSL自体の利用をやめる場合は、【Windowsの設定 > インストールされているアプリ > Linux 用 Windows サブシステム の右側の「…」 > アンインストール】で削除できる。
Windows Subsystem for Android も使っていない/使うのをやめる場合は、Windowsの設定を開き、【アプリ > オプション機能 > Windowsのその他の機能 > 仮想マシン プラットフォーム】をOFFにする。
Ubuntu
CUIの環境構築
スタートメニュー(の「おすすめ」)に追加されている「Ubuntu」をクリックすると、コンソールが起動する。
初回起動の際、画面の指示に従って、ログインIDとパスワードを登録する。
管理者権限が必要な操作にはsudoを使う。
Debian系なので、パッケージ管理にはaptを使う。何かと使うことになるので、まず最初にアップデートしておこう。
$ sudo apt-get update && sudo apt-get dist-upgrade -y
$ sudo apt-get install -y tcsh $ rehash $ which tcsh /usr/bin/tcsh ←これを控えておいて $ chsh Changing the login shell for user Enter the new value, or press ENTER for the default Login Shell [/usr/bin/bash]: /usr/bin/tcsh ←ここに入力
公開鍵認証
公開鍵認証でサーバにログインしたい場合は、まずは鍵ペア(秘密鍵と公開鍵)を作成する。
$ ssh-keygen -t rsa
Windowsエクスプローラを開いてフォルダツリーの下端にあるLinuxを開き、Ubuntu\home\(ユーザーID)\.ssh※を開くと、生成した鍵ペアファイルを取得できる(右図)。このうち公開鍵【id_rsa.pub】の内容をコピーして、サーバに登録すれば良い※。
または、サーバにパスワードでログインできる状態の場合は、直接送ることもできる。
$ cat ~/.ssh/id_rsa.pub | ssh hoge@example.com "cat >> ~/.ssh/authorized_keys"
GUIを使いたい
WSL2 では、LinuxのGUIアプリをWindowsアプリ同様の感覚で使うことができる。
まず、WSLに対応しているGPUドライバをインストールしておく必要がある(Intel / AMD Radeon / NVIDIA GeForce)。
Linuxアプリのインストールはaptを使ってコマンドラインで行う。
$ sudo apt-get install -y gedit
ダウンロード済みのDebianパッケージファイルをインストールする場合は、こんな感じ。(Sublime Textをインストールする例)
$ wget https://download.sublimetext.com/sublime-text_build-4143_amd64.deb $ sudo dpkg -i sublime-text_build-4143_amd64.deb
インストールが完了すると、スタートメニューの「おすすめ」欄に表示されるので、スタートメニューにピン留めしておけば、スタートメニューから直接起動できるようになる。
アンインストールもコマンドラインで行う。
$ sudo apt-get remove -y gedit $ sudo dpkg -r sublime-text
IPアドレスとインターネット接続の制限
現状、WSL2のゲストOS(Linux側)でのインターネットアクセスにいくつかの制限がある。
WSL1ではWindowsとLinuxでネットワーク接続が共用されていたが、WSL2ではホスト(Windows)とゲスト(Linux)は分離され、ゲストOSでは仮想化されたイーサネットアダプターが構築されて使われる仕組みになっており、これに伴う不便が生じている(Microsoftでは、このエクスペリエンスを改善する方法を検討しているそうだ)。
例えば、Linuxでサーバを立ち上げてWindowsからアクセスする場合は localhost (127.0.0.1) に接続すれば良いが、その逆の(LinuxからWindowsサーバにアクセスする)場合の接続先IPアドレスは、Windows側の ipconfig で確認する必要がある。
C:\> ipconfig /all ... イーサネット アダプター vEthernet (WSL): 接続固有の DNS サフィックス . . . . .: 説明. . . . . . . . . . . . . . . . .: Hyper-V Virtual Ethernet Adapter 物理アドレス. . . . . . . . . . . . .: 00-00-00-00-00-00 DHCP 有効 . . . . . . . . . . . . . .: いいえ 自動構成有効. . . . . . . . . . . . .: はい リンクローカル IPv6 アドレス. . . . .: fe80::****:****:****:****%*(優先) IPv4 アドレス . . . . . . . . . . . .: 172.21.208.1(優先) サブネット マスク . . . . . . . . . .: 255.255.240.0 デフォルト ゲートウェイ . . . . . . .: DHCPv6 IAID . . . . . . . . . . . . .: 000000000 DHCPv6 クライアント DUID. . . . . . .: 00-00-00-00-00-00-00-00-00-00-00-00-00-00 NetBIOS over TCP/IP . . . . . . . . .: 有効
Linux側からこのIPアドレスを確認する場合は、/etc/resolv.conf を開いて nameserver の値を取得する方法が案内されている。
現状 WSL2 の Linux では ifconfig や traceroute などは使えない(pingは使える)。
$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=3.61 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=4.56 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=4.50 ms ^C $ ping 2001:4860:4860::8888 ping: connect: Network is unreachable $ ifconfig ifconfig: Command not found.
よくある質問
- 日本語IMEは使える?
- WindowsのIMEがそのまま使える(Linux側にIMEは不要)
- IPv6は使える?
- 今のところ、WSL2では使えない。対応に取り組んでいるそうだ。
- マルチタスクに対応している?
- WindowsとLinuxが並行してマルチタスクで動作する
- Windowsのショートカットキーは使える?
- Linuxを利用中でも、Windowsキーや Alt+Tab などのWindowsのショートカットキーを使えるし、Alt+PrintScreenでスクリーンショットを撮れる。
- ウィンドウの大きさは変えられる?
- 任意に変えられる。ただしGUIアプリによっては、ウィンドウサイズの変更に追従できないものもある(その場合はGUIアプリを一旦終了してからサイズ調整する)。
- ファイルの操作はどうする?
- Windowsエクスプローラを開くとフォルダツリーの下の方に「Linux」が追加されており、この下にディストリビューション毎にマウントされるので、簡単にファイルをやり取りできる※。
- また、規定では /mnt/c, /mnt/d …にWindowsファイルシステムがマウントされるので、Linux側からWindowsのファイルを読み取ることもできる(管理者権限が必要)。
- 使えない機能はある?
- シリアルポートなど、ハードウェアへのアクセスは未提供。
- USBポートは、USBIPD-WIN プロジェクトが使えるようになった。
- サーバの運用はできる?
- 現状、WSL2のネットワークは特殊なので、サーバの運用はできないことはないが、WSL2に限った特殊な条件に合わせる必要が生じる。
- また、WSLではあくまでWindowsが優先で、ホスト側(Windows)のリソース不足などにより自動的にLinuxが終了させられることもある。Linuxでサーバを運用したい場合は、Linuxを直接インストールするのが賢明。
⇒What's new for WSL in Windows 10 version 1903?
参考リンク
- WSL を使用して Windows に Linux をインストールする
- Linux 用 Windows サブシステムで Linux GUI アプリを実行する
- Windows Subsystem for Linux に関してよく寄せられる質問
- WSL を使用したネットワーク アプリケーションへのアクセス
- WSL での詳細設定の構成
- WSL バージョンの比較
- 9P (Plan 9 Filesystem Protocol)