这真的很烦人,因为我不得不在挂起后拔下鼠标以确保偶尔的碰撞不会唤醒系统。我在系统设置中没有找到任何可以禁用此功能的东西,也没有在谷歌上搜索过。
答案1
我还没有检查 BIOS,但是我已经找到了解决方案!
简短摘要:在 中/proc/acpi/wakeup
,您可以看到哪些设备当前已启用从挂起状态恢复。该列表显示所谓“设备”的名称(缩写)。例如,“PWRB”表示“电源按钮”。
如果将设备名称写入该文件,则可以在启用/禁用之间切换它们。
我写禁用鼠标唤醒的一个小指南,基于我找到该信息的博客。
答案2
感谢所有发帖者,因为鼠标唤醒非常不方便,我在这里得到了答案。我希望在解决方案中添加我的改动,因为这可能会在更多情况下有所帮助。我不得不在 中禁用 3 个不同的项目/proc/acpi/wakeup
。我的设备:EHC1, EHC2, XHCI
。前 2 个是 usb2,第 3 个是 usb3 条目。请注意,虽然我的鼠标的 usb 收发器插入了 usb2 端口,而 usb3 端口中没有任何东西,但计算机会在鼠标移动时唤醒,直到全部 3项目已被禁用。
$ cat /proc/acpi/wakeup | sort
Device S-state Status Sysfs node
EHC1 S3 *disabled pci:0000:00:1d.0
EHC2 S3 *disabled pci:0000:00:1a.0
GLAN S4 *enabled pci:0000:08:00.0
.. ,, ..
USB7 S3 *disabled
WLAN S3 *disabled pci:0000:03:00.0
XHCI S3 *disabled pci:0000:07:00.0
为了在每次启动时禁用唤醒项,您可以添加类似的内容到/etc/rc.local
..
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHCI > /proc/acpi/wakeup
测试哪些项目需要禁用 - 如上所述这里enabled
- 对于下面发布的每个项目,cat /proc/acpi/wakeup | sort
通过在终端中运行下面的每个命令,然后测试鼠标是否唤醒系统(无需重新启动):
sudo sh -c "echo EHC1 > /proc/acpi/wakeup"
sudo sh -c "echo EHC2 > /proc/acpi/wakeup"
sudo sh -c "echo XHCI > /proc/acpi/wakeup"
(就我的情况而言,即使使用其他 USB 端口进行测试后,第一个也足够了)
如果/etc/rc.local
文件不存在
根据这发布,运行:
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
该文件看起来应该类似于:
#!/bin/bash
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHCI > /proc/acpi/wakeup
exit 0
重启。
如果仍然不起作用,则可能是文件/etc/systemd/system/rc-local.service
丢失或配置不正确。
测试
sudo /etc/init.d/rc.local start
和
sudo systemctl status rc-local
下列的如何使用 Systemd 启用 /etc/rc.local:
创建文件:
sudo nano /etc/systemd/system/rc-local.service
然后添加下面的内容。
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
保存并关闭文件。要在 Nano 文本编辑器中保存文件,请按 Ctrl+O,然后按 Enter 确认。要退出文件,请按 Ctrl+X。
使用以下命令检查一切是否正常且无错误:
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
重新启动才能查看更改。
答案3
我使用的解决方案是一条 udev 规则,该规则禁用特定 USB 设备的唤醒。它应该与设备插入哪个端口无关。
/etc/udev/rules.d/90-usb-wakeup.rules
使用以下内容创建(根据需要进行修改,查看输出,idVendor
其中给出了格式为: 的 ID ):idProduct
lsusb
vendor:product
# Disable waking up from Logitech unified receiver
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", ATTR{power/wakeup}="disabled"
要在不重启的情况下应用它:
跑步:
sudo udevadm control --reload-rules
断开并重新连接 USB 设备。
灵感源自https://wiki.archlinux.org/title/udev#Waking_from_suspend_with_USB_device
答案4
上述解决方案(https://askubuntu.com/a/265389/1467620) 可以工作,但是它比较粗糙,而且还会禁用键盘唤醒,而键盘唤醒实际上是很有用的。
更细致的替代方案可以是这样的:首先,我们开始枚举连接到系统的 USB 设备:
lsusb | sort
从这里,很明显哪一个是鼠标:
Bus 002 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
然后我们继续查找设备映射到的位置:
grep enabled /sys/bus/usb/devices/*/power/wakeup
/sys/bus/usb/devices/2-1.2.6/power/wakeup:enabled
/sys/bus/usb/devices/2-1.2.7/power/wakeup:enabled
最后,为了弄清楚哪个是哪个,我们使用:
dmesg | grep Logitech | grep -o -P "usb.+?\s"
usb 2-1.2.7:
此时很明显哪一个需要被禁用:
sudo sh -c "echo 'disabled' > /sys/bus/usb/devices/2-1.2.7/power/wakeup"
注意:每次都需要以超级用户身份回显,sh -c
这是必要的,否则系统将不允许重定向到特权文件。
然后只需暂停系统并验证虽然鼠标无法唤醒系统,但键盘可以唤醒系统。
系统重启后它将不再存在,因此您要么重新运行最后一条命令,要么将其添加到您的.bashrc
或中.zshrc
。
自从我在 Ubuntu 上安装 16.04 以来,这个问题就一直困扰着我,而且可能永远都存在,我不明白为什么 Canonical 不在系统设置中添加它。
来源:https://codetrips.com/2020/03/18/ubuntu-disable-mouse-wake-from-suspend/