如何防止鼠标移动唤醒挂起的计算机?


32

真的很烦人,因为在挂起后我必须拔掉鼠标,以确保偶尔的撞击不会唤醒系统。我没有在系统设置中找到任何可以通过谷歌搜索禁用它的功能。

Answers:


24

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

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

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

我在发现该信息的博客的基础上写了一个小的HowTo来禁用鼠标唤醒功能


1
这听起来比我的答案要好得多,并且我已经相应地编辑了答案。谢谢!
罗比·巴萨克

2
因此,这有效(但是,我注意到顺便说一句,仅使用该功能sudo将不起作用:首先必须要做sudo su,然后回显至/proc/acpi/wakeup。但是,我想知道是否有人找到了一种禁用鼠标的方法? (通过无线USB)连接到我的桌面上,这也将禁用键盘唤醒功能
Marco Marco

15

感谢所有海报,因为鼠标唤醒给您带来了很大的不便,我在这里得到了答案。我希望在解决方案中加入我的想法,因为这可能会在更多情况下有所帮助。我必须禁用中的3个不同项/proc/acpi/wakeup。我的设备:EHC1, EHC2, XHCI。前两个是usb2,第三个是usb3条目。请注意,尽管我的鼠标的USB收发器已插入USB2端口,而USB 3端口中没有任何物品,但计算机将在鼠标移动时唤醒,直到禁用所有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

由cipricus编辑:

我正在编辑此文件,因为我需要添加更多详细信息,以便根据该答案作为上述内容的重复项目来结束我的单独问题;我认为这比单独发布答案更有用。

***测试哪些项目需要被停用-指示此处 -为每个被张贴作为项的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"

(就我而言,即使使用其他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

重新启动以查看更改。


如果您不喜欢我的编辑,请标记@cipricus,让我知道,我将作为与上面链接的单独答案发布。

6

我的系统是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/sh

if [ ! -r /sys/bus/usb/devices/7-2.3/power/wakeup ]; then
    exit 0
fi
case "$1" in
    pre )
    echo disabled > /sys/bus/usb/devices/7-2.3/power/wakeup
;;
esac

全部做完。


它可以在我的笔记本电脑上与Ubuntu 18.04一起使用。
Minh Nguyen

1

这个脚本解决了我的问题。看看这个。

    #!/bin/bash

# allow only one instance
r=$(pidof -x -o $$ ssmonoff.sh)
set -- $r
if [ "${#@}" -ge 1 ]; then
    echo "Script already running. Exit..."
    exit
fi

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while read line; do
    if echo $line | grep "boolean true" &> /dev/null; then
            xinput --set-prop "Dell Premium USB Optical Mouse" "Device Enabled" "0"
            xset dpms force off
    else
            xinput --set-prop "Dell Premium USB Optical Mouse" "Device Enabled" "1"
    fi
done )

您所需要做的就是,首先运行sudo xinput list,找到给定的USB鼠标名称,并将其放在脚本中。然后,将文件另存为“ ssmonoff.sh”,使其可执行,并将其设置为在启动时运行。


1

很好的解释。我只是将以下命令添加到rc.local中

for d in `cat wakeup |grep enabled|grep -v PS2K|cut -b -4`; do echo $d >/proc/acpi/wakeup ; done

禁止唤醒除PS2K(键盘PS2)以外的所有设备。简单而有效!


0

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

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

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


0

这是我逐步为您准备的“教程”:

  1. 使用命令cat /proc/acpi/wakeup显示唤醒设备列表
  2. 使用命令sudo sh -c "echo XXXX >/proc/acpi/wakeup"(用设备代码替换“ XXXX”)来切换设备状态(启用/禁用)。一次移动一台设备,尝试挂起您的计算机,然后使用您要禁用的设备将其唤醒,直到应得的设备将无法唤醒计算机。别忘了总是重新启用不想禁用的设备。
  3. 当您找到合适的设备时,请在桌面文件“ acpi_wakeup”中创建包含以下代码的设备:( #!/bin/sh printf "XXXX" > /proc/acpi/wakeup 不要忘记用设备代码替换“ XXXX”)
  4. 将文件移动或复制到文件夹/etc/init.d/。要复制文件,请使用以下命令:( sudo cp /home/USERNAME/Desktop/acpi_wakeup /etc/init.d/acpi_wakeup 将“ USERNAME”替换为您的实际用户名)
  5. 使文件可执行: sudo chmod 755 /etc/init.d/acpi_wakeup
  6. 然后使用'update-rc.d'在其他目录中自动建立所需的符号链接:( sudo update-rc.d acpi_wakeup defaults 它显示了,WARNING: ...missing LSB tags and overrides但是可以。您不必担心。)
  7. 重新启动计算机。

资料和进一步阅读:

http://www.das-werkstatt.com/forum/werkstatt/viewtopic.php?f=7&t=1985 http://ubuntuforums.org/showthread.php?t=814939&page=3

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.