[!Tip] 其实最主要的就是看一下电源管理那里的就是不要设置成混合睡眠(hybrid sleep)这种 直接设置成suspend to RAM
Arch Linux(KDE Plasma + Wayland)盖上笔记本自动关机 / 睡死问题排查笔记
问题现象
盖上笔记本盖后,系统本应执行 suspend to RAM(睡眠),但实际上直接进入 hibernate(休眠到磁盘) 或 自动关机。
日志显示类似:
Lid closed
The system will hibernate now!
这表明系统并未执行 suspend,而是触发了 hibernate。
症状表现为:
-
盖上盖子后风扇停转、完全断电。
-
唤醒时不是快速恢复,而是重新开机。
-
有时表现为“睡死”,无法唤醒。
原因分析
1. KDE Plasma 覆盖了 systemd-logind 的行为
KDE 的电源管理守护进程 PowerDevil 会通过 D-Bus 拦截盖盖子事件,可能设置为:
-
“休眠”(Hibernate)
-
“关机”(Shut down) 即使
/etc/systemd/logind.conf中设置为HandleLidSwitch=suspend,KDE 的设置仍可能覆盖。
2. systemd 启用了 suspend-then-hibernate 模式
systemd 可能配置为在 suspend 一段时间后自动转入 hibernate。
若延迟时间设置太短(甚至为 0),系统会“立即”从 suspend 转入 hibernate,看起来像直接关机。
3. logind.conf 配置未生效或被覆盖
可能的情况:
-
配置行仍被注释(以
#开头)。 -
修改后未重启
systemd-logind服务。 -
/etc/systemd/logind.conf.d/目录中存在覆盖文件。
4. suspend 或 hibernate 功能异常
常见问题:
-
suspend 无法进入或立即唤醒 → ACPI/驱动问题。
-
hibernate 无法恢复 → resume 参数或 swap 设置错误。
-
suspend 失败 → 系统自动 fallback 到 hibernate 或 poweroff。
5. 硬件 / 内核兼容问题
部分内核版本(尤其是新 LTS 版或部分 Intel GPU)在 Wayland 环境下 suspend 存在兼容性问题。
若 suspend 失败,系统可能直接执行 fallback:
suspend → failed → hibernate → poweroff
解决步骤
目标
让盖上盖子时系统执行可靠的 suspend(睡眠到内存),而非自动关机或休眠到磁盘。
1. 调整 KDE Plasma 设置(最常见原因)
路径:
系统设置 → 电源管理 → 节能(Energy Saving)
在以下两处修改:
-
“使用电源时”(On AC Power)
-
“使用电池时”(On Battery)
选项 “盖上笔记本盖时”(When laptop lid closed):
-
设置为 Sleep(睡眠)
-
不要选择 Hibernate 或 Shut down
-
避免选择 Do nothing
保存后:
systemctl --user restart org_kde_powerdevil
若仍异常,可临时停用 PowerDevil 以测试:
systemctl --user stop org_kde_powerdevil
2. 禁用 systemd 的混合睡眠 / 自动休眠
创建配置文件:
sudo mkdir -p /etc/systemd/sleep.conf.d/
sudo nano /etc/systemd/sleep.conf.d/disable-hybrid.conf
添加内容:
[Sleep]
AllowSuspendThenHibernate=no
AllowHybridSleep=no
AllowHibernation=yes
HibernateDelaySec=3600
保存并重启服务:
sudo systemctl restart systemd-logind
测试:
systemctl suspend
确认进入的是 suspend,而非 hibernate。
3. 检查 logind.conf 配置
编辑:
sudo nano /etc/systemd/logind.conf
确保以下行被取消注释(去掉 #):
HandleLidSwitch=suspend
HandleLidSwitchDocked=ignore
HandleLidSwitchExternalPower=suspend
LidSwitchIgnoreInhibited=no
保存并重启:
sudo systemctl restart systemd-logind
查看是否生效:
loginctl show-logind | grep HandleLid
4. 测试 suspend 与 hibernate
测试 suspend
systemctl suspend
若失败或立即唤醒,查看日志:
journalctl -b -u systemd-suspend
修复方式:
-
强制使用 deep 模式:
echo deep | sudo tee /sys/power/mem_sleep永久写入:
[Sleep] MemorySleepMode=deep写入
/etc/systemd/sleep.conf。 -
移除外接 USB、更新内核:
sudo pacman -Syu linux linux-headers
测试 hibernate(若想保留)
systemctl hibernate
若失败,检查:
-
swap 分区或文件存在:
swapon --show -
/etc/mkinitcpio.conf中HOOKS含有resume -
/etc/default/grub加入:GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=UUID=<swap分区UUID>" -
更新配置:
sudo mkinitcpio -P sudo grub-mkconfig -o /boot/grub/grub.cfg
若 hibernate 导致“睡死”,可禁用:
sudo systemctl mask hibernate.target hybrid-sleep.target
5. 进一步排查
查看盖盖子事件日志:
journalctl -b -u systemd-logind -u systemd-suspend
检查唤醒源:
cat /proc/acpi/wakeup
禁用不需要的:
echo LID0 > /proc/acpi/wakeup
查看电源状态:
upower -d
更新系统:
sudo pacman -Syu
若问题持续,可尝试:
-
使用
linux-zen或linux-lts内核 -
设置
LidSwitchIgnoreInhibited=no强制 logind 响应盖子事件
总结
| 问题类型 | 主要原因 | 解决方案 |
|---|---|---|
| 盖盖子直接关机 | KDE 触发 Hibernate | 修改 KDE 电源设置为 Sleep |
| 睡眠一会自动关机 | 启用 suspend-then-hibernate | 禁用 AllowSuspendThenHibernate |
| 盖盖子无反应 | logind.conf 被 KDE 抑制 | LidSwitchIgnoreInhibited=no |
| 睡死无法唤醒 | ACPI / 内核问题 | 强制 deep 模式、更新内核 |
| 无法休眠恢复 | resume 参数错误 | 修复 GRUB 与 initramfs 配置 |