PC 暂停后立即唤醒

PC 暂停后立即唤醒

我更换了主板上的纽扣电池,现在我的电脑在挂起后立即唤醒。我正在运行 Ubuntu 20.04.3LTS。

另一个网站的用户表示这可能是由于抑制剂引起的,因此我输入了建议的命令并得到了显示的输出在此屏幕截图中


我找到了部分解决方案Ubuntu 休眠几秒钟后被唤醒

在终端输入 echo EHC1 | sudo tee /proc/acpi/wakeup 可以让暂停功能运行,但我找不到永久的解决方案。

您知道如何永久修复此问题吗?谢谢。

答案1

我刚刚购买了一台新电脑,当我将它放在办公室并连接到显示器时,挂起功能工作正常,但是当我将它移到前厅并连接到电视时,它开始表现出同样的行为,即在进入挂起模式后立即唤醒。

我把问题追溯到电视和电脑通过 HDMI 线之间的 CEC(消费电子控制)信号。我搜索了很多,终于找到了一个确定的永久解决方案。

Linux 有一个文件 /proc/acpi/wakeup,它设置了可以从挂起状态唤醒的设备的状态。您可以发出以下命令:

cat /proc/acpi/wakeup

这将显示已启用或禁用以执行挂起模式唤醒的不同设备。以下是部分示例:

Device  S-state   Status   Sysfs node
PEG1      S4    *disabled
PEGP      S4    *disabled
PEG2      S4    *disabled
PEGP      S4    *disabled
PEG3      S4    *disabled
PEGP      S4    *disabled
PEG0      S4    *enabled   pci:0000:00:06.0
PEGP      S4    *disabled  pci:0000:01:00.0
SIO1      S3    *disabled  pnp:00:00
RP09      S4    *disabled  pci:0000:00:1d.0
PXSX      S4    *enabled   pci:0000:64:00.0
RP10      S4    *disabled
RP11      S4    *disabled
RP12      S4    *disabled
RP13      S4    *disabled
[etc.]

第一列是设备标识符,由制造商设置,可能遵循也可能不遵循 APCI 协议。https://unix.stackexchange.com/questions/236127/acpi-wakeup-4-letters-code-meaning

设备标识符所指的内容并不重要。您可以通过发出以下命令快速获取已启用设备的列表:

cat /proc/acpi/wakeup | grep enabled

您可以通过将设备标识符回显到文件(使用 root 权限)来切换设备的启用和禁用状态。例如,您可以发出命令

sudo sh -c “echo PEG0 > /proc/acpi/wakeup”

设备 PEG0 将被禁用。再次发出该命令,它将再次启用。

我的方法是编写一个脚本,逐个禁用已启用的设备。每次禁用一个设备时,我都会进入挂起模式,看看会发生什么,它是立即重新唤醒还是保持挂起状态。一旦我禁用了一个设备(该设备没有解决问题),我就会将其保持禁用状态,然后转到下一个设备,逐个尝试。在我的脚本文件中,我在测试时注释掉了每个设备,这样它就不会再次被重新启用。一旦我发现我已经达到了正确的挂起状态并且它保持挂起状态,我就会逐个检查之前禁用的设备并重新启用它们,然后每次都进入挂起模式以验证它是否仍在正常工作。如果我发现挂起恢复到之前立即唤醒的方式,我会再次禁用该设备并转到下一个设备。我发现有两个最初已启用的设备,我必须将其保持禁用状态才能使挂起状态正常工作。

现在到了最重要的部分。这些只是测试。Linux 维护一个目录,其中包含进入挂起状态时要执行的文件。此目录是

/usr/lib/systemd/system-sleep

此目录中的文件的所有者:组为根:根和权限755

每个文件将按顺序调用并传递两个参数。第一个参数是文本““ 或者 ”邮政”,具体取决于它是进入挂起模式还是从挂起模式唤醒。第二个参数标识挂起状态,可以是以下之一:“暂停““休眠““混合睡眠“ 或者 ”暂停然后休眠“我们只对第一个参数感兴趣,并且只在进入挂起模式时才感兴趣。第二个参数无关紧要——无论如何,我们都希望唤醒时的系统行为相同。

我们希望使用这种方法在设备进入挂起模式之前立即禁止唤醒,而不是在系统启动时禁止,因为系统可能会在操作期间的某个时间更改此唤醒文件中的参数。此方法可确保相关设备在挂起时处于正确状态。因此,我们需要创建一个脚本文件并将其复制到此目录。我将我的脚本文件命名为“禁用某些唤醒”该文件的格式为:

#! /bin/bash
case $1 in
    pre)
        declare -a devices=(RP09 PXSX) # <-- Add your entries here

        for device in "${devices[@]}"; do
            if $(grep -qw ^${device}.*enabled /proc/acpi/wakeup); then
                echo ${device} > /proc/acpi/wakeup
            fi
        done
    ;;
esac

在此文件中,我们仅处理“”-挂起模式。我们创建了一个要禁用的设备数组,并循环遍历该设备数组。对于每个设备,我们查看唤醒文件以测试它是否已启用,如果已启用,则将其切换为禁用。

请注意,对我有用的设备列表可能与您有用的东西不同。在测试中使用对您有用的任何设备。如果需要,您还可以禁用除受 CEC 信号影响的设备之外的其他设备。

现在复制文件:

sudo cp disable-some-wake /usr/lib/systemd/system-sleep

并更改权限:

sudo chmod 755 /usr/lib/systemd/system-sleep/disable-some-wake

就这样吧。你应该永远善良。

答案2

就我而言,我的系统 (Ubuntu 20.04) 从挂起状态唤醒,因为尝试运行更新但失败了。对我来说,这是 Snap Store 更新,我无法通过软件中心安装,因为它会抛出有关正在运行应用程序的错误。我不得不通过系统监视器关闭 Snap Store,然后运行sudo snap refresh snap-store

看:https://discourse.ubuntu.com/t/how-to-close-the-snap-store-to-allow-snapd-to-update-it/30627

答案3

我遇到了同样的问题,我发现是我的无线鼠标接收器出了问题。我通过将鼠标接收器从 usb3 集线器移到计算机上的 usb2 端口解决了该问题,挂起行为恢复正常。

相关内容