【2026年版】WSL2(Ubuntu)でsystemctlを使う方法|systemdを有効化

WSL2のUbuntuでsystemctlを使う方法

2026年10月確認:現在、wsl --installで新しく導入したUbuntuではsystemdが標準で有効です。まず現在の状態を確認し、systemdで起動していない旧環境だけ/etc/wsl.confを設定してください。

WSL2のUbuntuでsystemctlを実行したとき、次のエラーが表示されることがあります。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

このエラーは、UbuntuのPID 1がsystemdではない状態で起動していることが原因です。最短の解決手順は次のとおりです。

  1. systemdで起動しているか確認する
  2. 無効なら/etc/wsl.confへ設定を追加する
  3. Windows側からwsl --shutdownを実行する
  4. Ubuntuを起動し直して確認する

最初に確認:すでにsystemdが有効か

Ubuntuを開き、次のコマンドを実行します。

ps -p 1 -o comm=

結果がsystemdなら設定は不要です。そのまま次のようにサービスを確認できます。

systemctl --version
systemctl is-system-running
sudo systemctl status ssh

systemctl is-system-runningがrunningまたはdegradedを返し、各サービスの状態が表示されればsystemctlは利用できます。サービス名はソフトウェアによって異なるため、Unit ... could not be foundと出る場合は正しいunit名も確認してください。

systemdが無効な場合の有効化手順

1. WSLのバージョンを確認・更新する

Windows TerminalまたはPowerShellで次を実行します。

wsl --version
wsl --list --verbose

UbuntuのVERSIONが2であることを確認します。wsl --versionが認識されない場合やWSLが古い場合は、管理者権限のWindows Terminalで更新してください。

wsl --update

2. /etc/wsl.confにsystemdの設定を追加する

Ubuntuで次を実行します。

sudo nano /etc/wsl.conf

ファイルへ次の2行を追加します。すでに[boot]セクションがある場合は重複させず、その中へsystemd=trueを追加してください。

[boot]
systemd=true

nanoではCtrl + O、Enterで保存し、Ctrl + Xで終了します。

/etc/wsl.confはLinuxディストリビューションごとの設定ファイルです。Windowsユーザーフォルダーに置く.wslconfigとは別物です。

3. WSLを完全に停止する

Ubuntuの画面を閉じ、Windows TerminalまたはPowerShellで次を実行します。

wsl --shutdown

このコマンドは実行中のすべてのWSLディストリビューションを停止します。作業中のファイルを保存してから実行してください。

4. Ubuntuを起動し直して確認する

Ubuntuを起動し、次のコマンドで確認します。

ps -p 1 -o comm=
systemctl list-unit-files --type=service

1行目の結果がsystemdで、2つ目のコマンドにサービス一覧が表示されれば完了です。

まだsystemctlが動かない場合

「System has not been booted with systemd」が消えない

  1. /etc/wsl.confのスペルと改行を確認する
  2. Windows側でwsl --updateを実行する
  3. wsl --list --verboseでUbuntuがWSL2になっているか確認する
  4. Ubuntuの終了だけでなくwsl --shutdownを実行する

WSL1になっている場合は、ディストリビューション名を確認してから変換します。

wsl --set-version Ubuntu 2

環境によって名前がUbuntu-24.04などの場合があります。wsl --list --verboseに表示された名前へ置き換えてください。

「Unit ○○.service could not be found」と表示される

systemd自体は動いていますが、指定したサービス名が違うか、そのソフトウェアが未インストールです。利用可能なunitを検索します。

systemctl list-unit-files --type=service | grep -i サービス名

たとえばPostgreSQLでは環境によりpostgresql.serviceやバージョン付きunitを使います。エラーの意味を混同しないことが重要です。

WSLそのものが起動しない

0x8007019eなどのエラーでUbuntuを起動できない場合は、先にWindows側のWSL機能を有効にします。

【2026年版】WSL2エラー「0x8007019e」の直し方

よくある質問

現在のUbuntuでもwsl.confの設定は必要ですか?

新しくwsl --installで導入したUbuntuはsystemdが既定のため、通常は不要です。以前から使っているディストリビューションや他のディストリビューションでPID 1がsystemdでない場合だけ設定してください。

Docker Desktopを使うために必要ですか?

Docker DesktopのWSL 2バックエンドだけを使う場合、必ずしもUbuntu側でsystemdを手動有効化する必要はありません。一方、Ubuntu内へDocker Engineを直接入れ、サービスとして管理する場合はsystemdが役立ちます。

設定するとWindows起動時にサービスも動きますか?

systemdのサービスはWSLディストリビューションが起動したときに管理されます。Windowsの起動と同時に必ずWSLが常駐する、という意味ではありません。

まとめ

2026年現在のポイントは、「最初から設定を書き換えず、まずPID 1を確認する」ことです。

  • ps -p 1 -o comm=がsystemdなら設定不要
  • 旧環境では/etc/wsl.confへsystemd=trueを追加
  • 設定後はWindows側からwsl --shutdown
  • 動かない場合はWSLの更新・WSL2化・unit名を確認

公式情報:
Microsoft「WSL で systemd を使用して Linux サービスを管理する」
Microsoft「WSL の詳細設定の構成」

この記事が役に立ったら

応援は任意です。記事はこれまでどおり無料で読めます。

このページをシェアする

コメント

タイトルとURLをコピーしました