如何重置在 Linux 笔记本电脑上停止工作的蓝牙? (从待机状态恢复后)

如何重置在 Linux 笔记本电脑上停止工作的蓝牙? (从待机状态恢复后)

语境:

  • 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.

并且可以再次使用蓝牙!

其他方式?

虽然这比重新启动要好,您知道另一种“侵入性较小”的解决方案吗?

相关内容