WSL安定版のVer.2.3.24には、WSLの全体動作を設定するWindowsアプリケーション「Linux用Windowsサブシステム設定」(以下wslsettings.exeと表記)が付属している。プレビュー版としては7月公開のVer.2.3.11に最初に搭載されたが、安定版に搭載されるのは、9月27日に公開されたVer.2.3.24となる。
WSLの設定
WSLの設定には、大きく以下の3つがある。
%Userprofile%\.wslconf
\\wsl.localhost\<ディストリビューション>\etc\wsl.conf
wsl.exe
※
ユーザーフォルダ(%Userprofile%)の下にある.wslconfigァイルは、WSL全体の挙動を設定するもの。そもそも、WSL2では、すべてのディストリビューションは、1つのLinuxカーネルを共有しているため、WSL自体の設定は一か所で行う必要がある。ここでは、WSLへのメモリやプロセッサコアの割り当てなどを設定する。
これに対してwsl.confは、WSLディストリビューションの挙動を設定する。たとえば、起動時に何をマウントするのか? systemdを起動するか? などである。
最後のwsl.exeは、WSLディストリビューションの起動だけでなく、起動中のディストリビューションのリストや停止、WSL自体のアップデートなど、メンテナンス的な作業も行う。
前述のwslsettings.exeは、この.wslconfigァイルによる設定を中心に、設定操作をGUI化するもの。
Linux用Windowsサブシステム設定
WSLをVer.2.3.24にアップデートすると、「Linux用Windowsサブシステム設定」であるwslsettings.exeがスタートメニューに登録される。
起動するとWindowsの設定に似たウィンドウが開く。ウィンドウ左側が設定を分類した「タブ」で、右側に設定項目が並ぶ。表01に、wslsettings.exeの設定項目と、.wslconf内の設定項目の対応を示す。分類項目は、現時点では「メモリとプロセッサ」(写真01)、「ファイルシステム」(写真02)、「ネットワーク」(写真03)、「オプション機能」(写真04)、「開発者」(写真05)の5つ。
wslsettings.exeは、.wslconfigファイルをリアルタイムに直接、書き換える。このため、従来行ってきた.wslconfigによる設定とは矛盾しない。.wslconfigは、俗にINIファイルと呼ばれる、Windows初期からのテキスト設定ファイル形式である。ファイル形式であるが故、設定項目の依存関係や排他関係は、修正後にシステムのエラーとしてしか知ることができない。
これに対して、GUI設定アプリでは、設定項目の依存関係、Windowsバージョンへの依存などのルールを設定時に判断することができるため、WSLを起動したら設定ファイルがエラーだったという問題は起こらない。ただし、GUI設定アプリでは、以前から.wslconfigファイルにあるエラーのある行は無視して、勝手に削除することはない。WSLのバージョン間やプレビューと安定版の違いなど、廃止された設定行が残る可能性がある。このとき、wslsettings.exeは、これを無視するだけだ。
なお、wslsettings.exeは、.wslconfigファイルを直接書き換えるため、少なくとも、同時にエディタで.wslconfigファイルを書き換えるようなことはしないほうがいいだろう。基本的には、wslsettings.exeを使えば、.wslconfigを直接編集する必要はないはずだ。
前掲の表を見てわかるように、wslsettings.exeは、一部の実験的機能をもカバーしている。ただし、すべての実験的機能をカバーしているわけでもない。実験的機能は、最初にプレビュー版に搭載されるが、その後、消えてしまうものもある。このため、安定版のリリースタイミングによっては、対応していない実験的機能が残ることがある。
現在のWSL Ver.2.3.24に付属しているwslsettings.exeでは、「dnsTunnelingIpAddress」のみが未対応だ。Linuxでは、DNSサーバーを/etc/resolve.confファイルを使って指定する。Unix/Linux上でドメイン名をアドレスに変換するものを「リゾルバ」という。このファイルはリゾルバプログラムに対して、設定情報を提供するものだ。
WSLでは、このresolve.confファイルを自動生成することで、WSLディストリビューションのDNSサーバーアクセスを制御してきた。
この「dnsTunnelingIpAddress」は、DNSトンネリングが有効な場合に、/etc/resolve.confファイルに記述される「nameserver」に設定されるIPアドレスを指定するものだ。
なお、デフォルト値は、「10.255.255.254」というプライベートアドレス(インターネット側とは直接通信できないアドレス)になっている。細かい動作がよくわかっていないので、この項目は触らないほうがよさそうだ。
wsl.exe
Windows 11 Ver.23H2でWSL Ver.2.3.24へのアップデートを行ったところ、システム内にwsl.exeが以下の3つパスに存在することがわかった(写真06)。
C:\Windows\System32\wsl.exe
C:\Program files\WSL\wsl.exe
%LOCALAPPDATA%\Microsoft\WindowsApps\wsl.exe
先頭のものは、Windows組み込みのwsl.exeである。これは、WSLを最初に導入するときに使われるwsl.exeで初期状態では、WSLインストールの基本的な機能しか持たない。
WSLのインストール時に、このwsl.exeは通常版のwsl.exeに置き換わる。
2つ目のものは、前者とは、サイズやタイムスタンプが異なる。しかし、両者の機能は同じであり、たとえば、--helpコマンドもWSL Ver.2.3.x系で追加された「wsl.exe --manage」に対する追加オプションの「--move
WSL Ver.2.3.2.4をインストールしたあと、wsl.exeを起動すると、「C:\Windows\System32\wsl.exe」が起動する。これは、Windowsがこのフォルダからのコマンド実行を優先するためだ。
なお、WSLをMicrosoftストア経由で配布するため、wsl.exeが「アプリ実行エイリアス」になっていたことがあった。3つ目の「%LOCALAPPDATA%\Microsoft\WindowsApps\wsl.exe」実行ファイルではなく、アプリ実行エイリアスである。
基本的な設定がGUIになり、設定変更が手軽にできる。ざっと利用した感じでは、大きな問題はなかった。可能なら安定版にアップデートしておくのがいいだろう。
> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/