蓝牙的Python代码在我必须重置适配器后抛出错误

蓝牙的Python代码在我必须重置适配器后抛出错误,python,bluetooth,bluez,pybluez,Python,Bluetooth,Bluez,Pybluez,我在用python尝试蓝牙编程。直到昨天,天气一直很好。今天早上,停电了,由于某种原因,蓝牙模块被禁用,无法打开。所以,我做了一个sudo hciconfig hci0重置,然后打开了它。从那时起,最简单的程序都无法执行。比如说。它在bluetooth模块中的advertise\u service处卡住,并抛出以下错误(仅供参考:virtualenv在这里不是问题。系统范围的python也做同样的事情) 但所有这些在那台机器中都像一个符咒一样起作用;事实上,在我写这篇文章的时候,所有的程序都和我

我在用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
,请遵循以下步骤:

  • 先停止蓝牙

    $/etc/init.d/bluetooth停止

  • 状态检查

    $/etc/init.d/bluetooth状态

  • 在兼容模式下运行蓝牙(不要忘记带符号,否则不会出现提示)

    $/usr/libexec/bluetooth/bluetooth-compat&

  • 再次启动蓝牙

    $/etc/init.d/bluetooth start

  • 再次尝试sdpbrowse

    $sdptool浏览本地

  • 现在一切都会好起来的。

    要修复:

    bluetooth.btcommon.bluetooth错误:(2,“没有这样的文件或目录”)

    您需要:

  • 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