Raspi - DBUS - Bluez:接口“org.freedesktop.DBus.Properties”上带有签名“s”的方法“GetAll”不存在

Raspi - DBUS - Bluez:接口“org.freedesktop.DBus.Properties”上带有签名“s”的方法“GetAll”不存在

我面临以下问题:我有一个用 Go 编写的应用程序,它使用蓝牙 api。当针对 Windows 进行编译并运行时,该应用程序可以运行。当为我的树莓派编译时,应用程序失败。我在互联网上查找有关问题可能是什么的一些提示。该应用程序抛出以下错误:

Properties.GetAll org.bluez.Device1: Method "GetAll" with signature "s" on interface "org.freedesktop.DBus.Properties" doesn't exist

显然,在阅读 dbus 文档时,该方法应该存在于具有给定签名的接口上。因此,可能是 dbus 安装出了问题。

我发现发生该错误的一些实例 - 但没有一个实例描述解决方案:

为了帮助找到解决方案,我运行了 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

这表明,这不是我正在运行的应用程序的问题,而是树莓派本身的问题。另一个应用程序(用 Python 编写)能够成功创建蓝牙连接,因此我排除了硬件问题。

以下是有关我的系统的更多信息:

$ 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 连接到设备,程序必须首先扫描设备。一旦发现设备,就会创建所有必要的接口。

相关内容