• Windows Subsystem for Linuxガイド 第41回 WSL GUI設定

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つ。

  • ■表01

  • 写真01: wslsettings.exeは、左側にカテゴリに対応したタブが並び、右側は選択されたタブに属する設定項目が並ぶ。メモリとプロセッサでは、WSLを実行する「軽量ユーティリティ仮想マシン」に割り当てるメモリやプロセッサ数を指定できる

  • 写真02: ファイルシステムでは、WSLディストリビューションの新規インストール時に設定される仮想ハードディスクファイルの最大容量(実容量でないことに注意)を指定する。基本的は、デフォルト(1048576メガバイト=1テラバイト)のままでかまわない

  • 写真03: ネットワークは項目数が多いが、一部の項目は「ネットワークモード」や「DNSトンネリング」などに依存している

  • 写真04: オプションは、頻繁に変更する必要がなく、デフォルトのままでかまわない。「セーフモード」は、ディストリビューションの起動に失敗するような場合に有効にする

  • 写真05: ハードウェアパフォーマンスカウンターは、開発環境などでコードのプロファイリングを行うような場合に必要になる。逆に言うと開発用途以外ではほとんど使われないのでオフのままでもよい

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
  • 写真06: Windows 11 Ver.23H2上で、WSLをVer.2.3.24にアップデートしたところ、wsl.exeが3つ存在しており、1つは実体のないアプリ実行エイリアスで、残り2つは、「C:\Windows\System32」と「C:\Program Files\WSL」以下にあった。Windowsは、System32フォルダにある実行ファイルを優先して実行するので、通常は、これが起動する。なお、Helpメッセージを見る限り、機能はどちらも同じようだ

先頭のものは、Windows組み込みのwsl.exeである。これは、WSLを最初に導入するときに使われるwsl.exeで初期状態では、WSLインストールの基本的な機能しか持たない。

WSLのインストール時に、このwsl.exeは通常版のwsl.exeに置き換わる。

2つ目のものは、前者とは、サイズやタイムスタンプが異なる。しかし、両者の機能は同じであり、たとえば、--helpコマンドもWSL Ver.2.3.x系で追加された「wsl.exe --manage」に対する追加オプションの「--move 」を含んでいる。また、前述のwslsettings.exeは、同じ“C:\Program files\WSL”フォルダにインストールされている。

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/