systemd/ユーザー - ArchWiki などを参考にして、 loginctl enable-linger usersystemd のユーザーインスタンスを起動していて、 sudo -u user systemctl --user status などで Failed to connect to bus: No such file or directory となって繋がらなかったのですが、 XDG_RUNTIME_DIR を設定すればいいとわかりました。

動作確認環境

  • Ubuntu 18.04.4 LTS
  • Raspbian GNU/Linux 10 (buster)

以上の環境で確認しましたが、 バージョンに依存することは少なそうなので、 古いバージョンや新しいバージョンでも同じだと思います。

enable-linger 前

enable-linger 前は起動していないので、 XDG_RUNTIME_DIR を指定しても繋がりません。

$ sudo -u user systemctl --user status
Failed to connect to bus: No such file or directory
$ sudo -u user XDG_RUNTIME_DIR=/run/user/$(id -u user) systemctl --user status
Failed to connect to bus: No such file or directory

enable-linger して確認

enable-linger で起動すると、 単純な sudo では繋がらないのですが、 XDG_RUNTIME_DIR を指定すると繋がります。

$ loginctl enable-linger user
$ sudo -u user systemctl --user status
Failed to connect to bus: No such file or directory
$ sudo -u user XDG_RUNTIME_DIR=/run/user/$(id -u user) systemctl --user status
● ubuntu
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Tue 2020-06-02 04:12:57 EDT; 5s ago
   CGroup: /user.slice/user-1000.slice/user@1000.service
           └─init.scope
             ├─4142 /lib/systemd/systemd --user
             └─4143 (sd-pam)

disable-linger で停止

確認が終わって、不要なら disable-linger で戻しておきます。

$ loginctl disable-linger user
$ sudo -u user XDG_RUNTIME_DIR=/run/user/$(id -u user) systemctl --user status
Failed to connect to bus: No such file or directory

経緯

自分で調べたときは原因がよくわからなくて、 pam_systemd あたりで何か特殊な権限が設定されているのかと思っていたのですが、 mameさんが同じ Failed to connect to bus で困っている時に sudo だとダメだったので、 ssh で直接そのユーザーで入るようにした、 という話をしたところ、違いを調べてくれて、 XDG_RUNTIME_DIR が違うということを教えてもらいました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published