找出 DBus 服务名称的所有者

找出 DBus 服务名称的所有者

我找不到方法来查找哪个程序实现了该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"出现在输出中,所以某物保留了该名称,但我无法启动我想要的守护进程。

答案1

PID您可以通过以下方式接听来电者org.freedesktop.DBus.GetConnectionUnixProcessID:

qdbus  org.freedesktop.DBus /org/freedesktop/DBus \
org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.Notifications
第737章

这就是你的PID.
如果您愿意dbus-sendqdbusKDE 特定),那么:

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

如果您愿意gdbus(这是 GNOME 特有的),那么:

gdbus call --session --dest org.freedesktop.DBus --object-path / --method \
org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.Notifications
(uint32 737,)

在更新的systemd设置中,您还可以使用busctl

busctl --user call org.freedesktop.DBus /org/freedesktop/DBus  \
org.freedesktop.DBus GetConnectionUnixProcessID s org.freedesktop.Notifications
u 737

答案2

d-bus 调试实用程序D 脚它在许多系统中作为包提供,似乎能够找到提供服务的进程 ID 和命令。例如,我在Fedora 23 xfce4 X11 系统平台并选择Session Bus并输入服务名称org.freedesktop.Notifications。它内省了服务,激活了它,并显示了 pid 和/usr/lib64/xfce4/notifyd/xfce4-notifyd命令:

激活前

激活后

相关内容