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

use*_*498 50 mouse suspend

这真的很烦人,因为我必须在暂停后拔下鼠标以确保偶尔的碰撞不会唤醒系统。我没有在系统设置中找到任何可以通过谷歌搜索来禁用它的东西。

小智 30

我还没有检查 BIOS,但我已经找到了解决方案!

简短摘要:在 中/proc/acpi/wakeup,您可以查看当前启用了哪些设备以从挂起状态恢复。该列表显示了所谓的“设备”的名称(缩写)。示例“PWRB”表示“电源按钮”。

如果您将设备名称写入该文件,则会在启用/禁用之间切换它们。

我根据我找到该信息的博客编写了一个小型 HowTo 来禁用鼠标唤醒

  • 所以,这是有效的(但是,我顺便注意到,仅使用 `sudo` 是行不通的:必须先执行 `sudo su`,然后回显到 `/proc/acpi/wakeup`。但是,我想知道是否有人找到了*只是*禁用鼠标的方法?我的桌面上都通过(无线)USB 连接,这也将禁用从键盘唤醒。 (3认同)

小智 22

感谢所有海报,因为鼠标唤醒是一个主要的不便,我在这里得到了答案。我希望在解决方案中添加我的想法,因为这可能在更多情况下有所帮助。我不得不在/proc/acpi/wakeup. 我的设备:EHC1, EHC2, XHCI. 前 2 个是 usb2,第三个是 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
Run Code Online (Sandbox Code Playgroud)

要在每次启动时禁用唤醒项,您可以将这样的内容添加到/etc/rc.local..

echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHCI > /proc/acpi/wakeup
Run Code Online (Sandbox Code Playgroud)

测试哪些项目需要被停用-指示此处-为每个被张贴作为项的enabledcat /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"
Run Code Online (Sandbox Code Playgroud)

(在我的情况下,即使在使用其他 USB 端口进行测试后,第一个就足够了)


如果/etc/rc.local文件不存在

根据这篇文章,运行:

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
Run Code Online (Sandbox Code Playgroud)

该文件应类似于:

#!/bin/bash
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHCI > /proc/acpi/wakeup

exit 0
Run Code Online (Sandbox Code Playgroud)

重启。


如果这仍然不起作用,则可能是文件/etc/systemd/system/rc-local.service丢失或未正确配置。

测试

sudo /etc/init.d/rc.local start
Run Code Online (Sandbox Code Playgroud)

sudo systemctl status rc-local
Run Code Online (Sandbox Code Playgroud)

以下如何使用 Systemd 启用 /etc/rc.local

创建文件:

sudo nano /etc/systemd/system/rc-local.service
Run Code Online (Sandbox Code Playgroud)

然后在其中添加以下内容。

[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
Run Code Online (Sandbox Code Playgroud)

保存并关闭文件。要在 Nano 文本编辑器中保存文件,请按 Ctrl+O,然后按 Enter 确认。要退出文件,请按 Ctrl+X。

检查一切正常,没有错误:

sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
Run Code Online (Sandbox Code Playgroud)

重新启动以查看更改。


小智 17

我使用的解决方案是 udev 规则,它禁用特定 USB 设备的唤醒。它应该不知道设备插入哪个端口。

/etc/udev/rules.d/90-usb-wakeup.rules使用以下内容创建(修改idVendoridProduct根据需要查看输出,其中lsusb给出了以下形式的 ID 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"
Run Code Online (Sandbox Code Playgroud)

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

  1. 跑步:

    sudo udevadm control --reload-rules
    
    Run Code Online (Sandbox Code Playgroud)
  2. 断开并重新连接 USB 设备。

灵感来自https://wiki.archlinux.org/title/udev#Waking_from_suspend_with_USB_device


小智 10

我的系统是 Ubuntu 15.10

我尝试使用lsusb命令来查找鼠标设备是什么。很简单,你输入lsusb然后拔掉鼠标(在我的例子中,它是一个蓝牙接收器)并lsusb再次输入。该设备如下所示:

Bus 007 Device 008: ID 24ae:2000

现在/sys/bus/usb/devices/使用相同的方式(拔出/插入)在文件夹中找到它。就我而言,我发现它们位于以7-2*.

现在尝试读取 idProduct 和 idVendor。例如:cat /sys/bus/usb/devices/7-2.3/idProduct=> 2000cat /sys/bus/usb/devices/7-2.3/idVendor=> 24ae。就是这样。

最后,我在/lib/systemd/system-sleep目录中创建了一个脚本,随意命名。

#!/bin/bash

# From lsusb: Bus 007 Device 008: ID 24ae:2000
idVendor=24ae
idProduct=2000

# Get sys device path by vendorId and productId
function find_device()
{
    local vendor=$1
    local product=$2
    vendor_files=( $(egrep --files-with-matches "$vendor" /sys/bus/usb/devices/*/idVendor) )
    for file in "${vendor_files[@]}"; do
       local dir=$(dirname "$file")
       if grep -q -P "$product" "$dir/idProduct"; then
         printf "%s\n" "$dir"
         return
       fi
    done
}

sysdev=$(find_device $idVendor $idProduct)

if [ ! -r "$sysdev/power/wakeup" ]; then
    echo $idVendor:$idProduct not found 1>&2
    exit 1
fi

case "$1" in
    pre )
    echo disabled > $sysdev/power/wakeup"
    ;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)

全部完成。


ali*_*OZA 5

上述解决方案(https://askubuntu.com/a/265389/1467620)有效,但它很粗糙,而且它还禁用了键盘唤醒,这实际上很有用。

\n

更精细的替代方案可以是这样的:\n首先,我们首先枚举连接到系统的 USB 设备:

\n\n
lsusb | sort\n
Run Code Online (Sandbox Code Playgroud)\n

从这里开始,\xe2\x80\x99 就很明显哪一个是鼠标了:

\n
Bus 002 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver\n
Run Code Online (Sandbox Code Playgroud)\n

然后我们继续查找设备映射到的位置:

\n
grep enabled /sys/bus/usb/devices/*/power/wakeup\n\n/sys/bus/usb/devices/2-1.2.6/power/wakeup:enabled\n/sys/bus/usb/devices/2-1.2.7/power/wakeup:enabled\n
Run Code Online (Sandbox Code Playgroud)\n

最后,为了弄清楚哪个是哪个,我们使用:

\n
dmesg | grep Logitech | grep -o -P "usb.+?\\s"\n\nusb 2-1.2.7:\n
Run Code Online (Sandbox Code Playgroud)\n

此时,\xe2\x80\x99 就很明显需要禁用哪一个了:

\n
sudo sh -c "echo \'disabled\' > /sys/bus/usb/devices/2-1.2.7/power/wakeup"\n
Run Code Online (Sandbox Code Playgroud)\n

注意:每次您需要以超级用户身份进行回显时,sh -c都是必要的,否则系统将不允许重定向到特权文件。

\n

那么\xe2\x80\x99 只需要挂起系统并验证鼠标不会唤醒它,而键盘会唤醒它。

\n

这不会在系统重新启动后继续存在,因此您需要重新运行最后一个命令,或者将其添加到您的.bashrc.zshrc.

\n

自从我安装 16.04 以来,这个问题就一直困扰着我,并且可能永远存在,我不明白为什么 Canonical 不会\xe2\x80\x99 不在系统设置中添加它。

\n

来源:https ://codetrips.com/2020/03/18/ubuntu-disable-mouse-wake-from-suspend/

\n


Rob*_*sak 0

可能有一种特定于您的硬件的方法,在这种情况下,可以通过系统的 BIOS 设置使用该选项。

进入 BIOS 菜单更改设置也是特定于系统的。通常,您在重新启动后立即按一个键,并且要按的键通常会显示在屏幕上。

但是,user138339 的答案似乎是实现您所需的更通用的方法,您可以从正在运行的系统中执行此操作。