2015-07-13 122 views
3

我使用BlueZ 5.30和內核3.13.0-32,我需要通過DBus在我的應用程序中實現讀/寫特性功能。Linux BlueZ dbus通信

我使用的BlueZ測試腳本來建立連接:

「測試發現」,然後在「測試設備連接」。

問題是我沒有看到DBus(org.bluez)中顯示的任何服務。使用d英尺的應用程序,我只能看到:

「/組織/ bluez的/ hci0/dev_btaddr」 接口 org.bluez.Device1 org.freedesktop/DBus.Introspectable org.freedesktop.DBus.Properties

和 「在/ var/log/syslog的」 我可以看到很多的:

「bluetoothd [715]:無法註冊與手柄0x0045用於設備GATT服務......」 使用gatttool我

能讀/寫特徵,初選等在hcidump我看到al l的特性被正確讀取。

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

這裏是我的配置的BlueZ: 「 的./configure --prefix =/USR --mandir =的/ usr/share/man的--sysconfdir = /等--localstatedir =/VAR --enable-庫 - -disable-systemd --enable-實驗--enable-維護模式--enable-調試 「

我一直在尋找在這裏:」 http://i-miss-erin.blogspot.com/2010/12/gatt-related-dbus-api.html「,但正如我所說,沒有哪個是任何接口或服務顯示在這裏。

對於測試,我使用接近和隱藏設備。 在隱藏的情況下,正確的連接後,我可以看到終端窗口中的字符(隱藏鍵盤設備),所以我認爲它可以正常工作。

有什麼建議嗎?

+1

我解決了我的問題。這個問題是由bluetoothd在沒有「-E」的情況下運行造成的,它使BlueZ的實驗部分成爲可能。 –

+0

你是如何在啓動過程中添加-E的?我一直試圖將它添加到/etc/init.d/bluetooth中的守護進程中,但似乎並沒有辦法。你在哪裏添加它? – Brook

回答

2

您必須激活藍牙設置的實驗功能才能啓用GATT服務。

在Debian系統中,你可以做到這一點通過把

NOPLUGIN_OPTION="-E"

/etc/default/bluetooth文件。

重新啓動後,爲了讓我的設備(Logitech MX Master)在我的Debian Stretch上正常工作,我還必須使用bluetoothctl命令手動配對並信任它。 Gnome的圖形藍牙工具沒有成功。

+0

使用較新的基於System的系統,請將'/ lib/systemd/system/bluetooth.service'複製到'/ etc/systemd/system/bluetooth。服務「,並將ExecStart行更改爲ExecStart =/usr/lib/bluetooth/bluetoothd -E。 –