systemctl start user@me
を使用すると、期待どおりにユーザーサービスが開始されますが、dbusサービスは開始されないようにsystemdを設定しました(PulseAudioが必要です)。
私が間違っているかどうかを調べるためにdbusまたはsystemdをチェックする方法はありますか?
この時点で私はそれを試すつもりはありませんでした。関連する可能性がある他の情報を提供できる場合はお知らせください。
試すことができる追加情報/解決策
私はArch Linux、systemd 204-1、dbus 1.6.10-1を使用しています。
ユーザー systemd を起動すると、# systemctl start user@me
次のようになります。
├─systemd─┬─(sd-pam)
│ ├─mpd───5*[{mpd}]
│ └─pulseaudio─┬─gconf-helper
│ └─2*[{pulseaudio}]
systemd --user &
私のユーザーが作成されたら、手動で起動します。
├─bash─┬─pstree
│ └─systemd─┬─2*[dbus-daemon]
│ ├─dbus-launch <<< X only
│ ├─gconfd-2 <<< X only
│ ├─mpd───5*[{mpd}]
│ └─pulseaudio─┬─gconf-helper
│ └─2*[{pulseaudio}]
X を使用しない場合、ユーザー dbus.service が有効になっていても、次のエラーが発生します。
Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
関連リンク:
- https://superuser.com/questions/476379/how-do-i-setup-a-systemd-service-to-be-started-by-a-non-root-user-as-a-user-daem
- https://github.com/sofar/user-session-units
- https://github.com/grawity/systemd-user-units
最初の2つはdbus関連の問題に言及しましたが、リンク2では問題がdbus-1.6.9で修正されたことが示されているので、問題はこのバグではなく私の実装にあるようです。
私はリンク2と3のサンプルユーザーサービスを使用しました。
答え1
DBUS_SESSION_BUS_ADDRESS
D-Busを使用するプロセスにこのオプションが設定されていない場合、デフォルトではプロセスはdbus-launchを呼び出し、--autolaunch
新しいセッションバスを開始するか、Xディスプレイまたはファイル内の既存のバスアドレスを見つけることを選択します~/.dbus/session-bus/
。
$ DISPLAYが他のサーバーを使用するのと同じ方法でdbusがXorgで使用されていない場合は、この環境変数を設定して使用するバスセッションをdbusに通知できます。
export DBUS_SESSION_BUS_ADDRESS=""
もっと情報が欲しいなら読んでくださいhttp://dbus.freedesktop.org/doc/dbus-launch.1.html
答え2
dbusでXを使用しない場合、
この環境変数を設定して、dbusに使用するバスセッションを通知できます。
export DBUS_SESSION_BUS_ADDRESS=
答え3
[email protected]
代わりに試してみました[email protected]
か?最初は問題があり、[email protected]
(正確にどの問題なのかわからない)、切り替えた後に問題が解決しました。
接続した2番目のストレージにあります。本機はDISPLAY
変数をに設定します:0
。複数のモニターでは機能しませんが、1つのモニターではうまく機能します。