使用无线USB键盘或鼠标暂停唤醒(适用于任何Linux发行版)

我正在寻找数小时,甚至更多,寻找解决方案,我才发现它。 我想与大家分享。 通过这种方式,可以更轻松地搜索此问题,以便更快地找到解决方案。 所以,正如标题所说,下面是解决方案。

点击终端:

grep . /sys/bus/usb/devices/*/power/wakeup 

对我来说,结果是发现所有的USB都被禁用了。 所以现在输入:

1。

 sudo su 

我们现在有了root权限。

2.我有8个USB端口( 你可以为你拥有的多个USB端口做到这一点 ),所以:

 echo enabled > /sys/bus/usb/devices/usb1/power/wakeup echo enabled > /sys/bus/usb/devices/usb2/power/wakeup echo enabled > /sys/bus/usb/devices/usb3/power/wakeup echo enabled > /sys/bus/usb/devices/usb4/power/wakeup echo enabled > /sys/bus/usb/devices/usb5/power/wakeup echo enabled > /sys/bus/usb/devices/usb6/power/wakeup echo enabled > /sys/bus/usb/devices/usb7/power/wakeup echo enabled > /sys/bus/usb/devices/usb8/power/wakeup 

继续测试吧。 现在,您可以从任何无线或有线USB键盘和鼠标唤醒。

那么,我们必须启用所有这些的原因是因为在下一步中,我们将在rc.local中写入此命令以在每次重新启动后执行命令,并且在重新启动后,一些Linux发行版(可能全部)更改usb端口。 我们不必担心因为启用所有这些而出现任何问题,因为Linux处于挂起或hibernate状态,它无法使用wifi下载任何内容,所以如果我们故意将其唤醒,它就不会被唤醒。

下一步:

3。

 sudo nano /etc/rc.local 

然后我们将第2步中的所有内容粘贴到那里(当然是在0号出口之前)。

而已。 从现在开始,我们可以使用无线USB和鼠标从暂停状态唤醒。

我希望它适用于所有人。 本指南是在测试了互联网上所有其他可能的解决方案后制作的。

除了我上面的指南,我想添加这些信息,因为我最近发现一些无线USB设备从睡眠状态唤醒后,它们恢复为禁用状态。 我再说一遍,只有一些USB设备会这样做,而不是全部。 这就是为什么我没有在我的向导上添加这个小指南。

所以你按照我上面的指示做了,你的电脑成功唤醒,但当天晚些时候它突然没有再醒来。

解:

打开终端并执行:

 lsusb 

在您的键盘设备ID信息中,4个第一位数字是供应商ID,4个下一个数字是产品ID(参见屏幕截图) 在此处输入图像描述

接下来做:

 sudo nano /etc/udev/rules.d/10-wakeup.rules 

“唤醒”输入所需的脚本名称。 如果您有许多其他udev规则,则数字10是优先级,“规则”在其他规则之前执行的数字越低。

复制粘贴此内容并使用您自己的无线键盘供应商ID和产品ID替换供应商ID和产品ID。

 ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="062a", ATTRS{idProduct}=="4101" RUN+="/bin/sh -c 'echo enabled > /sys/bus/usb/devices/usb8/power/wakeup'" 

* usb8对我来说是我的无线键盘(您也可以在屏幕截图(Bus 008)中看到),用您自己的键盘替换它。

按Ctrl + O保存, 按Ctrl + X退出并重启。

Pavlos Theodorou的回答非常有帮助。 我想补充一点,你可以找到你的鼠标/键盘在启动时连接的usb设备,通过grep管道dmesg几次,然后egrep一次,最后使用tail确保它是最新的条目。

使用此方法,您不必所有 USB端口上启用唤醒。

我把以下内容放在我的/etc/rc.local文件中,每次都找到我的罗技接收器,即使从一个USB端口移动到另一个端口也是如此。 只需用dmesg替换键盘或鼠标的名称代替“Logitech K270”

 KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)" echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup 

这在启动时起作用,但似乎在从挂起唤醒时不运行,所以我不得不在/ lib / systemd / system-sleep /中放置一个脚本文件。 创建它,将其设置为全局可执行文件,并为其命名,以00到99之间的两位数字开头。我的脚本如下,再次从dmesg中替换键盘/鼠标verbage:

 #!/bin/sh # Action script to enable wake after suspend by keyboard or mouse if [ $1 = post ] then KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)" echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup fi if [ $1 = pre ] then KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)" echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup fi 

出于某种原因,我无法解释,’post’sleep if语句只能在其他所有唤醒中起作用…但是’pre’sleep if语句似乎每次都有效。