使用 Dbus API 为 bluez 5.31 写入特征值失败,内核 4.1

Writing characteristics value using Dbus API for bluez 5.31 failed with kernel 4.1

我无法将属性值写入公开的特征 在新的 4.1 内核上通过 dbus。

在升级到内核 4.1 之前,同一个应用程序可以写入 通过 dbus 将属性值赋予特征没有任何问题。

以下是从bluetoothd收集的日志-

org.freedesktop.DBus.Error.AccessDenied: Rejected send message, 1 matched rules; type="method_call", sender=":1.24" (uid=0 pid=4112 comm="bluez-5.31/src/bluetoothd -ndE ") interface="org.bluez.GattCharacteristic1" member="WriteValue" error name="(unset)" requested_reply="0" destination=":1.25" (uid=0 pid=4114 comm="./test ")

有什么建议吗? 提前致谢。

它显示访问被拒绝,因为默认接口“org.bluez.GattCharacteristic1”在内核 4.1

中未启用

要访问任何 dbus 接口,dbus 配置文件必须允许接口名称,否则将显示拒绝访问。

我们可以在 /etc/dbus-1/system.d/bluetooth.conf 找到蓝牙的 dbus 配置文件,如下所示:

<policy user="root">
    <allow own="org.bluez"/>
    <allow send_destination="org.bluez"/>
    <allow send_interface="org.bluez.Agent1"/>
    ... ... ... ...
  </policy>

接口org.bluez.GattCharacteristic1的权限需要添加如下策略:

   <policy user="root">
     <allow own="org.bluez"/>
     <allow send_destination="org.bluez"/>
     <allow send_interface="org.bluez.Agent1"/>
     ... ... ... ...
     <allow send_interface="org.bluez.GattCharacteristic1"/>
     <allow send_interface="org.bluez.GattDescriptor1"/>
     <allow send_interface="org.freedesktop.DBus.ObjectManager"/>
     ... ... ... ...
  </policy>

就我而言,它解决了问题