Hen*_*nry 13 battery suspend wakeup
我更换了主板上的纽扣电池,现在我的电脑在挂起后立即唤醒。我运行的是 Ubuntu 20.04.3LTS。
另一个站点的用户表示这可能是由于抑制剂造成的,因此我输入了建议的命令并得到了此屏幕截图中显示的输出
我发现 Ubuntu 的部分解决方案在睡眠几秒后醒来
输入 echo EHC1 | 终端中的 sudo tee /proc/acpi/wakeup 允许挂起功能,但我找不到永久的解决方案。
您知道如何永久修复此问题吗?谢谢。
我刚刚购买了一台新电脑,当我把它放在办公室连接到显示器时,挂起工作正常,但是当我将它移到我的前室并将其连接到电视时,它开始表现出同样的行为,即在它之后立即唤醒进入挂起模式。
\n我将问题追溯到电视和电脑之间通过 HDMI 电缆传输的 CEC(消费电子控制)信号。我做了很多搜索,找到了一个明确且永久的解决方案。
\nLinux 有一个文件 /proc/acpi/wakeup ,用于设置可以从挂起状态唤醒的设备的状态。您可以发出命令:
\ncat /proc/acpi/wakeup\n
Run Code Online (Sandbox Code Playgroud)\n这将显示启用或禁用以从挂起模式唤醒的不同设备。这里\xe2\x80\x99s是一个部分示例:
\nDevice S-state Status Sysfs node\nPEG1 S4 *disabled\nPEGP S4 *disabled\nPEG2 S4 *disabled\nPEGP S4 *disabled\nPEG3 S4 *disabled\nPEGP S4 *disabled\nPEG0 S4 *enabled pci:0000:00:06.0\nPEGP S4 *disabled pci:0000:01:00.0\nSIO1 S3 *disabled pnp:00:00\nRP09 S4 *disabled pci:0000:00:1d.0\nPXSX S4 *enabled pci:0000:64:00.0\nRP10 S4 *disabled\nRP11 S4 *disabled\nRP12 S4 *disabled\nRP13 S4 *disabled\n[etc.]\n
Run Code Online (Sandbox Code Playgroud)\n第一列是设备标识符,这些由制造商设置,可能遵循也可能不遵循 APCI 协议。https://unix.stackexchange.com/questions/236127/acpi-wakeup-4-letters-code-meaning
\n设备标识符所指的内容只是最不重要的。您可以通过发出以下命令来获取已启用的快速列表:
\ncat /proc/acpi/wakeup | grep enabled\n
Run Code Online (Sandbox Code Playgroud)\n您可以通过将设备标识符回显到文件(具有 root 权限)来在设备的启用和禁用状态之间切换。例如你可以发出命令
\nsudo sh -c \xe2\x80\x9cecho PEG0 > /proc/acpi/wakeup\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n并且设备 PEG0 将被禁用。再次发出该命令,它将再次启用。
\n我的方法是编写一个脚本来一一禁用已启用的设备。每次我禁用一个时,我都会进入挂起模式,看看发生了什么,它是立即重新唤醒还是保持挂起状态。一旦我禁用了一个设备(一个没有\xe2\x80\x99解决问题的设备),我就将其禁用并移至下一个,逐一尝试。在我的脚本文件中,我只是在测试时注释掉了每一个,这样它就不会再次重新启用\xe2\x80\x99。一旦我发现我已经达到了正确的挂起状态并且它保持挂起状态,我就会检查之前禁用的设备并逐一重新启用它们,然后每次进入挂起模式以验证它是否仍然正常工作。如果我发现挂起恢复到它\xe2\x80\x99s以前立即唤醒的方式,我会再次禁用该设备并继续使用下一个设备。我发现有两个设备最初已启用,我必须将其禁用才能使挂起状态正常工作。
\n现在是最重要的部分。这只是测试而已。Linux 维护一个目录,其中包含在进入挂起状态时要执行的文件。这个目录是
\n/usr/lib/systemd/system-sleep\n
Run Code Online (Sandbox Code Playgroud)\n此目录中的文件具有 root: root的所有者:组和权限755。
\n每个文件将按顺序调用并传递两个参数。第一个参数是文本 \xe2\x80\x9c pre \xe2\x80\x9d 或 \xe2\x80\x9c post ,\xe2\x80\x9d 分别取决于它是进入挂起模式还是从中唤醒。第二个参数标识挂起状态,可以是以下之一: \xe2\x80\x9c suspend \xe2\x80\x9d \xe2\x80\x9c hibernate \xe2\x80\x9d \xe2\x80\x9c Hybrid-sleep \xe2\ x80\x9d 或 \xe2\x80\x9c suspend-then-hibernate。\xe2\x80\x9d 我们只对第一个参数感兴趣,并且仅当我们进入挂起模式时。第二个参数并不重要 \xe2\x80\x99\xe2\x80\x93 我们希望唤醒时的系统行为是相同的。
\n我们希望使用这种方法在进入挂起模式之前立即禁止设备唤醒,而不是在系统启动时唤醒,因为系统可能会在操作过程中的某个时间更改此唤醒文件中的参数。此方法可确保感兴趣的设备在挂起时处于正确的状态。所以我们需要创建一个脚本文件并将其复制到该目录中。我把我的 \xe2\x80\x9c disable-some-wake 称为\xe2\x80\x9d 。\xe2\x80\x9d 该文件的格式是:
\n#! /bin/bash\ncase $1 in\n pre)\n declare -a devices=(RP09 PXSX) # <-- Add your entries here\n\n for device in "${devices[@]}"; do\n if $(grep -qw ^${device}.*enabled /proc/acpi/wakeup); then\n echo ${device} > /proc/acpi/wakeup\n fi\n done\n ;;\nesac\n
Run Code Online (Sandbox Code Playgroud)\n在此文件中,我们\xe2\x80\x99仅适用于\xe2\x80\x9c pre \xe2\x80\x9d-挂起模式的情况。我们\xe2\x80\x99创建了一个我们想要禁用的设备数组,并循环遍历该设备数组。对于每个设备,我们查看唤醒文件以测试它是否已启用,如果是,则将其切换为禁用。
\n请注意,适合我的设备列表可能与适合您的设备列表不同。在测试中使用任何对你有用的东西。如果需要,您还可以禁用除受 CEC 信号影响的设备之外的其他设备。
\n现在复制文件:
\nsudo cp disable-some-wake /usr/lib/systemd/system-sleep\n
Run Code Online (Sandbox Code Playgroud)\n并更改权限:
\nsudo chmod 755 /usr/lib/systemd/system-sleep/disable-some-wake\n
Run Code Online (Sandbox Code Playgroud)\n那\xe2\x80\x99就是它。你应该永远善良。
\n 归档时间: |
|
查看次数: |
5898 次 |
最近记录: |