蓝牙的Python代码在我必须重置适配器后抛出错误
我在用python尝试蓝牙编程。直到昨天,天气一直很好。今天早上,停电了,由于某种原因,蓝牙模块被禁用,无法打开。所以,我做了一个蓝牙的Python代码在我必须重置适配器后抛出错误,python,bluetooth,bluez,pybluez,Python,Bluetooth,Bluez,Pybluez,我在用python尝试蓝牙编程。直到昨天,天气一直很好。今天早上,停电了,由于某种原因,蓝牙模块被禁用,无法打开。所以,我做了一个sudo hciconfig hci0重置,然后打开了它。从那时起,最简单的程序都无法执行。比如说。它在bluetooth模块中的advertise\u service处卡住,并抛出以下错误(仅供参考:virtualenv在这里不是问题。系统范围的python也做同样的事情) 但所有这些在那台机器中都像一个符咒一样起作用;事实上,在我写这篇文章的时候,所有的程序都和我
sudo hciconfig hci0重置
,然后打开了它。从那时起,最简单的程序都无法执行。比如说。它在bluetooth
模块中的advertise\u service
处卡住,并抛出以下错误(仅供参考:virtualenv在这里不是问题。系统范围的python也做同样的事情)
但所有这些在那台机器中都像一个符咒一样起作用;事实上,在我写这篇文章的时候,所有的程序都和我的另一台ubuntu(14.04LTS)机器配合得很好。我检查了源代码,找到了一个\u bluetooth.so
文件,这是一个编译后的代码,因此我无法再做什么
非常感谢任何指针。此错误是由于BlueZ 5和SDP与Bluetooth D的不兼容问题造成的。 修正15.10和Bluez5 确保运行
sdptool browse local
时出现以下错误:
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
事实证明,罪魁祸首是蓝牙守护进程bluetoothd
。由于某些愚蠢的原因,将SDP与bluetoothd
一起使用需要不推荐的功能,因此要解决此问题,必须在与bluetoothd-C
(或bluetooth--compat
)兼容的模式下启动守护程序
通过以下方式查找蓝牙服务的位置:
systemctl status bluetooth.service
然后编辑bluetooth.service
并查找
ExecStart=/usr/libexec/bluetooth/bluetoothd
在此行末尾追加--compat
,保存,然后运行
service bluetooth start
如果一切顺利,您应该能够成功运行
sudo sdptool browse local
最后,重置适配器:
sudo hciconfig -a hci0 reset
现在一切都会好起来的
旧答案
只是想让人们知道,我相信最新的版本不知何故在我的系统中被破坏了。我下载、编译并安装了这个版本,但什么都没用。我拨到了,还是一样。我还注意到蓝牙适配器在启用3-4分钟后会自动关闭
sudo hciconfig hci0 up # hci0 is the bt adapter
我用一个usb蓝牙加密狗来测试。它不像内置适配器那样自动关闭,但问题仍然存在。然后我使用apt get
重新安装bluez
apt-get install --reinstall bluez
突然间,一切都恢复了正常。正如西德迈斯特所提到的, 确保运行sdptool browse local时出现以下错误:
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
无法连接到FF:FF:FF:00:00:
上的SDP服务器没有此类文件或目录
但是,对于那些使用initd系统管理器的用户来说,如果您想要执行sdp\u rfcomm\u服务器/客户机
模型,并且终端将一次又一次地显示相同的错误,则很难找到解决方案。
因此,对于init.d
,请遵循以下步骤:
sudo nano/lib/systemd/system/bluetooth.service
ExecStart=/usr/lib/bluetooth/bluetooth
ExecStart=/usr/lib/bluetooth/bluetooth-compat
sudo systemctl后台程序重新加载
我跟踪了第二个错误的根源,以确定标准的
hci
命令行工具是否仍然有效?像hcitool扫描
?是的,标准的hci
命令工作正常。只有从模块调用的函数抛出错误。如果我的代码没有引用那个模块,一切都正常。啊,这就解释了。pybluez尚未移植到bluez5。bluez4和bluez5之间的API发生了重大变化。我想你会发现你的apt get安装了bluez4。这个链接为我工作了6个小时,试图让它工作,你的解决方案发挥了神奇的作用。谢谢!
apt-get install --reinstall bluez