WSL2の設定ファイル wsl.confについて学んでみた。
DA事業本部の横山です。
今回は、WSL2の各ディストリビューションごとの設定ファイルであるwsl.conf
ファイルの設定について学んでみました。
気になった設定項目や、注意点について記載したので参考にしてみてください。
はじめに
私は開発環境としてWSL2で立てたUbuntu-20.04
を利用しており、基本的にはVSCodeのRemote Development拡張機能に含まれるWSL拡張機能を使って接続しています。(めちゃめちゃ便利です)
WSL2のグローバル設定ファイルである、.wslconfig
については、下記の記事に記載したのでご参照ください。
WSL2の設定ファイルについて
WSL2の設定ファイルには2種類あり、wsl.conf
と.wslconfig
が存在します。
.wslconfig
- WSL2で実行されているすべてのインストール済みディストリビューションで設定をグローバルに構成します。
- つまり、WSL2で立てている全てのディストリビューションの共通設定です
- 共通設定なので、WSL2を立てている側であるWindows側に設定ファイルを置きます。
wsl.conf
- WSL1 または WSL2 で実行されている Linuxディストリビューションのディストリビューションごとの設定を構成します。
- つまり、各ディストリビューションごとの設定です。
- 個別の設定なので、各ディストリビューションのインスタンス内に設定ファイルを置きます。
参考
wsl.conf
ファイルについて
- unix ファイルとしてディストリビューションのディレクトリに格納されます。 /etc
- ディストリビューションごとに設定を構成するために使用されます。 このファイルで構成された設定は、このファイルが格納されているディレクトリを含む特定の Linux ディストリビューションにのみ適用されます。
- WSL 1 または WSL 2 のいずれかのバージョンで実行されるディストリビューションに使用できます。
- インストールされているディストリビューションの /etc ディレクトリに移動するには、ディストリビューションのコマンド ラインで cd / を使ってルート ディレクトリにアクセスした後、ls でファイルの一覧を表示するか、Windows エクスプローラーで explorer.exe . を表示します。 ディレクトリ パスは、 のようになります /etc/wsl.conf。
つまり、各ディストリビューション内に/etc/wsl.conf
を作って起動時に読ませる必要があるということですね。Windows側からみると\\wsl.localhost\Ubuntu-20.04\etc\wsl.conf
に置く必要があります。
wsl.conf
ファイルの設定内容について
WSL は、これらのファイルの存在を検出し、内容を読み取り、WSL を起動するたびに構成設定を自動的に適用します。 ファイルが見つからないか、形式が正しくない (不適切なマークアップの書式設定) 場合、WSL は構成設定を適用せずに通常どおり起動し続けます。
正しい位置に正しい形式で配置できていない場合、デフォルト設定で起動するため間違いに気が付きにくい場合があるので気を付けましょう。
また、設定を変更した場合はWSLを再起動する必要があるためコマンドプロンプト等からwsl --shutdown
を実行してください。
(このコマンドは、WSL上のすべてのディストリビューションを再起動するため注意が必要です)
wsl.conf
の構成設定
wsl.conf ファイルでは、 user
, automount
, network
, interop
の4つのセクションがサポートされています。
本記事では、気になったもののみ取り上げるため全ての設定内容については下記のリンクを参照してください。 そこまで項目数は多くないため一度目を通してみることをおすすめします。
公式ドキュメントには、設定ファイル例も記載してあるため参考にしてみてください。
systemdのサポート
さっそく上で上げたセクション以外の項目になりますが、WSLでは通常、systemd
は有効化されておらずデーモンが起動されません。
(crond
やdocker
デーモンも必要であれば自分で起動する必要がある。)
下記の設定を行うことで、より通常のLinuxディストリビューションに近い形で利用することができます。
[boot] systemd=true
自動マウント設定
セクションのラベル:[automount]
enabled
- notes
true
を指定すると、固定ドライブ (C:/
またはD:/
) が DrvFs で/mnt
の下に自動的にマウントされます。false
を指定すると、ドライブは自動的にマウントされませんが、それでも手動または fstab を使ってマウントできます。
- default
true
- コメント
- WSL内の
/mnt/c
や/mnt/d
にCドライブやDドライブがマウントされます。 - マウントすることは問題ないですが、WSL → Windowsのファイルのアクセスは遅いため基本的には使わないほうが得策だと思います。
- WSL内の
ネットワーク設定
セクションのラベル:[network]
generateHosts
- notes
true
にすると、/etc/hosts
を生成するように WSL を設定します。 hosts ファイルには、IP アドレスに対応するホスト名の静的マップが含まれています。
- default
true
- コメント
- WSL内の
/etc/hosts
ファイルはデフォルト設定では、WSLによって自動生成されます。 /etc/hosts
を手で書き換える場合は本設定をfalse
にしておく必要があります。- このことは、WSL内の
/etc/hosts
ファイル自体にも以下のように記載されています。
- WSL内の
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf: # [network] # generateHosts = false
generateResolvConf
- notes
true
にすると、/etc/resolv.conf
を生成するように WSL を設定します。resolv.conf
には、指定されたホスト名をその IP アドレスに解決できる DNS リストが含まれています。
- default
true
- コメント
- WSL内の
/etc/resolv.conf
ファイルはデフォルト設定では、WSLによって自動生成されます。 /etc/hosts
を手で書き換える場合は本設定をfalse
にしておく必要があります。- このことは、WSL内の
/etc/resolv.conf
ファイル自体にも以下のように記載されています。
- WSL内の
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf: # [network] # generateResolvConf = false
相互運用設定
セクションのラベル:[interop]
このセクションのオプションは、Insider Build 17713 以降で使用可能です。
appendWindowsPath
- notes
- このキーの設定により、WSL が Windows パス要素を
$PATH
環境変数に追加するかどうかが決まります。
- このキーの設定により、WSL が Windows パス要素を
- default
true
- コメント
$PATH
に、/mnt/c/Windows/system32
,/mnt/c/Windows/System32/WindowsPowerShell/v1.0/
といった値が追加されます。- 別項目でも触れましたが、WSL → Windowsへのアクセスは遅いため基本的には利用する必要はありません。
- 設定を
false
にしても、VSCodeのエクスプローラーの機能である、「Explorer で表示」は動作します。 - しかし、シェルで
$ explorer.exe .
等のコマンドは通らなくなるので注意してください。(それだけやりたい場合は、/mnt/c/windows
だけPATHに追加しましょう)
ユーザー設定
セクションのラベル:[user]
WSLセッション開始時のユーザー名を指定できるオプションが存在しますが、私は変更する予定がないため割愛します。
ブート設定
セクションのラベル:[boot]
このセクションのオプションは、Windows 11 および Server 2022 のみで使用可能です。
command
- notes
- WSL インスタンスの開始時に実行するコマンドの文字列。 このコマンドは、ルート ユーザーとして実行されます。 例:
service docker start
。
- WSL インスタンスの開始時に実行するコマンドの文字列。 このコマンドは、ルート ユーザーとして実行されます。 例:
- default
""
- コメント
- 筆者はWindows10環境なので利用できませんが、インスタンス起動時にrootユーザーで実行したいコマンドが存在する方には利用価値がありそうです。
- 例であるデーモンの起動であれば、
systemd
の有効化をしてenabled
で済みそうではあります。
自分の設定内容について
今回、公式ドキュメントを読んで自分の環境では、.wslconfig
を以下のように設定してみました。
WindowsのPATHの追加をしない設定を行い、docker
やcrond
を利用したい場合があるためsystemd
の有効化を行いました。
[interop] appendWindowsPath = false [boot] systemd=true
おわりに
WSL2の各ディストリビューションごとの設定ファイルである、wsl.conf
について学んでみました。
WSLへの理解が深まり、開発環境をより快適することができたと思います。
以上になります。この記事がどなたかの助けになれば幸いです。