使用无线USB键盘或鼠标从暂停唤醒(对于任何Linux Distro)


Answers:


26

在终端点击

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

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

1。

sudo su

我们现在拥有根特权。

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处于挂起或休眠状态,因此它无法使用wifi下载任何内容,因此,除非我们有意识地将其唤醒,否则它不会唤醒。

下一步:

3。

sudo nano /etc/rc.local

然后将步骤2中的所有内容粘贴到那里(当然要在出口0之前)。

而已。从现在开始,我们可以使用无线USB和鼠标从挂起中唤醒。

我希望它对所有人都有效。该指南是在测试了互联网上所有其他可能的解决方案之后制作的。


6
如果要确定哪个设备,可以查看/sys/bus/usb/devices/<device id>/product文本说明。
ntc2

我启用了“ grep . /sys/bus/usb/devices/*/power/wakeup”中的所有设备,但仍然无法正常工作。也许是因为键盘和鼠标是间接连接的-无线连接到位于屏幕上的加密狗?屏幕通过USB连接到笔记本电脑。
AlikElzin-kilaka

1
如@ ntc2所说,使用它来查看每个描述: grep . /sys/bus/usb/devices/*/product帮助我弄清楚了我在看什么
Ben Yitzhaki

如果仍然无法正常工作,请确保PC处于睡眠模式时设备(键盘/鼠标)仍然有电。如果您的设备上没有LED,则可以使用USB电源监视器(可以在线找到它们,价格约为10美元)来检查USB端口的电源。
J史密斯,

这个问题的永久部分至少在ubuntu 18.04上不再起作用。pavlos-theodorou提供的此答案的补充内容(askubuntu.com/a/874701/516072)帮助了Ubuntu 18.04的永久部分
Laurens

10

除了上面的指南之外,我还想添加此信息,因为我最近发现某些无线USB设备从睡眠中唤醒后,它们会恢复为禁用状态。我重复一遍,只有某些USB设备可以做到这一点,而不是全部。这就是为什么我没有在指南中添加此小指南。

因此,您按照我上面的指示进行了操作,您的电脑成功唤醒,但是当天晚些时候突然不再唤醒。

解:

打开终端并执行:

lsusb

在您的键盘设备ID信息上,前4位是供应商ID,后4位是产品ID(请参见屏幕截图) 在此处输入图片说明

下一步:

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

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

复制此代码并将其替换为您自己的无线键盘供应商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退出并重新启动。


4
最好将其纳入您的第一个答案。
ntc2

1
他们是两件事。第一个是唤醒问题的答案。第二个更像是“如何创建不执行引导的规则”,这只是“额外的”,因为不是每个人都知道该怎么做,并且对此没有简单的业余指南。
Pavlos Theodorou '18 -4-14

2

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

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

我将以下内容放在我的/etc/rc.local文件中,即使每次从一个USB端口移动到另一个USB端口,它也会每次找到我的Logitech接收器。刚刚替补的名字从dmesg的代替“罗技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我的脚本如下之间的双位数字开始,再次substite 从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

出于某种原因,我无法解释,if语句仅在其他每次唤醒后才能进入“睡眠”状态,但是if语句似乎每次都能起作用。


1

上面提到的答案都没有帮助我。这就是为什么我在这里张贴自己的文章。

启用/禁用从USB设备挂起唤醒

在基于Ubuntu 18.04的KDE neon 5.16.2中进行了测试,但可以在任何发行版中使用。


1.显示USB设备列表,以标识要启用/禁用的设备:

grep . /sys/bus/usb/devices/*/product

您应该获得以下内容:

/ sys / bus / usb / devices / 3-3 / product:Cord光电鼠标
/sys/bus/usb/devices/3-4.3/product:802.11n WLAN适配器
/sys/bus/usb/devices/3-4.4/product:USB接收器
/sys/bus/usb/devices/3-4/product:USB2.0集线器
/sys/bus/usb/devices/4-4/product:USB3.0集线器
/ sys / bus / usb / devices / usb1 / product:EHCI主机控制器
/ sys / bus / usb / devices / usb2 / product:EHCI主机控制器
/ sys / bus / usb / devices / usb3 / product:xHCI主机控制器
/ sys / bus / usb / devices / usb4 / product:xHCI主机控制器


2.检查所有USB设备的唤醒状态:

grep。/ sys / bus / usb / devices / * /电源/唤醒

结果应该是这样的:

/ sys / bus / usb / devices / 1-1 / power / wakeup:禁用
/ sys / bus / usb / devices / 2-1 / power / wakeup:禁用
/ sys / bus / usb / devices / 3-11 / power / wakeup:disabled
/ sys / bus / usb / devices / 3-3 / power / wakeup:enabled
/sys/bus/usb/devices/3-4.4/power/wakeup:禁用
/ sys / bus / usb / devices / 3-4 / power / wakeup:禁用
/ sys / bus / usb / devices / 4-4 / power / wakeup:禁用
/ sys / bus / usb / devices / usb1 / power / wakeup:禁用
/ sys / bus / usb / devices / usb2 / power / wakeup:禁用
/ sys / bus / usb / devices / usb3 / power / wakeup:禁用
/ sys / bus / usb / devices / usb4 / power / wakeup:禁用

在我的情况下,仅对USB设备3-3启用唤醒,根据先前的列表,该USB设备为“ Cord Optical Mouse”。

我只想为无线键盘启用从挂起唤醒功能,而对其余部分禁用它。键盘USB接收器已连接到集线器,并且对应于上一个列表中的3-4.4(“ USB接收器”)。


3.创建一个可以完成工作的脚本:

拥有root权限:

sudo su

然后,我们为脚本创建文件(该文件可以称为“ usbwakeup”或任何您想要的描述性文件):

nano /etc/init.d/usbwakeup 

文件内容。只需通过更改“ SCRIPT ACTIONS”部分来适应您的需求即可(我喜欢在脚本中添加注释,以便知道如果有一天再次打开它们,它们实际上会做什么):

#!/ bin / bash
#
#######################
# 一般信息 #
#######################
#
#-此脚本为USB设备启用/禁用从暂停状态唤醒。
#
#-脚本需要执行权限。
#
#-为了在系统启动时执行此脚本,必须有
#在/etc/rc3.d/中以优先级S01指向它的符号链接
#(例如:/etc/rc3.d/S01usbwakeup)
#
##########################
#相关的有用命令#
##########################
#
#-识别USB设备:
#grep。/ sys / bus / usb / devices / * / product
#
#-检查USB设备的“唤醒挂起”状态:
#grep。/ sys / bus / usb / devices / * /电源/唤醒
#
#
##################
#脚本动作#
##################
#
#禁用从暂停状态唤醒的光学鼠标
禁用回声> / sys / bus / usb / devices / 3-3 / power / wakeup
#
#启用无线键盘从挂起状态唤醒
我已经连接到USB端口nr.4中的USB 3.0 HUB
已启用回显> /sys/bus/usb/devices/3-4.4/power/wakeup


4.赋予它执行权限:

chmod +x /etc/init.d/usbwakeup


5.在/etc/rc3.d/中创建一个符号链接,以使其在启动时启动:

sudo ln -s /etc/init.d/usbwakeup /etc/rc3.d/S01usbwakeup


通过重新启动系统,所有内容都应按照脚本中的指定运行。更改将是持久的,因为它们将在每次系统引导时执行。

查阅的资料(本帖子的一部分):

https://ubuntuforums.org/showthread.php?t=2388336

https://www.thomasmonaco.com/prevent-usb-devices-waking-ubuntu-sleep/

/unix/83748/the-rc0-d-rc1-d-directories-in-etc


我刚刚找到了一个有趣的帖子,其中解释了如何为相同目的创建简单的GUI。我尚未对其进行测试,但是它可能会帮助尝试将其图形化并轻松单击以启用/禁用的人: bernaerts-nicolas.fr/linux/74-ubuntu/220-ubuntu-resume-usb-隐藏
JuanGómezCarrillo
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.