我有一台安装了 Windows 10 的联想 ThinkPad E15。我添加了 Ubuntu 22.04.1 作为选项(双启动)。
每当笔记本电脑进入睡眠状态(进入“挂起”状态)然后我将其唤醒时,罗技无线鼠标滚轮均不工作。(“罗技 MK270 无线键盘和鼠标组合”,但唯一不起作用的是滚轮。)
我已经问过这个问题了,我悬赏了回答这帮助我取得了进展,但并没有完全解决问题。
目前的结果是:cat /etc/systemd/system/[email protected]
[Unit]
Description="Reset a USB device after system resume"
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
[Service]
Type=simple
ExecStart=/usr/bin/usbreset %i
User=root
Group=root
[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
当我唤醒计算机时,鼠标滚轮不工作。
我跑过去sudo systemctl status reset-usb-upon-wake@046d:c534.service
一看:
○ reset-usb-upon-wake@046d:c534.service - "Reset a USB device after system resume"
Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: inactive (dead)
然后我运行sudo systemctl start reset-usb-upon-wake@046d:c534.service
,结果是:
- 它会无限地向终端打印一堆空的换行符,直到我取消该命令。
答案1
如何检测可重置的 USB 设备?
只需运行usbreset
它就会告诉您它能做什么以及如何做...例如像这样:
$ usbreset
Usage: # <=== This is how to do it (reset devices)
usbreset PPPP:VVVV - reset by product and vendor id
usbreset BBB/DDD - reset by bus and device number
usbreset "Product" - reset by product name
Devices: # <=== These are the devices that it sees and can reset
Number 001/002 ID 8087:0a3a
Number 001/005 ID 05ac:14a7 iPhone
Number 001/003 ID 0bda:55ea EasyCamera
那么,如何在系统从睡眠状态唤醒时自动执行?
一种简单但非常可靠的方法是创建一个脚本,/lib/systemd/system-sleep/
读取位置参数$1
并相应地运行命令。
该目录中的可执行文件将在系统睡眠/挂起、休眠或混合睡眠之前和之后运行,并向它们传递两个位置参数...$1
将保存pre
或post
并将$2
保存操作sleep
,即hibernate
...等。
该过程如下:
创建脚本文件并打开进行编辑...例如像这样:
sudo nano /lib/systemd/system-sleep/fix-my-mouse-wheel
在文件中使用此模板...即将其复制/粘贴到文件中,然后修改它以在正确的部分添加命令,然后保存文件:
#!/bin/sh case "${1}" in pre) # Command(s)/script(s) "each on a newline" to be executed before system goes to sleep/hibernate ;; post) sleep 5 # You most likely will need this sleep call. Leave it alone. # Command(s)/script(s) "each on a newline" to be executed after system wakes up from sleep/hibernate # e.g. usbreset 05ac:14a7 ;; esac
使其可执行如下:
sudo chmod +x /lib/systemd/system-sleep/fix-my-mouse-wheel
完毕。
答案2
我遇到了同样的问题一段时间(在最近的 ubuntu 安装中),并且我看到的任何地方都没有可以作为解决方案的脚本对我有用。
最后 modprobe 成功了,但是这里有一个问题:
如果你lsmod | grep usbhid
您可能会看到 usbhid 被其他东西“使用”(第二列)。就我而言,我经常画画,所以我看到那里列出了“wacom”。这意味着在暂停后我必须执行(顺序很重要):
sudo rmmod wacom && sudo rmmod usbhid && sudo modprobe usbhid && sudo modprobe wacom
如果我rmmod usbhid
在“wacom”之前输入,它会出错,并且进程不会没有什么因为依赖性问题。如果是干净启动,我只需在 usbhid 上执行 rmmod/modprobe 组合即可。
现在,我的设备是 Msoft 键盘/鼠标组合,它仅使用 usbhid,罗技设备可能有所不同,我在另一篇文章中看到您声称它hid_logitech_dj
也使用,但您也说 modprobing 不起作用。问题是您从哪里得到这个名字的,您是否像图中那样使用 lsmod 找到它多于? 如果你弄清楚了你的意思,我不明白为什么 modprobing 不起作用实际上必须在您的特定系统中卸载/重新加载。
不要链接命令,而是尝试一次执行一个命令,看看其中是否有任何命令返回错误。
你的情况可能属于特殊情况,谁知道呢。遗憾的是 Canonical 没有调查过这个问题,这就像某个花了数年时间才修复的旧暂停错误。
希望这对你有所帮助,即使你又遇到了死胡同,也不要放弃。如上所述,原则上,这个问题并非无法解决。
编辑:
该问题似乎与实现花哨鼠标支持的 Linux Kernel 5 新功能有关。
对于某些 Logitech 和其他鼠标,由于鼠标滚轮的精度/灵敏度较高,简单地循环模块可能不起作用。根据 Solaar 的帖子,用户必须重置鼠标滚轮才能使其正常工作,否则它会处于活动状态但似乎处于非活动状态或慢的。
有用的链接:
4.太阳能问题 (Solaar 是 Logitech 设备的 Linux 设备管理器)
答案3
2年3个月后询问,我想我终于让它工作了!
答案4
[Unit]
Description="Reset a USB device after system resume"
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
[Service]
Type=simple
ExecStart=/usr/bin/usbreset 046d:c534
User=root
Group=input
[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
我认为在这种情况下 udev 将不起作用。
sudo systemctl enable reset-usb-upon-wake@046d:c534.service
然后让 systemd 知道发生了一些变化。
sudo systemctl daemon-reload