![Linux 在电源插孔插入或拔出时从睡眠状态唤醒](https://linux22.com/image/218626/Linux%20%E5%9C%A8%E7%94%B5%E6%BA%90%E6%8F%92%E5%AD%94%E6%8F%92%E5%85%A5%E6%88%96%E6%8B%94%E5%87%BA%E6%97%B6%E4%BB%8E%E7%9D%A1%E7%9C%A0%E7%8A%B6%E6%80%81%E5%94%A4%E9%86%92.png)
我在 Lenovo IdeaPad 5 Pro 14ACN6 上有一个新的 Linux Mint Xfce 21.1。当我关闭和打开盖子时,睡眠/唤醒工作正常,但有一个问题:睡眠唤醒操作系统时插入或拔出电源。我通过停止呼吸并亮起的“呼吸”LED 检测到醒来。
我需要一种方法来防止笔记本电脑因电源插拔事件而被唤醒。
为了自己解决这个问题,我检查了 BIOS 上与从睡眠中唤醒相关的每个选项。然后我在Linux的电源管理器中做了同样的事情。这没有帮助。
我尝试更改内核(5.15、5.19)。
我尝试调试ACPI来找到触发唤醒的事件。 ACPI调试级别和调试事件有丰富的设置,根据https://mjmwired.net/kernel/Documentation/acpi/debug.txt#115遗憾的是,日志记录要么没有提供任何信息,要么提供了太多带有内存访问地址的信息。所以我无法识别设置名称及其位置来关闭唤醒触发器。
我还找到了一个用于调试 ACPI 的简洁资源:https://wiki.ubuntu.com/Kernel/Reference/ACPITricksAndTips主要思想是 ACPi 调试并不容易。 ALS ACPI 语言被编译成 AML 代码,可以对其进行反汇编和分析,以查找供应商特定硬件的各种问题。但提到了一些工具,例如 acpidump。我试着跑acpi_监听合上盖子并拔掉电源后得到此日志:
acpi_listen
button/lid LID close
ac_adapter ACPI0003:00 00000080 00000000
battery PNP0C0A:00 00000080 00000001
button/lid LID open
因此,显然有些电池事件不应该触发唤醒,但却会触发唤醒。
有一些有关睡眠模式的信息:https://news.ycombinator.com/item?id=25387947看来我的问题可能与“现代睡眠”S0ix 状态有关,即睡眠时不会关闭 CPU。但没有选项可以将其关闭。支持的睡眠状态为 S0 S4 S5:
dmesg |grep -i acpi| grep supports
[ 0.285799] ACPI: PM: (supports S0 S4 S5)
[ 0.322305] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI EDR HPX-Type3]
答案1
经过额外的挖掘,我在这里找到了答案:https://wiki.archlinux.org/title/Lenovo_IdeaPad_5_14are05
原来,联想在BIOS中有很多隐藏的设置。您可以通过以下方式打开它们:
- 在 BIOS 设置中关闭 OneKeyBattery 模式(如果已启用),然后保存 BIOS 设置。
- 关闭笔记本电脑的电源。
- 在笔记本电脑关闭的情况下键入:
F1
1
Q
A
Z
F2
2
W
S
X
F3
3
E
D
C
F4
4
R
F
V
F5
5
T
G
B
F6
6
Y
H
N
。您可能会注意到这种组合不是随机的。 F2
开机后按一下即可进入BIOS 。
在AMD PBS
部分中必须S3/Modern Standby Support
将其从 更改Modern Standby Enable
为S3
。