Windows Subsystem for Linux

提供:きまぐれ手記 Kimagurenote
移動先: 案内検索
当サイトではアフィリエイト広告を掲載しています
Windowsのスタートメニューにピン留めしたUbuntuとLinuxアプリのアイコン

Windows Subsystem for Linux(ウィンドウズ サブシステム フォー リナックス、WSL)は、米国Microsoft社が開発・提供している、仮想マシンの上でLinux仮想化OSを動かす仕組み。Windows 10 バージョン 2004(ビルド 19041)以降および Windows 11 で無料で利用できる。

2016年より提供されていた初代「WSL1」では「LXSS」「LXCore」というWSL専用の疑似カーネルの上で動作していたのに対し、2019年5月に発表された「WSL2」ではVMwareVirtualBoxの技術を使ったVMの上で通常の Linux Kernel が動作するようになり、様々なディストリビューションがほぼ遜色ない動作をするようになった。 ⇒WSL 1 と WSL 2 の比較

WSL1も引き続き利用できる(今のところ廃止予定はない)が、本稿ではWSL2を扱う。

Windowsの正規ライセンスを持っている必要はある。Windows本体以外の追加料金は不要。また、あえて商用Linuxディストリビューションを使う場合には、ゲストOSのライセンスが別途必要になることもある。

要件

デスクトップ向け 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を使うと回避できる。

「仮想マシン プラットフォーム」の中で Hyper-V の仕組みが使われている。Windowsの機能としては「Hyper-V」は不要(もとい共存できない)。
一例として、Ubuntuひとつでシステム領域に4GBくらい使う。当然、アプリ類をインストールするなどして使うほど膨らんでゆく。

インストール

【設定 > アプリ > オプション機能 > Windowsのその他の機能 > 仮想マシン プラットフォーム】をONにする
スタートメニューを開いて「powershell」で検索し、Windows PowerShell を管理者として実行する
  1. WSL用GPUドライバをWindowsにインストールしておく(Intel / AMD Radeon / NVIDIA GeForce
  2. Windowsの設定を開き、【アプリ > オプション機能 > Windowsのその他の機能 > 仮想マシン プラットフォーム】をONにしておく(右図)
  3. スタートメニューを開き、「PowerShell」で検索
  4. Windows PowerShell」を管理者として実行する
  5. wsl --install を実行
  6. 画面の指示に従って進める(途中で再起動あり)
  7. スタートメニュー(の「おすすめ」)に「WSL」(ペンギンのアイコン)が追加されればOK。右クリックし、スタートにピン留めしておこう。

規定では WSL2 を使って Ubuntu が動作する構成でインストールされる。 他のディストリビューションを指定してインストールすることもできる。

ディストリビューションは Microsoft Storeでインストールすることもできる。 複数のディストリビューションをインストールすることもできる(当然そのぶんのディスク容量が必要)。

GUIアプリを使わない(Linuxはコマンドラインベースで事足りる)場合は省略可。

ディストリビューションの追加

規定では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の設定 > インストールされているアプリ > (ディストリビューション名)の右側の「」】で管理できる

リセット

弄っているうちに挙動がおかしくなってしまった場合など、クリーンインストール状態に戻したい場合は、【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

bashが標準だが、tcshを使いたいときはこうする。

$ 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	←ここに入力

公開鍵認証

Linuxで生成した鍵ペアは、Windows側のエクスプローラで開くことができる

公開鍵認証でサーバにログインしたい場合は、まずは鍵ペア(秘密鍵と公開鍵)を作成する。

$ 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"
ファイル名の先頭が「.」のファイルやディレクトリは、Linuxでは隠しファイル扱いだが、Windowsでは通常ファイル扱いで、隠しファイルを表示しない設定になっていても見える。
LinuxのファイルをWindows側にコピーする際、「これらのファイルは、コンピュータに害を及ぼす可能性があります」といった警告メッセージが表示されることがあるが、確認して「OK」すればコピーできる。

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は使える)。

また、IPv4通信しか使えない(IPv6は使えない)。

$ 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を直接インストールするのが賢明。
WindowsからLinuxのファイルは、9Pプロトコルを使ってアクセスしている。よってネットワーク経由でアクセスしているように見えるが、LinuxをホストしているWindowsからのみアクセスできる。9Pサーバ・クライアントは自動で起動するので特段の設定不要。
What's new for WSL in Windows 10 version 1903?

参考リンク

関連記事