我有一台预装了 Windows 10 的 Lenovo ThinkPad E15。我添加了 Ubuntu 22.04.1 作为选项(双启动)。
\n每当笔记本电脑休眠(进入“挂起”状态)然后我将其唤醒时,罗技无线鼠标滚轮就不起作用。( “罗技 MK270 无线键盘和鼠标组合”,但唯一不起作用的是滚轮。)
\n我已经问过这个问题,并且我对帮助我取得进展但没有完全解决它的答案给予了赏金。
\n目前的结果是cat /etc/systemd/system/reset-usb-upon-wake@.service是:
[Unit]\nDescription="Reset a USB device after system resume"\nAfter=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target\n\n[Service]\nType=simple\nExecStart=/usr/bin/usbreset %i\nUser=root\nGroup=root\n\n[Install]\nWantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target\nRun Code Online (Sandbox Code Playgroud)\n当我唤醒计算机时,鼠标滚轮不起作用。
\n我跑sudo systemctl status reset-usb-upon-wake@046d:c534.service过去看到:
\xe2\x97\x8b reset-usb-upon-wake@046d:c534.service - "Reset a USB device after system resume"\n Loaded: loaded (/etc/systemd/system/reset-usb-upon-wake@.service; disabled; vendor preset: enabled)\n Active: inactive (dead)\nRun Code Online (Sandbox Code Playgroud)\n然后我跑sudo systemctl start reset-usb-upon-wake@046d:c534.service,结果是:
sudo systemctl status reset-usb-upon-wake@046d:c534.service仍然显示“不活动(死亡)”。我也尝试过sudo systemctl enable reset-usb-upon-wake@046d:c534.service,但运行后状态仍然显示为死亡。
我怎样才能彻底解决这个问题,这样我就不必考虑我的滚轮并且它始终可以工作,即使从睡眠中醒来后也是如此?
\nPS我也尝试过sudo vim /etc/udev/rules.d/99-usbreset.rules将这些行保存到该新文件中:
# Reset Logitech wireless mouse on resume from sleep\nSUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c534", RUN+="/usr/bin/usbreset %p"\nRun Code Online (Sandbox Code Playgroud)\nPPS 回复一个答案:
\nlsusb && lsmod | grep usbhid\nBus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\nBus 003 Device 008: ID 27c6:55a4 Shenzhen Goodix Technology Co.,Ltd. Goodix FingerPrint Device\nBus 003 Device 006: ID 30c9:0014 Luxvisions Innotech Limited Integrated Camera\nBus 003 Device 039: ID 046d:c534 Logitech, Inc. Unifying Receiver\nBus 003 Device 038: ID 046d:0825 Logitech, Inc. Webcam C270\nBus 003 Device 040: ID 0d8c:0014 C-Media Electronics, Inc. Audio Adapter (Unitek Y-247A)\nBus 003 Device 037: ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub\nBus 003 Device 003: ID 046d:c534 Logitech, Inc. Unifying Receiver\nBus 003 Device 004: ID 0451:82ff Texas Instruments, Inc. \nBus 003 Device 002: ID 0451:8442 Texas Instruments, Inc. \nBus 003 Device 009: ID 8087:0026 Intel Corp. AX201 Bluetooth\nBus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub\nBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub\nusbhid 65536 1 hid_logitech_dj\nhid 151552 7 i2c_hid,hid_cmedia,usbhid,hid_multitouch,hid_generic,hid_logitech_dj,hid_logitech_hidpp\nRun Code Online (Sandbox Code Playgroud)\n更新2:
\nlsmod | grep hid_logitech_dj && lsmod | grep hid_logitech_hidpp\nhid_logitech_dj 28672 0\nusbhid 65536 1 hid_logitech_dj\nhid 151552 7 i2c_hid,hid_cmedia,usbhid,hid_multitouch,hid_generic,hid_logitech_dj,hid_logitech_hidpp\nhid_logitech_hidpp 49152 0\nhid 151552 7 i2c_hid,hid_cmedia,usbhid,hid_multitouch,hid_generic,hid_logitech_dj,hid_logitech_hidpp\nRun Code Online (Sandbox Code Playgroud)\n
只要运行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
Run Code Online (Sandbox Code Playgroud)
一种简单但非常可靠的方法是创建一个脚本来/lib/systemd/system-sleep/读取位置参数$1并相应地运行命令。
该目录中的可执行文件将在系统睡眠/挂起、休眠或混合睡眠之前和之后运行,并传递给它们两个位置参数...$1将保存pre或post并将$2保存操作,即sleep,hibernate...等。
程序将如下所示:
创建脚本文件并打开它进行编辑...例如,如下所示:
sudo nano /lib/systemd/system-sleep/fix-my-mouse-wheel
Run Code Online (Sandbox Code Playgroud)
在文件中使用此模板...即将其复制/粘贴到文件中,然后修改它以在右侧部分添加命令,然后保存文件:
#!/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
Run Code Online (Sandbox Code Playgroud)
使其可执行,如下所示:
sudo chmod +x /lib/systemd/system-sleep/fix-my-mouse-wheel
Run Code Online (Sandbox Code Playgroud)
完毕。
小智 1
我有一段时间遇到同样的问题(在最近的 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 功能有关,该功能实现了精美的鼠标支持。
对于某些罗技和其他鼠标,由于鼠标滚轮的高精度/灵敏度,简单地循环模块可能不起作用。根据 Solar 的帖子,用户必须重置鼠标滚轮才能使其正常工作,否则它会处于活动状态,但看起来不活动或速度缓慢。
有用的链接:
4.Solaar问题 (Solaar是Logitech设备的Linux设备管理器)