可用的DBus服务列表


65

是否有可用的DBus服务列表之类的东西?
我偶然发现了一些(如NetworkManager,Rhythmbox,Skype,HAL提供的那些)。
我想知道是否可以找到提供的服务/接口的完整列表。

Answers:


85

会议:

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


1
@ don-crissti如何使用dbus-send或列出服务下的所有对象路径gdbus
库尔希德·阿拉姆

1
@KhurshidAlam-我在这里添加了答案。
don_crissti

30

qdbusviewer是你最好的朋友; 它也允许您发送D-bus消息:

qdbusviewer显示带有三个子面板的“会话总线”选项卡


好像断为2014年它列出了服务,但无法发送消息..
Pithikos

5
我什至无法在Ubuntu 14.04上启动它。它失败了:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd 2014年

3
@Pithikos d-feet截止到今天。
sherrellbc

@sherrellbc请考虑添加d-feet答案以使其更加可见
mivk

27

python方式是美丽的方式。

系统服务:

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

会议服务:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)

已投票。我问了您一个答案的后续问题。unix.stackexchange.com/questions/203410/...
user768421

我有一个问题,在Plasma 5桌面环境中,服务org.kde.Spectacle用于获取屏幕截图(并且正在运行),但是它既不在系统总线中也不在会话总线中列出,为什么呢?
喵2016年

为了帮助那些可能正在寻找的人:至少对于python 2.7.13和3.6,此程序所需的软件包是dbus-python,可通过安装pip install dbus-python。python-dbus软件包也可用(在尝试的2分钟内我无法上班)。
bschlueter '17

6

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显示更好的输出会很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.