![PC 暂停后立即唤醒](https://linux22.com/image/1186057/PC%20%E6%9A%82%E5%81%9C%E5%90%8E%E7%AB%8B%E5%8D%B3%E5%94%A4%E9%86%92.png)
我更换了主板上的纽扣电池,现在我的电脑在挂起后立即唤醒。我正在运行 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 端口解决了该问题,挂起行为恢复正常。