Linux BlueZ dbus 通信

Posted

技术标签:

【中文标题】Linux BlueZ dbus 通信【英文标题】:Linux BlueZ dbus communication 【发布时间】:2015-10-01 13:17:17 【问题描述】:

我使用 BlueZ 5.30 和内核 3.13.0-32,我需要通过 DBus 在我的应用程序中实现读/写特征功能。

我正在使用 BlueZ 测试脚本来建立连接:

“测试发现”,然后是“测试设备连接”。

问题是我没有看到 DBus (org.bluez) 中显示任何服务。使用 d-feet 应用程序我只能看到:

"/org/bluez/hci0/dev_btaddr" 接口 org.bluez.Device1 org.freedesktop/DBus.Introspectable org.freedesktop.DBus.Properties

在“/var/log/syslog”中我可以看到很多:

" bluetoothd[715]: 无法使用句柄 0x0045 为设备注册 GATT 服务..."

使用 gatttool 我能够读取/写入特征、原色等。在 hcidump 下,我看到所有特征都被正确读取。

但是,从 DBus PoV 中,只有 Device1 接口可用。

这是我的 BlueZ 配置: " ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-library --disable-systemd --enable-experimental --enable-维护者模式——启用调试 "

我在看这里:“http://i-miss-erin.blogspot.com/2010/12/gatt-related-dbus-api.html”,但正如我所提到的,这里没有显示任何界面或服务。

为了测试,我使用接近和隐藏设备。 在隐藏的情况下,正确连接后,我可以在终端窗口(隐藏键盘设备)中看到字符,因此我认为它可以正常工作。

有什么建议吗?

【问题讨论】:

我已经解决了我的问题。问题是由于没有“-E”的蓝牙运行导致BlueZ的实验部分 您是如何最终将 -E 添加到启动中的?我一直在尝试将它添加到 /etc/init.d/bluetooth 中的守护进程,但这似乎没有奏效。你在哪里添加的? 【参考方案1】:

您必须为您的蓝牙设备激活实验性功能才能启用 GATT 服务。

在 Debian 系统上,您可以通过将

NOPLUGIN_OPTION="-E"

进入/etc/default/bluetooth 文件。

重启后,为了让我的设备(Logitech MX Master)在我的 Debian Stretch 上正常工作,我还必须使用 bluetoothctl 命令手动配对和信任它。我使用 Gnome 的图形蓝牙工具没有成功。

【讨论】:

对于较新的基于 Systemd 的系统,将 /lib/systemd/system/bluetooth.service 复制到 /etc/systemd/system/bluetooth.service 并将 ExecStart 行更改为 ExecStart=/usr/lib/bluetooth/bluetoothd -E

以上是关于Linux BlueZ dbus 通信的主要内容,如果未能解决你的问题,请参考以下文章

通过 bluez 浏览文件

Android 到 Linux 蓝牙未找到所有 UUID

如何使用 bluez 在 linux 上实现 HFP?

BlueZ D-Bus C,应用程序BLE

linux 进程间通信 dbus-glib实例详解四(下) C库 dbus-glib 使用(附代码)

Linux DBus 通信