次の問題に直面しました。 Bluetooth APIを使用するGoで書かれたアプリケーションがあります。アプリケーションは、Windows用にコンパイルされ、実行されると機能します。私のRaspberry Pi用にコンパイルすると、アプリケーションは失敗します。問題が何であるかについてのヒントを得るためにインターネットを検索しました。アプリケーションで次のエラーが発生します。
Properties.GetAll org.bluez.Device1: Method "GetAll" with signature "s" on interface "org.freedesktop.DBus.Properties" doesn't exist
明らかにdbus文書を読み取るとき、メソッドは指定された署名を持つインターフェイスに存在する必要があります。そのため、dbusのインストールに問題がある可能性があります。
このエラーが発生したいくつかのケースが見つかりましたが、解決策が記載されているケースはありません。
- https://github.com/blueman-project/blueman/issues/460
- https://www.linuxquestions.org/questions/slackware-14/pc-config-for-bluetooth-not-able-to-dl-anything-4175656862/
解決策を見つけるのを助けるために、linuxquestionsフォーラムで提供されているコマンドを実行しました。
$ dbus-send --system --dest=org.bluez --type=method_call --print-reply /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx org.freedesktop.DBus.Properties.GetAll string:org.bluez.Device1
Error org.freedesktop.DBus.Error.UnknownObject: Method "GetAll" with signature "s" on interface "org.freedesktop.DBus.Properties" doesn't exist
これは、私が実行しているアプリケーションの問題ではなく、Raspberry Pi自体の問題であることを示しています。 Pythonで書かれた他のアプリケーションがBluetooth接続を正常に作成できたため、ハードウェアの問題は除外されました。
私のシステムに関する追加情報は次のとおりです。
$ rfkill
ID TYPE DEVICE SOFT HARD
0 wlan phy0 blocked unblocked
1 bluetooth hci0 unblocked unblocked
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
$ apt -qq list bluez
bluez/oldstable,now 5.55-3.1+rpt2+deb11u1 armhf [installed,automatically]
インストールに問題がありますか?どうすれば解決できますか?
答え1
リクエストに誤ったオブジェクトパスが定義されているようです。 bluezサービスのすべてのオブジェクトを取得し、/org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx
実際に存在することを確認するには、次のコードスニペットを使用することをお勧めします。
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
答え2
見つかった問題:Windowsでは必要ありませんが、bluez実装はBTデバイスを検出した後にのみdbusパスを生成します。
bluezを使用してデバイスに接続するには、プログラムが最初にデバイスを検索する必要があります。デバイスが検出されると、必要なすべてのインターフェイスが作成されます。