是否有可用 D-Bus 服务列表之类的东西?我偶然发现了一些,比如 NetworkManager、Rhythmbox、Skype、HAL 提供的。
我想知道是否可以找到所提供的服务/接口的相当完整的列表。
答案1
在QT
设置(简短的命令和干净的、人类可读的输出)中,您可以运行:
qdbus
将列出会话总线上可用的服务并
qdbus --system
将列出系统总线上可用的服务。
在您可以使用的任何设置上dbus-send
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
就像qdbus
,如果--session
或没有指定消息总线,dbus
将发送到登录会话消息总线。因此上面将列出会话总线上可用的服务。如果您想使用系统范围的消息总线,
请使用:--system
dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
答案2
使用 Python 可以更简单。
系统服务:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
会话服务:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
答案3
qdbusviewer
是你最好的朋友;它也允许您发送 D-bus 消息:
答案4
我更喜欢busctl
。
请注意,与其他工具(例如qdbus
和)不同dbus-send
,此工具默认使用总线--system
,因此要与会话管理器通信,您必须显式使用该--user
开关。另外,list
如果没有指定命令,则该命令是默认操作
总线控制
是相同的
Busctl列表--系统
或者
# busctl list
NAME PID PROCESS USER CONNECTION UNIT SESSION DESCRIPTION
:1.0 162 systemd-timesyn systemd-timesync :1.0 systemd-timesyncd.service - -
:1.1 157 systemd-network systemd-network :1.1 systemd-networkd.service - -
:1.10 199 phosphor-dump-m root :1.10 obmc-dump-monitor.service - -
:1.11 216 fru-device root :1.11 xyz.openbmc_project.FruDevice.service
...
当你看到每一个的树之后
# busctl tree :1.0
`-/org
`-/org/freedesktop
|-/org/freedesktop/LogControl1
`-/org/freedesktop/timesync1