D-Bus

找出 DBus 服務名稱的所有者

  • July 21, 2017

我找不到找到實現該org.freedesktop.Notifications服務的程序的方法。是否可以要求 DBus 告訴我什麼程序提供它?

問這個問題的原因很平庸:我找到了一個我想使用的新桌面通知守護程序,但它不會啟動,而是抱怨這條消息

失名。是否正在執行另一個通知守護程序?

但是,我無法確定哪個程序擁有該名稱。我已經解除安裝了所有其他通知守護程序,重新啟動了 X 伺服器,甚至重新啟動了機器。

但是,當我執行此命令時:

dbus-send --session --dest=org.freedesktop.DBus --type=method_call \
--print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames

string "org.freedesktop.Notifications"存在於輸出中,所以有些東西持有該名稱,我無法啟動我想要的守護程序。

在許多系統中作為軟體包提供的 d-bus 調試實用程序d-feet似乎能夠找到提供服務的程序 ID 和命令。例如,我在Fedora 23 xfce4 X11 systemd平台上執行它,選擇Session Bus並輸入服務名稱org.freedesktop.Notifications。它自省服務,啟動它,並顯示 pid 和/usr/lib64/xfce4/notifyd/xfce4-notifyd命令:

啟動前

啟動後

PID您可以通過以下方式獲取來電者:org.freedesktop.DBus.GetConnectionUnixProcessID

gdbus call --session --dest org.freedesktop.DBus --object-path / --method \
org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.Notifications

印刷

(uint32 737,)

所以有你的PID。如果您更喜歡dbus-send(正如gdbusGNOME 特定的那樣),那麼:

dbus-send --session --print-reply --dest=org.freedesktop.DBus / \
org.freedesktop.DBus.GetConnectionUnixProcessID string:org.freedesktop.Notifications

引用自:https://unix.stackexchange.com/questions/379810