确定代理的 dbus 目的地的正确方法

Correct way to determine dbus destination for a proxy

我想弄清楚,当代理的值设置为 (null destination) 时,确定 destination 应该与代理一起使用的正确方法应该是什么?

我目前正在尝试使用 rust's DBus impelementation 接收设备数据的蓝牙信号。

我收到的信号:

signal time=1641856074.929459 sender=:1.2 -> destination=(null destination) serial=152 path=/org/bluez/hci0/dev_<mac>; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.bluez.Device1"
   array [
      dict entry(
         string "ManufacturerData"
         variant             array [
               dict entry(
                  uint16 1177
                  variant                      array of bytes [
                        05 0f c0 1e ff cd 59 ff e4 ff e0 03 e4 4c 36 b0 31 46
                        c0 cb 4e 3d 3e 12
                     ]
               )
            ]
      )
   ]
   array [
   ]

我碰巧通过测试不同的东西发现代理的目的地是 org.bluez

我最终使用的代码

    let conn = Connection::new_system()?;
    {
        let proxy = conn.with_proxy(
            "org.bluez",
            "/org/bluez/hci0/dev_C0_CB_4E_3D_3E_12",
            Duration::from_millis(5000),
        );
    // --snip--

这行得通,但我不确定我应该如何正确地找到它,或者这是否是正确的方法。

查看 documentationProxy 它说第一个字段是 BusName:

    pub struct Proxy<'a, C> {
        pub destination: BusName<'a>,
        pub path: Path<'a>,
        pub timeout: Duration,
        pub connection: C,
    }

查看该字段的详细信息表明它是 D-Bus 服务。

destination: BusName<'a> 
    Destination, i e what D-Bus service you’re communicating with

查看 BlueZ documentationorg.bluez.Device1 界面,它说该服务是 org.bluez

> Service       org.bluez
> Interface     org.bluez.Device1 
> Object path   [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX

所以你是对的,上面文档的链接是你如何解决的。