我不得不重置适配器后,蓝牙的Python代码抛出错误

Sid*_*ter 10 python bluetooth bluez pybluez

我在python中尝试蓝牙编程.它一直工作到昨天.今天早上有停电,由于某种原因,蓝牙模块被禁用,无法打开.所以,我做了一个sudo hciconfig hci0 reset,然后打开它.从那时起,最简单的程序无法执行.就拿这一次的例子.它卡在advertise_servicebluetooth模块中并抛出以下错误(仅供参考:virtualenv在这里不是问题.系统范围的python也做同样的事情).

Traceback (most recent call last):
  File "bt.py", line 17, in <module>
    advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
  File "/home/machinename/.virtualenvs/py27/local/lib/python2.7/site-packages/bluetooth/bluez.py", line 242, in advertise_service
    raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')
Run Code Online (Sandbox Code Playgroud)

有时在编译和重新安装Bluez驱动程序时出现了不同的错误:

Traceback (most recent call last):
  File "build/bdist.linux-x86_64/egg/bluetooth/bluez.py", line 268, in advertise_service
  bluetooth.btcommon.BluetoothError: error no advertisable device.
Run Code Online (Sandbox Code Playgroud)

但所有这些在这台机器之前就像一个魅力; 事实上,当我写这篇文章的时候,所有的程序都可以和我的其他ubuntu(14.04LTS)机器一起工作.我检查了源代码,并追溯到一个_bluetooth.so文件 - 这是一个编译的代码,因此我无法弄清楚该做什么.

任何指针都将受到高度赞赏.

Sid*_*ter 20

此错误是由于BlueZ 5和SDP的不兼容问题引起的 bluetoothd

修复了15.10和BlueZ 5

确保运行时出现sdptool browse local以下错误:

Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
Run Code Online (Sandbox Code Playgroud)

事实证明,罪魁祸首是bluetoothd蓝牙守护进程.bluetoothd由于某些愚蠢的原因,使用SDP 需要弃用功能,因此要解决此问题,必须在兼容模式下使用bluetoothd -C(或bluetooth --compat)启动守护程序.

查找位置bluetooth.service:

systemctl status bluetooth.service
Run Code Online (Sandbox Code Playgroud)

然后编辑bluetooth.service并查找

ExecStart=/usr/libexec/bluetooth/bluetoothd
Run Code Online (Sandbox Code Playgroud)

追加--compat到此行的末尾,保存,然后运行

service bluetooth start
Run Code Online (Sandbox Code Playgroud)

如果一切顺利,您应该能够成功运行

sudo sdptool browse local
Run Code Online (Sandbox Code Playgroud)

最后,重置适配器:

sudo hciconfig -a hci0 reset
Run Code Online (Sandbox Code Playgroud)

事情应该现在正常

老答案

只是为了让人们知道,我相信最新的BlueZ版本在我的系统中被破坏了.我下载,编译并安装了5.35版本,但没有任何工作.我拨打了5.34,仍然一样.我还注意到蓝牙适配器在启用它后3-4分钟自动关闭,

sudo hciconfig hci0 up # hci0 is the bt adapter
Run Code Online (Sandbox Code Playgroud)

我用一个USB蓝牙加密狗测试.它没有像内置适配器那样自动下降,但问题仍然存在.然后我apt-get以前重新安装bluez,

apt-get install --reinstall bluez
Run Code Online (Sandbox Code Playgroud)

突然间,一切都恢复了正常.