Answers:
会议:
dbus-send --session \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
系统:
dbus-send --system \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
如果您更喜欢GUI工具,也可以使用DFeet。
qdbusviewer
是你最好的朋友; 它也允许您发送D-bus消息:
qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
d-feet
截止到今天。
d-feet
答案以使其更加可见
python方式是美丽的方式。
系统服务:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
会议服务:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
pip install dbus-python
。python-dbus软件包也可用(在尝试的2分钟内我无法上班)。
gdbus
是glib2的一部分,支持Bash补全。这是如何使用它(在Fedora上):
bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>
这将显示所有可能的目的地。为了获得可用接口的列表,DBus导出了该org.freedesktop.DBus.ListNames
方法。您可以通过运行以下命令来调用它:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames
不幸的是,这导致无法读取的输出。幸运的是,输出是有效的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()))'
我通常不这样做,但是这是保持袖子的好方法。gdbus
在转向代码之前,我会先进行内省和证明概念。bash补全可以节省很多键入内容,并且避免输入错误。gdbus
显示更好的输出会很好。
dbus-send
或列出服务下的所有对象路径gdbus
?