【发布时间】:2017-12-20 03:22:37
【问题描述】:
我正在尝试找出使用 Linux 上的 GDBus 库获取 D-Bus 系统总线中对象的唯一 D-Bus 地址的最佳方法。
以下是我正在使用的库的版本号:
# ls /usr/lib |grep -e dbus -e glib -e gio
libdbus-1.so
libdbus-1.so.3
libdbus-1.so.3.14.11
libdbus-glib-1.so
libdbus-glib-1.so.2
libdbus-glib-1.so.2.3.3
libgio-2.0.so
libgio-2.0.so.0
libgio-2.0.so.0.5000.3
libglib-2.0.so
libglib-2.0.so.0
libglib-2.0.so.0.5000.3
基本上,我想知道使用 gdbus 库位于系统总线上的对象 /org/bluez/hci0 的唯一名称/地址。有没有人有我将如何使用 C 库做到这一点的例子?
现在我可以使用命令了
# dbus-monitor --system
找出我需要的地址是:1.22。我几乎可以肯定有更好的方法来查找地址然后解析该命令的文本输出。
谢谢!
【问题讨论】:
-
为什么不使用服务的知名名称(如果您想跟踪当前唯一所有者,请使用 g_bus_watch_name() 获取它)。事实上,我认为没有理由找到“/org/bluez/hci0”,因为您应该使用 D-Bus ObjectManager API 来查找 bluez 导出的对象/接口
-
@jku 这是正确答案。如果我看这里git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/… 我可以看到众所周知的名称(服务名称)。由于这是我第一次使用 DBus,我没有意识到服务名称和众所周知的名称是一回事。在下方发表您的评论,我会将其标记为答案。