如何防止鼠标移动唤醒暂停的计算机?

如何防止鼠标移动唤醒暂停的计算机?

这真的很烦人,因为我不得不在挂起后拔下鼠标以确保偶尔的碰撞不会唤醒系统。我在系统设置中没有找到任何可以禁用此功能的东西,也没有在谷歌上搜索过。

答案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 ):idProductlsusbvendor:product

# Disable waking up from Logitech unified receiver
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", ATTR{power/wakeup}="disabled"

要在不重启的情况下应用它:

  1. 跑步:

    sudo udevadm control --reload-rules
    
  2. 断开并重新连接 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/

相关内容