次のコマンドを使用してGATTサーバーアプリケーションを作成しています。この記事基本的に。私の初期コードはLinuxラップトップでうまく動作しますが、Jetson Nano(nVIDIAチューニングバージョンのUbuntu 18.04を実行)では、インターフェイスを介してデーモンにアクセスしようとするとorg.freedesktop.DBus.Error.AccessDenied
エラーが発生し、失敗します。bluetoothd
org.freedesktop.DBus.Introspectable
これは明らかにある種の権限エラーです。 Nanoで実行するとコードは正常に実行されますが、root
ユーザーroot
ではなくユーザーで実行すると失敗するためです。 Bluetooth APIにアクセスするには、非root
ユーザーがこのグループのメンバーである必要があることを知っていますが、bluetooth
これはすでに私のユーザーのためであり、問題ではありません。
答え1
不明な理由から、Jetson NanoのD-Bus経由でBluetoothインターフェイスにプログラムでアクセスするには、設定ファイルorg.freedesktop.DBus.Introspectable
のインターフェイスへの明示的なアクセスを追加する必要があるようです。/etc/dbus-1/system.d/bluetooth.conf
これは、Ubuntu環境をカスタマイズするnVIDIAの副作用である可能性が高いです。参照するには、以下のコードスニペットを参照してください。
<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"/>
...