我试图找到使用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
。我几乎可以肯定,找到地址然后解析该命令的文本输出会有更好的方法。
谢谢!
答案 0 :(得分:1)
为什么不使用众所周知的服务名称来找到它(如果你想跟踪当前的唯一所有者,请使用g_bus_watch_name()
来获取它。)
事实上,在bluez的情况下,我认为没有理由搜索“/ org / bluez / hci0”,因为您应该使用D-Bus ObjectManager API来查找bluez的对象/接口服务出口。
答案 1 :(得分:0)
澄清一些概念:
:1.22
类似,它唯一标识与dbus-daemon的特定连接。通常,每个应用程序都有一个与守护程序的连接,因此这通常标识单个应用程序。 (但是,如果需要,应用程序可以与总线建立多个连接;如果需要,每个连接将具有不同的唯一地址)。 众所周知的名称是服务与dbus-daemon连接的一致名称,该名称用作其唯一名称的别名。例如,org.bluez
或org.freedesktop.FileManager1
都是众所周知的名称。/org/freedesktop/SomeService/blah
类似,这实际上称为对象路径。对象路径仅在单个D-Bus连接的上下文中是唯一的,因此路径/a/b/c
通常将引用D-Bus连接:1.1
和:1.2
的不同对象。 (因此,“如何找到对象路径/a/b/c
的唯一名称?”这一问题是不正确的,因为可能有许多唯一的名称可以导出这样的对象。)