可用 D-Bus 服务列表

可用 D-Bus 服务列表

是否有可用 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 消息:

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

答案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

相关内容