使用无线 USB 键盘或鼠标从挂起中唤醒(适用于任何 Linux 发行版)

Pav*_*rou 32 usb suspend wireless wakeup

我找了几个小时,也许更多,寻找解决方案,我刚刚找到了它。我想与大家分享。这样可以更容易地在谷歌上搜索这个问题以更快地找到解决方案。所以,正如标题所说,下面是解决方案。

Pav*_*rou 45

在终端:

grep . /sys/bus/usb/devices/*/power/wakeup
Run Code Online (Sandbox Code Playgroud)

对我来说,结果是发现所有 USB 都被禁用了。

  1. 所以现在,输入:

     sudo su
    
    Run Code Online (Sandbox Code Playgroud)

    我们现在有根特权。

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

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

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

  3.  sudo nano /etc/rc.local
    
    Run Code Online (Sandbox Code Playgroud)

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

就是这样。从现在开始,我们可以使用我们的无线 USB 和鼠标从挂起状态中唤醒。

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

  • 如果你想弄清楚哪个设备是哪个,你可以在 `/sys/bus/usb/devices/<device id>/product` 中查看文本描述。 (6认同)
  • 正如@ntc2 所说,使用它来查看每个的描述:`grep。/sys/bus/usb/devices/*/product` 帮助我弄清楚我在看什么 (2认同)
  • 这个问题的永久部分至少在 ubuntu 18.04 上不再适用。pavlos-theodorou 提供的这个答案的添加(https://askubuntu.com/a/874701/516072)有助于 Ubuntu 18.04 中的永久部分 (2认同)

Pav*_*rou 28

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

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

解决方案:

打开终端并执行以下操作:

lsusb
Run Code Online (Sandbox Code Playgroud)

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

接下来做:

sudo nano /etc/udev/rules.d/10-wakeup.rules
Run Code Online (Sandbox Code Playgroud)

在“唤醒”中输入您想要的脚本名称。如果您有许多其他 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'"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 最好将此纳入您的第一个答案。 (5认同)
  • 我使用了更简单的 udev 规则:`ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTR{power/wakeup}="disabled"`。请参阅此答案:https://unix.stackexchange.com/a/532839/422471 (5认同)
  • 这确实是连接后设置设备的**正确**方式;任何其他解决方案或脚本只是一个肮脏的黑客。改进:在您的“RUN”脚本中使用“$env{DEVPATH}”作为设备路径。例如,这是我的英特尔蓝牙适配器的行:`ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0aaa" RUN+=" /bin/sh -c 'echo enabled > /sys$env{DEVPATH}/power/wakeup'"` (4认同)
  • 它们是两种不同的东西。第一个是唤醒问题的答案。第二个更像是“如何创建不执行引导的规则”,它只是一个“额外的”,因为不是每个人都知道如何做到这一点,并且没有简单的业余指南。 (2认同)

cal*_*ode 7

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

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

在基于 Ubuntu 18.04 的 KDE neon 5.16.2 中测试,但应该适用于任何发行版。

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

    grep . /sys/bus/usb/devices/*/product
    
    Run Code Online (Sandbox Code Playgroud)

    你应该得到这样的东西:

    /sys/bus/usb/devices/3-3/product:Cord Optical Mouse
    /sys/bus/usb/devices/3-4.3/product:802.11n WLAN Adapter
    /sys/bus/usb/devices/3-4.4/product:USB Receiver
    /sys/bus/usb/devices/3-4/product:USB2.0 Hub
    /sys/bus/usb/devices/4-4/product:USB3.0 Hub
    /sys/bus/usb/devices/usb1/product:EHCI Host Controller
    /sys/bus/usb/devices/usb2/product:EHCI Host Controller
    /sys/bus/usb/devices/usb3/product:xHCI Host Controller
    /sys/bus/usb/devices/usb4/product:xHCI Host Controller
    
    Run Code Online (Sandbox Code Playgroud)
  2. 检查所有 USB 设备的唤醒状态:

    grep . /sys/bus/usb/devices/*/power/wakeup
    
    Run Code Online (Sandbox Code Playgroud)

    结果应该是这样的:

    /sys/bus/usb/devices/1-1/power/wakeup:disabled
    /sys/bus/usb/devices/2-1/power/wakeup:disabled
    /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:disabled
    /sys/bus/usb/devices/3-4/power/wakeup:disabled
    /sys/bus/usb/devices/4-4/power/wakeup:disabled
    /sys/bus/usb/devices/usb1/power/wakeup:disabled
    /sys/bus/usb/devices/usb2/power/wakeup:disabled
    /sys/bus/usb/devices/usb3/power/wakeup:disabled
    /sys/bus/usb/devices/usb4/power/wakeup:disabled
    
    Run Code Online (Sandbox Code Playgroud)

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

    我想只为无线键盘启用从挂起唤醒,其余禁用。键盘 USB 接收器连接到 HUB,对应于上一个列表中的 3-4.4(“USB 接收器”)。

  3. 创建一个脚本来完成工作:

    拥有root权限:

     sudo su
    
    Run Code Online (Sandbox Code Playgroud)

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

     nano /etc/init.d/usbwakeup 
    
    Run Code Online (Sandbox Code Playgroud)

    文件的内容。只需通过更改“脚本操作”部分来使其适应您的需求(我喜欢向脚本添加注释,以便在我有一天再次打开它们时了解它们实际执行的操作):

    grep . /sys/bus/usb/devices/*/product
    
    Run Code Online (Sandbox Code Playgroud)
  4. 给它执行权限:

    chmod +x /etc/init.d/usbwakeup
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在 /etc/rc3.d/ 中创建一个符号链接,让它在启动时启动:

    sudo ln -s /etc/init.d/usbwakeup /etc/rc3.d/S01usbwakeup
    
    Run Code Online (Sandbox Code Playgroud)

通过重新启动系统,一切都应该按照脚本中的指定工作。这些更改将是持久的,因为它们将在每次系统启动时执行。

参考