Linux 中的蓝牙是一团糟。经过几个小时的尝试让蓝牙甚至打开后,我发现将其添加到 grub 中可以解决问题,现在它至少可以打开,尽管不与任何设备配对。
我去重新配置了我的 GRUB 旧版/etc/default/grub
并添加了
GRUB_CMDLINE_LINUX_DEFAULT=btusb.enable_autosuspend=n
但有人能告诉我这实际上做了什么以及为什么有效吗?
我的猜测是它告诉蓝牙不要自动挂起,但是为什么蓝牙在打开我的拱门设备时首先会这样做呢?
我在配备 Intel centrum 1000 N 的 Dell 上使用 Arch linux
答案1
首先,我们来看看您真正拥有的是哪种蓝牙适配器。考虑到 Intel Centrino WirelessN 1000 适配器的网络规格它不支持蓝牙这是一个PCIe 半迷你卡,并且上面引用的 btusb 参数正在影响您的设置,您应该查看输出以lsusb -tv
查找您的戴尔中安装了哪个 USB 蓝牙适配器。您应该确认您没有使用任何假冒的 Barrot 8041A02 克隆,已知无论如何btusb.enable_autosuspend
设置,都存在各种暂停和恢复问题。
在最新的稳定内核(撰写本文时为 v5.12)中,btusb.enable_autosuspend
布尔内核参数会影响是否usb_enable_autosuspend
会被调用探测 btusb 设备时。
如记录在USB 电源管理内核文档:
驱动程序可以通过调用以下命令为其设备启用自动挂起:
usb_enable_autosuspend(struct usb_device *udev);
在他们的
probe()
如果他们知道设备能够正确挂起和恢复,则可以执行例程。这与写入auto
设备的属性完全相同power/control
。同样,驱动程序可以通过调用禁用自动挂起:usb_disable_autosuspend(struct usb_device *udev);
on
这与写入属性完全相同power/control
。有时驱动程序需要确保在自动挂起期间启用远程唤醒。例如,如果用户无法通过在键盘上打字来使键盘进行远程唤醒,那么自动挂起键盘就没有多大意义。如果驱动程序设置
intf->needs_remote_wakeup
为 1,则如果远程唤醒不可用,内核将不会自动挂起设备。 (但是,如果设备已经自动挂起,设置此标志不会导致内核自动恢复它。通常驱动程序会在其探测方法中设置此标志,此时保证设备不会自动挂起。)
如果没有有关您的戴尔的更多详细信息,并且鉴于上述文档,我只能假设:
- 您有一个 USB 蓝牙设备,其开机时间足够长,可以被发现,但在您完成与另一台设备的配对过程之前已自动挂起。
- 您已成功配对,但您的适配器已进入睡眠状态,并且您的 HID 键盘/鼠标无法再次唤醒它。
您应该grep . /sys/bus/usb/devices/*/power/wakeup
对照 的输出检查 的输出,lsusb -tv
以确认该输出/sys/bus/usb/devices/${Bus}-${Port}/power/wakeup
适用enabled
于您的蓝牙适配器。您可以使用以下命令在所有 USB 设备上启用唤醒功能,以便进行测试,而无需调整内核启动参数并重新启动:
echo enabled | sudo tee -a /sys/bus/usb/devices/*/power/wakeup