ウェブサイト検索

Linuxでの'システムスコープバスへの接続に失敗しました'エラーの修正方法


hostnamectl、timedatectl、systemctlなどのsystemdコマンドを使用しているときに、「ローカルトランスポート経由でシステムスコープバスに接続できませんでした:そのようなファイルやディレクトリはありません」というエラーメッセージが表示されることがあります。このエラーは、systemdがD-Busシステムメッセージバスと通信できないことを示しており、これは現代のLinuxシステムにおけるプロセス間通信に不可欠です。このチュートリアルでは、Debianベースのシステムにおけるこの問題の診断と解決方法を案内しますが、この概念は他のディストリビューションにも適用されます。

このチュートリアルでは、次のことを学びます:

  • 「システムスコープバスへの接続に失敗しました」エラーの診断方法
  • D-Busサービスが実行中かどうかを確認する方法
  • D-Busサービスの開始と確認方法
  • 今後このエラーを防ぐ方法

エラーを理解する

システムスコープバスエラーは、D-Busサービスが実行されていない場合、D-Busソケットが利用できない場合、systemdがD-Busとの通信を確立できない場合、またはアクセス権の問題がD-Busソケットへのアクセスを妨げる場合に発生します。D-Bus(デスクトップバス)は、アプリケーションが互いにおよびシステムと通信するための簡単な方法を提供するメッセージバスシステムです。Systemdはその運用においてD-Busに大きく依存しています。

hostnamectl
Failed to connect to system scope bus via local transport: No such file or directory

診断手順

問題を修正しようとする前に、エラーの原因を適切に診断することが重要です。根本的な原因を特定するために、次の手順を実行してください。

  1. systemdが実行中か確認する: まず、systemdがあなたのinitシステムであることを確認し、正しく動作しているかチェックしてください。

    ps aux | grep systemd
  2. 期待される出力には、少なくとも systemd-journald と systemd-udevd プロセスが実行されていることが示されるべきです。

  3. PID 1を確認する: PID 1(initプロセス)として何が実行されているかを確認します。

    ps aux | head -2
  4. 出力には /sbin/init が PID 1 として表示されるべきであり、これは systemd が初期化システムであることを確認します。

  5. systemd が init システムであることを確認する: /sbin/init が systemd を指していることを確認してください

    ls -l /sbin/init
  6. 出力は、../lib/systemd/systemdを指すシンボリックリンクを表示する必要があります。

  7. D-Busの状態を確認する:最も一般的な原因はD-Busが実行されていないことです。D-Busプロセスがアクティブかどうかを確認してください。

    ps aux | grep dbus
  8. 出力にgrep自体だけが表示される場合、D-Busは実行されておらず、開始する必要があります。

  9. D-Busのインストールを確認: D-Busパッケージがインストールされていることを確認してください

    dpkg -l | grep dbus

    dbus、dbus-daemon、dbus-system-bus-common、libdbus-1-3のようなパッケージが表示されるはずです。

解決策

D-Busが動作していないことを診断したら、解決策は簡単です:

  1. D-Bus サービスを開始する: D-Bus がインストールされているが実行されていない場合は、手動で開始してください

    sudo systemctl start dbus
  2. このコマンドは、D-Bus システムメッセージバスサービスを直ちに開始します。

  3. 修正を確認する: systemd コマンドが現在動作するかテストする

    hostnamectl
  4. 成功した出力は、ホスト名、シャーシタイプ、仮想化、およびオペレーティングシステムの詳細を含むシステム情報を表示します。

  5. DBusサービスのステータスを確認: DBusが正常に動作していることを確認します

    sudo systemctl status dbus
  6. 出力には「アクティブ: アクティブ(実行中)」と表示され、dbus.socket によってトリガーされていることを示す可能性があります。

代替ソリューション

基本的な解決策がうまくいかない場合は、これらの代替アプローチを試してみてください。

  1. エラーメッセージを確認する: D-Busに関連するエラーのためにシステムログを確認してください

    sudo journalctl -xe | grep dbus
  2. これは、D-Busが起動しなかった理由を示す可能性のある最近のログエントリを表示します。

  3. D-Busパッケージを再インストール: D-Busが破損している場合は、再インストールしてください。

    sudo apt-get install --reinstall dbus dbus-daemon
  4. これは、設定ファイルを削除することなくD-Busパッケージを再インストールします。

  5. ソケットファイルの問題をチェック: D-Busソケットファイルが存在することを確認してください

    ls -la /var/run/dbus/system_bus_socket
  6. ソケットファイルは存在し、システムによってアクセス可能である必要があります。

結論

「システムスコープバスへの接続に失敗しました」というエラーは、通常、D-Busが実行されていない場合に発生します。systemctl start dbusでD-Busサービスを開始することで、通常、問題はすぐに解決します。D-Busは最近のsystemd実装でソケットアクティベーションを通じて有効化されるため、明示的に有効にすることなく、今後の起動時に自動的に開始されるはずです。将来的にこの問題を防ぐために、D-Busが起動時に開始されることを確認し、システムパッケージを更新し、D-Bus関連のエラーについてシステムログを監視してください。コンテナ環境では、コンテナが完全なsystemdサポートなしで実行されることが多いため、追加の考慮が必要な場合があります。