WSL 2の初期設定: wsl.conf を使った基本設定と systemd 有効化ガイド
tl;dr
WSL 2 をより快適に使うには、/etc/wsl.conf
による起動設定のカスタマイズが有効です。
systemd
の有効化やホスト名固定、PATH の調整などを、3 つの手順で簡潔に設定できます。
-
sudo vi /etc/wsl.conf
で設定ファイルを作成・編集 -
Gist 設定例 をコピーアンドペーストし、必要に応じて
hostname
やdefault
を修正 -
wsl --shutdown
を実行して、WSL を再起動すれば設定反映完了!
Enjoy!
はじめに
atsushifx です。
WSL 2 を快適に使うには、systemd の有効化や起動ユーザー指定など、起動時設定の最適化が不可欠です。
特に Docker を WSL 上でネイティブに動作させたい場合は、systemd
を有効化しておく必要があります。
この記事では、WSL の起動動作を制御する設定ファイルである /etc/wsl.conf
を用いて、以下のようにカスタマイズする方法を紹介します。
-
systemd
を有効化する - 起動ユーザーを指定する
- Windows パスの自動追加を抑止する
- ホスト名を固定する
基本的な使い方から、設定反映の手順、確認方法、応用的な設定までを丁寧に解説します。
用語集
-
WSL
('Windows Subsystem for Linux`):
Windows 上で Linux 環境を動作させる仕組み -
wsl.conf
:
WSL 起動時の動作を制御する設定ファイル -
systemd
:
Linux の初期化システムおよびサービスマネージャー。 -
hostname
:
システム起動時に設定されるホスト名 -
appendWindowsPath
:
WSL の環境変数$PATH
に Windows 側のパスを追加する設定 -
journalctl
:
systemd が出力したログを参照するためのコマンド -
fstab
:
Linux でファイルシステムのマウント情報を定義する設定ファイル -
interop
:
WSL から Windows アプリを実行したり、Windows 側との連携を制御する機能 -
automount
:
Windows のドライブ (例:C:) を WSL 上に自動的にマウントする機能 -
Visual Studio Code
:
Microsoft が提供する WSL とのリモート開発に対応した軽量エディタ
wsl.conf
とは
1. wsl.conf
は、WSL (Windows Subsystem for Linux) 環境において Linux ディストリビューションの起動動作をカスタマイズするための設定ファイルです。
このファイルを /etc/wsl.conf
として作成し、適切なセクション・オプションを記述することで、WSL 起動時に自動的に適用される設定を定義できます。
1.1 主な用途と特徴
wsl.conf
は、以下のような用途で活用されます。
-
systemd の有効化
近年のディストリビューションでは標準となっているsystemd
を、WSL 2 環境でも利用可能にします。
WSL 上でDocker
をネイティブに実行させるために、systemd
を有効化しておく必要があります。 -
起動ユーザーの固定
ディストリビューション起動時に、特定のユーザーで自動ログインできます。 -
ホスト名(hostname)の設定
複数の WSL 環境を使い分ける場合に、識別しやすくなります。 -
Windows 側のパスを除外
appendWindowsPath = false
を設定することで、WSL 内の$PATH
に Windows のパスが混入するのを防ぎます。
wsl.conf
の変更はディストリビューションの「起動時設定」として反映されるため、日常の開発体験に大きな影響を与える構成ファイルです。
1.2 ファイル形式の特徴
wsl.conf
は .ini
形式の構成ファイルで、[section]ラベル内に key=value
形式で設定を記述します。
この構成により、視認性と保守性に優れたフォーマットでカスタマイズが可能です。
図1: wsl.conf
の構造と各セクションの関係
以下は、systemd
を有効化し、WSL の起動ユーザーを固定する基本的な例です。
[boot]
systemd=true
[user]
default=<your-account>
コード例 1: WSL 起動時に systemd
を有効化し、ログインユーザーを指定する基本構成
設定後は、wsl --shutdown
を実行してから WSL を再起動することで、内容が反映されます。
このように、wsl.conf
は WSL 環境の起動時挙動を恒久的に制御するための要となるファイルです。
2. セクション別設定パターン
WSL の動作は、/etc/wsl.conf
に記述する複数のセクションによって細かく制御できます。
主に使用される設定項目の意味と、実際の wsl.conf
の具体例を紹介します。
wsl.conf
のセクションと設定項目
2.1. 以下に、よく使用されるセクションとその主要な設定項目をまとめます。
-
[boot]
WSL 起動時の動作を設定するセクション。設定項目 設定値の例 説明 systemd
true
WSL で systemd
を有効にするcommand
service ssh start
起動時に指定したコマンドを実行する -
[network]
ネットワーク関連の設定を行なうセクション。設定項目 設定値の例 説明 hostname
debian
ディストリビューションのホスト名を固定する generateHosts
true
/etc/hosts
を自動生成するgenerateResolvConf
true
/etc/resolv.conf
を自動生成する -
[interop]
Windows アプリとの連携を制御するセクション。設定項目 設定値の例 説明 enabled
true
Windows プロセスの起動を有効にする (Windows側のコマンドの実行を可能にする) appendWindowsPath
false
Windows のパスを $PATH
に追加しない -
[automount]
Windows ドライブのマウント方法を制御するセクション。設定項目 設定値の例 説明 enabled
true
Windows のドライブを自動マウントする mountFsTab
true
WSL開始時に、 /etc/fstab
を設定するroot
/mnt/
マウントするディレクトリのルートパスを指定 options
metadata,umask=022
所有権やパーミッションの設定を調整する -
[user]
WSL 起動時のユーザーを指定するセクション。設定項目 設定値の例 説明 default
<your-account>
起動時にログインするユーザーアカウント
これらの設定をどのように記述するかを 2.2 で wsl.conf
の例で見ていきましょう。
wsl.conf
2.2 作成した以下に、実際に使用しているwsl.conf
を示します。
この例では、2.1 での設定の例をもとにwsl
を設定しています。
コード例 2: systemd
有効化など、WSL 起動動作をカスタマイズする wsl.conf
の実例
wsl.conf
の設定
3. 実際に /etc/wsl.conf
を編集し、WSL に設定を適用する手順を紹介します。
wsl.conf
の作成
3.1 -
WSL を起動し、以下のコマンドで
/etc/wsl.conf
を作成・編集します。sudo vi /etc/wsl.conf
コマンド例1:
wsl.conf
ファイルを作成・編集するための基本的な操作 -
2.2 で紹介した設定例を、コピーアンドペーストします。
-
自分の環境に合わせて、以下の項目を変更します。
-
hostname
:develop
など、自分の好きな名前をつける -
default
: 起動時にログインするユーザーアカウント (省略時は初回インストール時の既定ユーザー)
-
-
wsl.conf
を保存する
wsl
への適用
3.2 /etc/wsl.conf
の設定を WSL に反映するには、WSL を完全に停止して再起動する必要があります。
┌───────────────┐
│ wsl.confの編集 │
└────┬──────────┘
│
▼
┌───────────────────┐
│ PowerShellで停止 │
│ $ wsl --shutdown │
└────────┬──────────┘
│
▼
┌────────────────────┐
│ WSLディストリ起動 │
│ $ wsl -d Debian │
└────────────────────┘
図2: PowerShell を使用して wsl.conf
を反映するフロー
手順
-
PowerShell または Windows Terminal を起動し、以下のコマンドを実行します。
wsl --shutdown
-
再度、Windows Terminal から対象のディストリビューション (例: Debian) を起動します。
wsl -d Debian
プロンプトに
your-username@hostname:~$
のように表示されていれば、設定が反映されています。
systemd
が動作しないときの対処法
3.3 以下のようなフローで確認と対応を進めるのが効率的です。
図3:systemd
有効化の診断フロー
wsl.conf
に systemd=true
を設定すれば、systemd
は有効になっています。
systemd が正しく有効になっているかを確認するには、以下のコマンドを使用します。
1. systemd サービスの状態を確認する
systemctl list-units --type=service|grep 'dbus'
コマンド例 2: systemd
が有効かどうかを確認する診断コマンド
出力結果:
dbus.service loaded active running D-Bus System Message Bus
上記のように、dbus.service
がactive
になっていれば、systemd
は正常に動作しています。
journalctl
が使えるか確認する
2. journalctl -xe
出力結果:
May 01 03:10:01 debian CRON[182]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
May 01 03:10:01 debian CRON[183]: (root) CMD (test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r)
May 01 03:10:01 debian CRON[182]: pam_unix(cron:session): session closed for user root
May 01 03:17:01 debian CRON[185]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
上記のようなログが出力されていれば、systemd
ベースのログ管理が機能しています。
3. systemctl が使えない場合の対処
systemctl list-units --type=service|grep 'dbus'
を実行したときに、次のようなエラーが出た場合:
System has not been booted with systemd as init system (PID 1). Can't operate.
4. WSL バージョンを確認する
wsl --version
次のように、バージョンが表示されます:
WSL バージョン: 2.4.13.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5716
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.3915
WSL バージョン
が、0.67.6
以前の場合は、WSL を最新バージョンに更新する必要があります。
以下のコマンドを実行してください。
wsl --update
下記のように表示され、WSLが更新されます。
```powershell
ダウンロード中: Linux 用 Windows サブシステム 2.4.13
[========================= 43.8% ]
インストール中: Linux 用 Windows サブシステム 2.4.13
[========================= 43.8% ]
4. 上級者向けTipsと応用設定
appendWindowsPath
をfalse
にする理由
4.1 WSL ではデフォルトで Windows 側の環境変数 $PATH
が WSL 環境にも追加されます。
以下の図は、その構成イメージを示したものです。
図4: appendWindowsPath=true
の場合、Windows側のPathが追加される
下記のような理由があるときは、appendWindowsPath=false
と設定する必要があります。
appendWindowsPath=false
の場合でも、シェルスクリプトを使うことで Windows上のアプリを使うことができます。
例えば、Visual Studio Code
の場合:
#!/usr/bin/env bash
# src: /opt/bin/code
#
# @(#) : VS Code executor for WSL
vscode=/mnt/c/app/develop/ide/VSCode
"$vscode/bin/code" --remote wsl+$(hostname) $*
スクリプト例 1: WSL 内から Windows 側の VSCode を起動するラッパースクリプト
上記のようなシェルスクリプトを組むことで、Windows 側と同じようにVisual Studio Code
を使用できます。
hostname
の固定
4.2 WSL では、起動時に自動的にホスト名が設定されます。
デフォルトでは、ディストリビューションの名前 (例: Debian
) がそのままホスト名として使用されます。
開発環境を複数の WSL インスタンスで使い分けている場合や、SSH やローカルネットワークサービスで識別性を高めたい場合には、明示的に hostname
を固定するのが便利です。
たとえば以下のように記述します。
[network]
hostname=dev-debian
この設定を行なうことで、常に dev-debian
というホスト名で起動され、ターミナル上のプロンプトも安定して識別できるようになります。
また、Visual Studio Code
の Remote WSL
機能や内部 DNS 解決処理などにおいても、安定した名前が使用されることで設定や接続確認がスムーズになります。
特に、Debian などの同一ディストリビューションを用途別に複数使い分ける場合、ホスト名を変えることで別物として扱えるようになります。
おわりに
この記事では、WSL 2 上の Linux ディストリビューションにおいて、/etc/wsl.conf
を用いた基本的なカスタマイズ方法を紹介しました。
wsl.conf
を活用することで、systemd の有効化や Windows 側との連携制御など、WSL 環境をより安定・快適に使うためのベースを整えることができます。
自分の開発スタイルにあわせて wsl.conf
を調整し、再現性の高い環境構築を実現してください。
それでは、Happy Hacking!
参考資料
Webサイト
-
WSL での詳細設定の構成:
wsl.conf
と.wslconfig
による WSL の詳細設定と使い分け方法を公式に解説したドキュメント -
WSL の systemd 対応発表ブログ (英語):
WSL における systemd サポートの背景と手順を説明した公式ブログ -
GitHub Gist:
wsl.conf
の設定例:
この記事で使用したwsl.conf
の全文を確認できます
Discussion