是否有可用 D-Bus 服务列表之类的东西?我偶然发现了一些,比如 NetworkManager、Rhythmbox、Skype、HAL 提供的那些。
我想知道是否可以找到一个相当完整的提供服务/接口的列表。
don*_*sti 108
在QT设置(简短的命令和干净的、人类可读的输出)上,您可以运行:
qdbus
Run Code Online (Sandbox Code Playgroud)
将列出会话总线上可用的服务和
qdbus --system
Run Code Online (Sandbox Code Playgroud)
将列出系统总线上可用的服务。
在任何设置上,您都可以使用 dbus-send
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Run Code Online (Sandbox Code Playgroud)
就像qdbus,如果--session指定或没有指定消息总线,dbus将发送到登录会话消息总线。所以上面将列出会话总线上可用的服务。
使用--system,如果你想,而不是使用系统范围的消息总线:
dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢图形工具,也可以使用DFeet(有关更多 GUI 选项,请参阅其他答案)。
Pit*_*kos 37
python方式是美丽的方式。
系统服务:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
Run Code Online (Sandbox Code Playgroud)
会话服务:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
Run Code Online (Sandbox Code Playgroud)
dai*_*isy 33
qdbusviewer是你最好的朋友; 它也允许您发送 D-bus 消息:

小智 14
gdbus是 glib2 的一部分,支持 Bash 补全。这是如何使用它(在 Fedora 上):
bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>
Run Code Online (Sandbox Code Playgroud)
这将显示所有可能的目的地。要获取可用接口的列表,DBus 导出该org.freedesktop.DBus.ListNames方法。您可以通过运行来调用它:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致不可读的输出。幸运的是输出是有效的python,所以这是可能的:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames | \
python -c 'import sys, pprint; pprint.pprint(eval(sys.stdin.read()))'
Run Code Online (Sandbox Code Playgroud)
我通常不这样做,但这是一个很好的技巧。gdbus在开始编写代码之前,我用于内省和证明概念。bash 完成可以节省大量输入并避免输入错误。gdbus显示更好的输出会很好。
小智 13
我更喜欢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
...
Run Code Online (Sandbox Code Playgroud)
当你看到每一个的树之后
# busctl tree :1.0
`-/org
`-/org/freedesktop
|-/org/freedesktop/LogControl1
`-/org/freedesktop/timesync1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74048 次 |
| 最近记录: |