语境:
- Linux 内核 5.10.x(还有 5.18.x)
- Thinkpad X1c (gen7) 笔记本电脑
问题:
有时,当我将系统设置为睡眠状态(挂起到 RAM)然后恢复时,找不到蓝牙适配器了。如果我重新启动,它会再次工作。
当它起作用时,
这是(内部)蓝牙适配器,如下所示lsusb
:
# lsusb | grep 8087
Bus 001 Device 006: ID 8087:0aaa Intel Corp. Bluetooth 9460/9560 Jefferson Peak (JfP)
我能够扫描、连接和使用我的蓝牙设备。
当它不起作用时:
- 通常在计算机电源暂停/恢复后(不是系统地),
lsusb
不再显示上述设备,- 我无法扫描、连接甚至查看我的蓝牙适配器。
并kern.log
说:
usb usb1-port10: Cannot enable. Maybe the USB cable is bad?
usb usb1-port10: Cannot enable. Maybe the USB cable is bad?
usb usb1-port10: attempt power cycle
usb 1-10: new low-speed USB device number 71 using xhci_hcd
usb 1-10: Device not responding to setup address.
usb 1-10: Device not responding to setup address.
usb 1-10: device not accepting address 71, error -71
usb 1-10: new low-speed USB device number 72 using xhci_hcd
usb 1-10: Device not responding to setup address.
usb 1-10: Device not responding to setup address.
usb 1-10: device not accepting address 72, error -71
usb usb1-port10: unable to enumerate USB device
端口 10 是连接到蓝牙适配器的端口。
我已经尝试过的(不起作用):
systemctl restart bluetooth.service
,modprobe -r btusb && modprobe btusb
,bluetoothctl power on
: 说No default controller available
,rfkill unblock bluetooth
,即使它显示蓝牙设备并接受命令。
我的问题
如何在不重新启动整个计算机的情况下使蓝牙再次正常工作?
答案1
可能有点矫枉过正,但确实有效:
- 重置整个USB“总线”蓝牙适配器是硬连线到的。
解决方案(请参阅下面的警告)
获取总线1“root hub”的PCI ID(不知道为什么会报错):
# lsusb -v -s1:1 | grep iSerial
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
iSerial 1 0000:00:14.0
并用它来解绑(将断开所有相关的 USB 设备)并重新绑定, 作为根 ( su
, sudo -i
, sudo bash -c "..."
):
echo -n '0000:00:14.0' >| /sys/bus/pci/drivers/xhci_hcd/unbind && \
sleep 3 && \
echo -n '0000:00:14.0' >| /sys/bus/pci/drivers/xhci_hcd/bind
谨防,我的所有(内部和外部)USB 设备都连接到此集线器:外部鼠标、外部键盘、内部网络摄像头、内部指纹传感器...全部将(暂时)断开连接正在进行中。
结果
之后kern.log
说:
usb 1-10: new full-speed USB device number 6 using xhci_hcd
usb 1-10: New USB device found, idVendor=8087, idProduct=0aaa, bcdDevice= 0.02
usb 1-10: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[...]
Bluetooth: hci0: Bootloader revision 0.1 build 42 week 52 2015
[...]
Bluetooth: hci0: Firmware loaded in 1643271 usecs
Bluetooth: hci0: Waiting for device to boot
Bluetooth: hci0: Device booted in 13788 usecs
和lsusb | grep 8087
:
Bus 001 Device 006: ID 8087:0aaa Intel Corp.
并且可以再次使用蓝牙!
其他方式?
虽然这比重新启动要好,您知道另一种“侵入性较小”的解决方案吗?