使用 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 来配对和连接新设备?