「.wslconfig」をもう少し深掘りする
「.wslconfig」は、前述したようにWSL2の振る舞いを指定するためのファイルだ。WSL2というよりは、それを動かす「軽量ユーティリティ仮想マシン」の設定をするものと言った方がいいかもしれない。
ファイルの構造としては、過去にWindowsでよく使われていたiniファイルに似ている。
角カッコを使ったセクションの指定に続く行で、「パラメーター名=値」という行形式で設定を行う。パラメーター名としては、以下の表のようなものがある。
表の後半にある2つの項目は、現時点では、Windows Insider ProgramのDev Channelで配布されているプレビュー版でのみ有効である。このファイルを書き換える前には、すべてのWSL2ディストリビューションを停止させておく必要がある。それには、
wsl.exe --shutdown
を実行する。
また、ここでは、カーネルのパスなども指定できるため、その変更には注意が求められる。もっとも、このファイルはなくてもWSL2は起動するので、最悪の場合にはファイル自体を一旦削除すればいいだろう。
実際に「.wslconfig」を作って動作を試してみた。この設定をする前に、メモリ状態を表示するfreeコマンドや/proc/cmdline(カーネル起動オプション)、/proc/cpuinfo(プロセッサ情報)を表示させ、「.wslconfig」を編集したあとの実行状態が下の画面だ。指定どおりにコア数やメモリ量が変化しており、カーネルの起動オプションも追加されている。
「wsl.confファイル」では
ディストリビューション起動時の設定などを変えられる
一方の「wsl.conf」は、wslディストリビューションごとの設定を記述する。この設定ファイルは、WSL当初からあり、WSL2だけでなくWSL1でも有効だ。このファイルは、WSLディストビューションのファイルシステム(DrvFs内)の/etc/ディレクトリにある。
このファイルでは、ディストリビューション起動時の自動マウントやDrvFsのルートフォルダー、WSLの自動ログインユーザー名などを設定できる。キーなどを以下の表に示す。やはり構造はiniファイルに似ている。
なお、このファイルはシステムの設定ファイルなので、書き換えにはroot権限が必要だ。たとえば、
sudo vi /etc/wsl.conf
などとして、管理者権限を使って編集する必要がある。読み出しは一般ユーザーでも可能なのだが、エディターでの編集後、書き込むことができない。
こちらの設定は、WSLディストリビューションであるLinuxの挙動を変更するものなので、設定値もLinux様式だ。デフォルトのままでほとんど問題ないが、「[automount] 」セクションの「root」キーを使うと、WSL側から見えるwin32側ファイルシステム(DrvFs)のマウントパスを標準の「/mnt」から別の場所に変更することもできる。
ただし、Linuxのマウントでは、存在しているディレクトリを指定する必要があるため、変更時には、あらかじめ該当のディレクトリを作成しておかないといけない。
現在のDev Channelのプレビュー版では、WSLディストリビューションの起動時に自動実行するコマンドを指定することができる。「[boot]」セクションの「command」キーに起動したいコマンドを記述しておくと、該当のディストリビューションが起動したときに自動的にコマンドを起動できる(これを自動実行コマンドと表記する)。
本来、こうした処理は、Linuxのinit.dなどがしていたが、クライアント利用を想定したWSLでは、init.dなどのデーモン(バックグラウンドで動作するプログラム、Windowsのサービスに相当するもの)起動などの仕組みは省かれている。しかし、WSL2になり、高度な利用が増えてきたため、こうした機能が追加されたようだ。
自動実行コマンドは、停止中のWSLが起動したときのみ実行される。バックグラウンドでWSLが動作している間は、wsl.exeなどでWSLディストリビューションを起動しても、コマンドは実行されない。WSLは、接続しているセッションがなくなり、動作しているプログラムがなければ、一定時間後に停止するようになっている。
終了までに遅延時間が設けられているのは、続けてWSLを起動するときの時間を短縮するためだろう。たとえば、コマンドラインのパイプラインでwsl.exeを使うと、Linuxコマンドを実行しては抜け、再度WSLを実行するというパターンになると考えられる。このような場合にコマンド実行時間を短縮するため、すぐにはプロセスを停止しないようになっていると思われる。
実際に試してみたところ、この起動コマンドは、rootが実行しているようだ。
ユーザーログイン時のコマンド実行には、bashなどのログインスクリプトも使えるが、実行はユーザー権限となり、自動実行コマンドとは挙動が変わる。このため、起動時に実行権限が問題になることはないと思われるが、うかつなコマンドを実行してしまうと、なんでもできてしまうので注意が必要だ。WSLは、Linuxマシンなどと違って、外部からの侵入の恐れはないが、変なコマンドを登録しないようにしたほうがいいだろう。
「.wslconfig」と「wsl.conf」を使うことで、WSLの挙動を変更することが可能だ。WSLに関しては、設定項目が少ないこともあり、当面は、こうしたテキストファイルベースでの設定が続くと思われる。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ