web-dev-qa-db-ja.com

「Dバス接続の取得に失敗しました:権限が拒否された」ため、 `systemctl --user`を使用できません

同様の質問に this answer を使用して、ユーザーレベルのサービスを設定しようとしています。必要なファイルを作成して再起動しました。

「Dバス接続を取得できませんでした:接続が拒否されました」のときに「Dバス接続を取得できませんでした:アクセス許可が拒否されました」というメッセージが表示されたため、進行中ですが、どのオブジェクトかわからないために困惑しています(ファイル?ソケット?)にアクセスしようとしているため、現在の権限を確認することもできません。何か案は?

これまでのところ、私は追加しました:

_loginctl enable-linger userservice
_

/usr/lib/systemd/user/dbus.service(-rw-r--r--ルートルート)

_[Unit]
Description=D-Bus User Message Bus
Requires=dbus.socket

[Service]
ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig

[Install]
Also=dbus.socket
_

/usr/lib/systemd/user/dbus.socket(-rw-r--r-- root root)

_[Unit]
Description=D-Bus User Message Bus Socket

[Socket]
ListenStream=%t/bus
ExecStartPost=-/bin/systemctl --user set-environment DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus

[Install]
WantedBy=sockets.target
Also=dbus.service
_

/home/userservice/.config/systemd/user/userservice.service

_[Unit]
Description=Test user-level service

[Service]
Type=dbus
BusName=com.wtf.service
ExecStart=/home/userservice/userservice.py
Restart=on-failure

[Install]
WantedBy=default.target
_

他の場所にリンクを追加していません...

失敗させるには:

_systemctl --user status
_

2018-10-25を編集:

_.bashrc_にexport XDG_RUNTIME_DIR=/run/user/$(id -u)を追加しました。変数が設定され、_Failed to get D-us connection: no such file or directory_が得られます。奇妙なことに、_man systemctl_も_systemctl --help_も_--user_オプションに言及しておらず、どちらも_--system_に言及しており、これがデフォルトであることを指定しています(他のオプションは何ですか)。

SELinuxでのRHEL 7.4の使用(_systemd 219_によって報告された_systemctl --version_を使用)。

2
xenoid

そのため、ユーザーがログインしたときにXDG_RUNTIME_DIR環境変数が正しく設定されない、またはまったく設定されないため、ユーザーのD-Busにアクセスできないという長期にわたる問題があります。これは、ユーザーがローカルのグラフィカルコンソール以外の方法でログインしたときに発生します。

これを回避するには、ユーザーの$HOME/.bashrcに追加します。

export XDG_RUNTIME_DIR=/run/user/$(id -u)

次に、ログアウトして再度ログインします。

2
Michael Hampton