合盖睡眠失败 → 激进两段式睡眠(2026-10-29)
1. 故障(19:11 桌面全卡死)
- 19:06:41 拔电,lid-inhibit-ac 释放;19:09:24 合盖,19:09:28 开盖想改超时设置。
- 19:09:41 开盖 13 秒后系统仍硬睡:
Failed to freeze unit 'user.slice': Connection timed out,内核冻用户进程 20 秒超时(9 个KIO::WorkerThreadD-state,全卡fuse_send_open,即 Dolphin 缩略图 + sftp 经 kio-fuse)。 - 19:10:01
Failed to put system to sleep. Device or resource busy,resume 后半死不活 → 所有文件操作排队等 KIO,全卡死。20:23 重启恢复。 - 改电池 60→15 分钟无用:走的是合盖 suspend,不走 idle 超时;且同样会被 kio-fuse 顶回。
2. 用户裁定(逐条,已落地)
- 合盖 / 手动睡 = 最高指令,一切 inhibitor 让路,后果用户承担。
- 睡前正常收拾(弹窗一律 yes 代答),10 秒还没睡进去则强制
echo mem > /sys/power/state。 - D-state 冻之前杀 kio-fuse 本体可解(等的拿 EIO 散场);冻上之后无解,只能等 20 秒超时。
- 残留风险出了再修,不预支复杂度。另:一次打一补丁不可持续,要收敛的健壮逻辑。
3. 落地(/etc/nixos,main a0ebb0b,两次 rebuild 当场验证)
3.1 新模块 modules/system/service/sleep-aggressive.nix
LidSwitchIgnoreInhibited=yes(合盖无视一切锁)、InhibitDelayMaxSec=5(delay 锁封顶)、HoldoffTimeoutSec=5s(5 秒内开盖取消,杜绝 19:09 式开盖后仍硬睡)。sleep-quiesce(powerDownCommands 追加,总预算 <8s):loginctl lock-sessions→ 杀 thumbnail waiter(TERM→KILL)→ 杀 kio-fuse 本体 + 懒卸载残留 →timeout 3 sync。- 10 秒看门狗(后台 fork,三重护栏:时间跳跃 / sleep.target 激活中 / suspend.target 仍激活则不强制),到点仍醒着则强制
echo mem。freezer/驱动 veto 仍绕不过(认)。
3.2 冗余退役(logind.nix,注释标桩,git 可查)
- 删除
lid-inhibit-ac / lid-inhibit-battery两服务 + 交直流切换 udev 触发两行:LidSwitchIgnoreInhibited=yes下一切 handle-lid-switch 锁对合盖失效,留着空转。 HandleLidSwitchDocked: suspend → ignore:合盖+外接屏(书房/办公室)改由原生表达不睡;裸机合盖任何供电一律睡。注意:电池+docked 合盖由"睡"变"不睡",要改回只翻这一行。
4. 验证
/etc/systemd/logind.conf实测含LidSwitchIgnoreInhibited=yes / HoldoffTimeoutSec=5s / InhibitDelayMaxSec=5 / HandleLidSwitchDocked=ignore;sleep-quiesce已在 PATH;lid-inhibit 两单元已消失;systemctl --failed为空。- 未实测:真合盖睡眠全流程(等用户日常使用验证);
/var/log/sleep-quiesce.log首次睡眠后才有。
5. 台账
诊断原文:docs/sleep-freeze-20261029-lid-kio-fuse.md;本次改动已追记该文 §6。