hcitool lescan显示I/O错误

55
我正在尝试在树莓派上使用hcitool进行lescan。
该命令会打印输出。
Set scan parameters failed: Input/output error. 

我不确定这里具体发生了什么。我的iPhone正在这里广告。

我正在使用IOGear的BLE dongle。

然而,如果我重新启动我的设备,在我发出lescan命令后,它会显示一个MAC地址,并在我发出多个lescan命令后开始显示相同的错误。是不是说,lescan命令不能多次执行?


尝试拔下它并重新插入。有各种方式可以使dongle进入不响应您想要的方式的状态。IOGear似乎是最好的选择。 - Tim Tisdall
@aauser - 我应该提到我正在使用64位Linux Mint 16(Petra)上的D-Link DBT-120。 - Duncan Bayne
1
似乎BlueZ的BLE扫描仍然存在一些错误。不过,这个帖子可能会有所帮助:https://redbearlab.zendesk.com/entries/23561363-BLE-Shield-with-USB-Dongle-and-Python- - David H. Bennett
1
另外,请问您的内核和BlueZ版本是什么?该线程的末尾提到了内核3.5或更高版本。http://www.linkedin.com/groups/Anyone-able-get-BTLE-completely-4232349.S.5806578412524969986 - David H. Bennett
@DavidH.Bennett:内核3.8,最新的BlueZ源代码构建。我认为问题可能是我的设备...我要买一个Plugable dongle看看是否可以解决它。当然,首先我必须在美国设置一个drop shipping账户,因为他们不运送到澳大利亚。解决这个问题需要花费很多时间。 - Duncan Bayne
显示剩余3条评论
11个回答

63

这种情况经常发生。我一直在使用它进行开发,有时会发生这种错误。我也能够在5分钟内重现您的错误;-) 我正在运行bluez v.5.17。但是我可以多次运行lescan而不出现此错误。

hcitool lescan
Set scan parameters failed: Input/output error
尝试:
hciconfig hci0 down
hciconfig hci0 up

然后检查状态。

如果这不起作用或者它保持DOWN状态,请尝试:

service bluetooth restart
service dbus restart

(所有命令都需要超级用户权限)

关闭可能访问蓝牙的所有应用程序。例如 hcidump。

如果这不起作用,通常必须拔掉它。但是还有另一种“肮脏”的方法可以做到这一点。它通过将授权设置为 0,然后再次设置为 1 来实现。这将强制初始化 USB 适配器。

lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0a5c:21e8 Broadcom Corp. 


cd /sys/bus/usb/devices/

grep -i -s -r 0a5c *
…
1-1.2/idVendor:0a5c
…

cd 1-1.2

echo 0 > authorized
echo 1 > authorized

12
还有一个命令是sudo hciconfig hci0 reset - Roger Dahl
在当前版本的bluez 5.35中,我不再遇到任何问题了。 - Rob Anderson
4
对我来说,hciconfig hci0 down 然后 up 对我有用,谢谢。 - Kerem
6
"service dbus restart" 崩溃了。需要重启 Kali 系统。 - Pedro Lobito
@PedroLobito,你知道有什么替代方法吗?执行 service dbus restart 也会导致我的Kali虚拟机崩溃。 - MmBaguette
@PedroLobito 服务 dbus 重启导致 Ubuntu 22 崩溃了。 - undefined

9

升级到 bluez v5.43 可以解决这个问题。

要升级到最新的 bluez,您需要进行“手动”安装(不是 apt-get),从bluez网站下载。如果您是第一次安装软件包或需要帮助,我建议您观看这个视频教程

在安装了最新的 bluez 之后,我需要运行几个命令才能使其正常工作。

  1. systemctl daemon-reload:重新启动系统守护程序。

  2. sudo service bluetooth restart:重新启动蓝牙服务。

  3. sudo hciconfig hci0 up:对于我的 Raspberry Pi 3,内置的 BT 位于 hci0

在执行这些命令之后,sudo hcitool lescan 及其变体似乎都可以正常工作。


8
对于使用 Bluetooth 5.x 设备并遇到相同错误的用户, sudo hcitool lescan 会对 Bluetooth 5.x LE 设备抛出 Set scan parameters failed: Input/output error. 的错误,因为 hcitool 已被弃用。
如果您想使用新的 Bluetooth 5.x 设备进行蓝牙低功耗(LE)扫描,请尝试改用 bluetoothctl
bluetoothctl scan le

正如其他人提到的那样,确保你拥有最新版本的bluez也很重要。如果你的蓝牙设备特别新,更新版本的linux-firmware或Linux内核也可能有所帮助。


6

1
问题是关于BLE扫描的。scan on不会启动BLE扫描。 - jbg
1
@jbg在Debian 9 + Nordic BLE芯片上使用bluetoothctl扫描功能正常。如果不行,我就不会发帖了。 - Jason Stewart

4

sudo service bluetooth restart 在 Raspibian Buster 上帮助我解决了问题。

在使用sudo hcitool lescan时出现 Set scan parameters failed: Input/output error. 错误的情况下可尝试此方法。

但这个问题可能会随机再次出现,因此某些系统库可能存在问题。


在解决这个问题的过程中,我禁用了树莓派内部的蓝牙,并购买了一个带有BLE支持的USB蓝牙适配器(型号:CONNECT IT BT403)。USB蓝牙适配器工作良好,已经连续工作了几周,没有任何问题。 - Martin

2

我将Bluez卸载后重新安装,这样可以解决问题:

sudo apt remove --purge bluez bluez-* -y


apt install bluez

然后

hcitool lescan 

那应该就够了。


2

如果你正在阅读这个问题,现在已经解决了,从Bluez v5.41版本开始已经修复。你只需要下载和安装即可。你可以从http://www.bluez.org/download/下载最新版本。


0

有可能HCI当前正在使用。在我的情况下,我必须停止Node-Red才能使其正常工作。因此,请注意HCI未被使用。

重新启动HCI是一种暂时解决问题的方法,但并不能完全解决问题。


0

我正在使用版本5.53 我有两个蓝牙设备(hic0和hic1) 我尝试了各种方法来重置这些设备... 唯一有效的方法是物理上拔出并重新插入hic1的dongle。 这是支持ble的那一个。然后它可以工作,直到我重新启动。 我真的希望有一种纯软件解决方案来解决这个问题。


-1

对我而言有效的方法是打开Ubuntu上的蓝牙设置,手动删除未使用的设备。立即开始扫描工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接