如何防止 PCI 设备从挂起和/或休眠状态立即唤醒?

如何防止 PCI 设备从挂起和/或休眠状态立即唤醒?

几天来,我的 Ubuntu 12.04 台式计算机在进入挂起模式后总是神秘地立即被唤醒。

自安装以来,我的 Ubuntu 12.10 笔记本电脑一直在挂起和休眠后立即恢复。

如何预防这些?

有关的:

答案1

该问题可能是由奇怪的 USB 信号引起的。gedit /proc/acpi/wakeup向我展示了已为 USB0 和 USB2 启用唤醒功能。

sudo -s
echo USB0 > /proc/acpi/wakeup
echo USB2 > /proc/acpi/wakeup

将其切换为禁用(再次检查 gedit /proc/acpi/wakeup或刷新文件视图),此后,计算机将保持应有的挂起状态。:-)

答案2

我最近在 Ubuntu 15.04 上的 Asus Zenbook Pro UX501 上遇到了同样的症状。Bazon 的确切修复方法不起作用,但 Vladimir Rutsky 的变体起作用了。具体来说:

如果从终端运行cat /proc/acpi/wakeup显示以下行

EHC1      S3    *enabled  pci:0000:00:xx.x
EHC2      S3    *enabled  pci:0000:00:xx.x
XHC       S3    *enabled  pci:0000:00:xx.x

(pci 地址可能不同)

然后通过发出以下命令将这三个切换为禁用:

sudo -s
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHC > /proc/acpi/wakeup

答案3

如果您知道哪个设备唤醒了您的 PC,请转到第一步按照指南操作。如果您不知道,请打开终端并执行以下操作:

cat /var/log/syslog

并找出哪个设备正在唤醒您的电脑。

所以现在:

  1. 在终端中点击:

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

列出所有唤醒我们电脑的 USB 端口。

sudo su

我们现在拥有 root 权限。

2.我有 8 个 USB 端口,在这个例子中,假设我想禁用 usb8,所以:

echo disabled > /sys/bus/usb/devices/usb8/power/wakeup

继续测试。现在 USB 端口 8 中的特定设备不会唤醒 PC。

下一步,使每次启动后更改永久生效:

3.

sudo nano /etc/rc.local

然后我们粘贴步骤 2 中的命令。在那里(当然是在出口 0 之前)。

就是这样。

选修的仅当睡眠/唤醒过程之后,USB 8 设备(在我的示例中)才会恢复到启用状态。

  1. 编写一条udev规则,每次启动、睡眠、唤醒后执行该命令。

打开终端并执行:

lsusb

在您的键盘设备 ID 信息中,前 4 位数字是供应商 ID,后 4 位数字是产品 ID截屏

接下来做:

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

在“wakeup”中输入您想要的脚本名称。如果您有许多其他 udev 规则,则数字 10 是优先级,数字越低的“规则”将先于其他规则执行。

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

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

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

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

答案4

这是我在 2015 年款 Mac Book Pro 上工作的方法

我添加了以下内容/lib/systemd/system-sleep/wakeup_disable

#!/bin/sh

# /lib/systemd/system-sleep/wakeup_disable
#
# Avoids that system wakes up immediately after suspend or hibernate
#
# Tested on MacBookPro 2015

case $1 in
  pre)
    if grep -qE '^XHC1.*enabled' /proc/acpi/wakeup; then
        echo XHC1 > /proc/acpi/wakeup
    fi
    if grep -qE '^LID0.*enabled' /proc/acpi/wakeup; then
        echo LID0 > /proc/acpi/wakeup
    fi
    ;;
esac

笔记这将防止通过打开盖子或通过键盘/鼠标/USB 设备唤醒,您必须按下电源按钮。

参考:

  1. https://wiki.debian.org/InstallingDebianOn/Apple/MacBookPro/Early-2015-13-inch#Immediate_wakeup_after_sleep

  2. https://wiki.archlinux.org/index.php/MacBookPro11,x

相关内容