使用 Dbus API for bluez 5.31 写入特征值在内核 4.1 中失败

Posted

技术标签:

【中文标题】使用 Dbus API for bluez 5.31 写入特征值在内核 4.1 中失败【英文标题】:Writing characteristics value using Dbus API for bluez 5.31 failed with kernel 4.1 【发布时间】:2015-12-19 06:02:00 【问题描述】:

我无法将价值归因于所暴露的特征 通过新 4.1 内核上的 dbus。

在升级到内核 4.1 之前,相同的应用程序可以编写 通过 dbus 将属性值分配给特性,没有任何问题。

以下是从bluetoothd收集的日志-

org.freedesktop.DBus.Error.AccessDenied:拒绝发送消息,1 匹配规则; type="method_call", sender=":1.24" (uid=0 pid=4112 comm="bluez-5.31/src/bluetoothd -ndE") interface="org.bluez.GattCharacteristic1" member="WriteValue" 错误 name="(unset)" requested_reply="0" destination=":1.25" (uid=0 pid=4114 comm="./test")

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

【问题讨论】:

【参考方案1】:

显示访问被拒绝,因为默认情况下,内核 4.1 中未启用接口“org.bluez.GattCharacteristic1

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

我们可以在 /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>

就我而言,它解决了问题

【讨论】:

以上是关于使用 Dbus API for bluez 5.31 写入特征值在内核 4.1 中失败的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Bluez Profile1 DBus API 注册连接回调

Bluez DBUS api NewConnection 方法给出了错误的文件描述符

如何在 C++ 中使用 Bluez5 DBUS API 来配对和连接新设备?

通过 Bluez DBus API 的设备连接/断开通知

BlueZ DBUS API - GATT 接口对 BLE 设备不可用

主动 BLE 扫描 (BlueZ) - DBus 问题