尝试在 Jetson Nano 中启动 GATT 服务器时出现访问被拒绝错误

尝试在 Jetson Nano 中启动 GATT 服务器时出现访问被拒绝错误

我正在使用以下命令编写 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"/>
  ...

相关内容