我正在使用以下命令编写 GATT 服务器应用程序本文作为基础。我的初始代码在我的 Linux 笔记本电脑上运行良好,但在我的 Jetson Nano(运行 nVIDIA 调整版本的 Ubuntu 18.04)上失败,并org.freedesktop.DBus.Error.AccessDenied
在尝试bluetoothd
通过界面访问守护程序时出现错误org.freedesktop.DBus.Introspectable
。
这显然是某种权限错误,因为代码在 Nano 上运行时运行良好root
,但如果在非root
用户下执行则失败。我知道非root
用户应该是该bluetooth
组的成员才能访问蓝牙 API,但对于我的用户来说已经是这种情况,所以这不是问题。
答案1
似乎由于某些不明原因,有必要org.freedesktop.DBus.Introspectable
在配置文件中添加对接口的显式访问权限/etc/dbus-1/system.d/bluetooth.conf
,以便通过 Jetson Nano 中的 D-Bus 以编程方式访问蓝牙接口。这很可能是 nVIDIA 定制 Ubuntu 环境的副作用。请参阅下面的代码片段以供参考:
<policy user="root">
<allow own="org.bluez"/>
<allow send_destination="org.bluez"/>
<allow send_interface="org.bluez.Agent1"/>
<allow send_interface="org.bluez.MediaEndpoint1"/>
<allow send_interface="org.bluez.MediaPlayer1"/>
<allow send_interface="org.bluez.Profile1"/>
<allow send_interface="org.bluez.GattCharacteristic1"/>
<allow send_interface="org.bluez.GattDescriptor1"/>
<allow send_interface="org.bluez.LEAdvertisement1"/>
<allow send_interface="org.freedesktop.DBus.Introspectable"/> <!-- Added this -->
<allow send_interface="org.freedesktop.DBus.ObjectManager"/>
...