我有一台 Logitech MX Master 3,与 Ubuntu 20.04.1 LTS(内核 5.4.0-58-generic)一起使用。如果鼠标闲置一小段时间(少于 30 秒,尽管我没有精确计时),它似乎会进入低功耗状态,并且只有在移动几秒钟后才能恢复正常运行。当您让鼠标闲置一小段时间后再移动它时,这会产生非常烦人的视觉“卡顿”。
我在另一台笔记本电脑(但鼠标相同)的 Windows 10 上遇到了同样的问题。在 Windows 上,解决方法是使用设备管理器禁用允许蓝牙控制器进入睡眠状态以节省电量的设置。我现在正尝试在 Ubuntu 上做同样的事情,但到目前为止还没有成功。
从 这个reddit帖子我了解到“超时”设置/var/lib/bluetooth/{BT MAC]/{mouse MAC}/info
可能很有用。在我的系统上,它的配置如下:
[ConnectionParameters]
MinInterval=6
MaxInterval=9
Latency=44
Timeout=216
我尝试将超时设置为较大的值(10000)并设置为零。更改值后,我运行:
bluetoothctl power off
bluetoothctl power on
我没有观察到任何效果。然后我尝试更改值并运行:
sudo systemctl restart bluetooth
这会将值设置回默认值216
。在谷歌上随意搜索后,我偶然发现了此主题这似乎意味着hcitool lecup
可能能够设置值,所以我尝试:
sudo hcitool lecup --handle 3585 --timeout 0
其中 3585 是我的鼠标手柄。这只会产生Could not change connection params: Input/output error(5)
。
我并不是一名深厚的 Linux 专家,并且承认我对bluetoothctl
、蓝牙服务和之间的关系并不熟悉hcitool
。我想知道的是:
- 如何使文件更改
/var/lib/bluetooth/{BT MAC]/{mouse MAC}/info
生效,以便我可以测试不同的值? - 也许我问错了方向——有没有更简单的方法可以禁用蓝牙“睡眠”功能?
答案1
您遇到的问题与蓝牙超时无关,而更可能是内核内置的 USB 自动挂起功能。
我正在运行 Arch,并且我有一个 Mx master 3,我也遇到了与您描述的类似的问题。
以下是我修复它的方法:
- 运行命令来找出你的蓝牙模块的ID
$ lsusb -vt
Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M
ID 1d6b:0001 Linux Foundation 1.1 root hub
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
ID 8087:0a2a Intel Corp. Bluetooth wireless interface
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=btusb, 12M
ID 8087:0a2a Intel Corp. Bluetooth wireless interface
我的蓝牙模块的id是8087:0a2a
- 创建一个 udev 规则来禁用模块的自动挂起。
编辑/创建以下文件 /etc/udev/rules.d/50-usb_power_save.rules
并添加此行
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="8087", ATTR{idProduct}=="0a2a", ATTR{power/autosuspend}="-1"
此后重新启动您的电脑,延迟现象就会消失。
我使用以下链接作为参考。
https://wiki.archlinux.org/title/Power_management#USB_autosuspend
https://fueledonbacon.com/popos-bluetooth-autosuspend-problem/
答案2
你应该能够通过IdleTimeout
中的设置来控制它/etc/bluetooth/input.conf
。它看起来像这样:
# Configuration file for the input service
# This section contains options which are not specific to any
# particular interface
[General]
# Set idle timeout (in minutes) before the connection will
# be disconnect (defaults to 0 for no timeout)
#IdleTimeout=30
...
删除#
并将超时设置为 5 之类的值。如果将其设置为零,请准备好更频繁地为电池充电。然后您可以退出并重新登录以开始使用该设置。