Ubuntu 22.04合盖触发挂起后休眠功能失败,出现'dependency'错误且电池耗尽
Ubuntu 22.04合盖触发挂起后休眠功能失败,出现'dependency'错误且电池耗尽
最近我的Ubuntu 22.04系统的**挂起后休眠(suspend-then-hibernate)**功能突然变得不稳定:明明设置了合盖后触发该功能,结果系统没有正常进入休眠,电池直接耗尽了。经过一番排查,我终于找到了问题所在,分享给遇到类似情况的朋友:
问题现象
- 合盖后系统无法完成挂起后休眠流程,而是反复循环挂起/唤醒,直到电池耗尽
- 直接通过终端执行
systemctl suspend或systemctl hibernate,功能都能正常工作
初始日志分析
我首先用journalctl | grep suspend查看相关日志,发现了关键错误:
Nov 26 05:09:15 XYZ kernel: PM: suspend entry (s2idle) Nov 26 05:09:15 XYZ kernel: PM: suspend exit Nov 26 05:09:15 XYZ systemd[1]: systemd-suspend-then-hibernate.service: Main process exited, code=exited, status=1/FAILURE Nov 26 05:09:15 XYZ systemd[1]: systemd-suspend-then-hibernate.service: Failed with result 'exit-code'. Nov 26 05:09:15 XYZ systemd[1]: suspend-then-hibernate.target: Job suspend-then-hibernate.target/start failed with result 'dependency'. Nov 26 05:09:15 XYZ systemd[1]: systemd-suspend-then-hibernate.service: Consumed 2.151s CPU time. Nov 26 05:09:15 XYZ ModemManager[1057]: <info> [sleep-monitor-systemd] system is about to suspend Nov 26 05:09:15 XYZ systemd-sleep[137140]: Entering sleep state 'suspend'... Nov 26 05:09:15 XYZ kernel: PM: suspend entry (deep) Nov 26 05:09:35 XYZ kernel: PM: suspend exit Nov 26 05:09:35 XYZ kernel: PM: suspend entry (s2idle)
日志显示suspend-then-hibernate.service启动失败,提示依赖问题,且系统反复进入挂起状态又退出,形成循环。
进一步排查:对比手动与合盖触发的日志
为了定位问题,我分别测试了四种场景并保存日志:
- 手动执行
sudo systemctl suspend——正常工作 - 手动执行
sudo systemctl hibernate——正常工作 - 手动执行
sudo systemctl suspend-then-hibernate——正常工作 - 合盖触发
suspend-then-hibernate——失败
对比场景3和场景4的日志,发现了差异:
手动执行suspend-then-hibernate的正常日志片段:
Dez 12 20:52:05 XYZ systemd[1]: Starting Record successful boot for GRUB... Dez 12 20:52:05 XYZ systemd[1]: Starting Suspend; Hibernate if not used for a period of time... Dez 12 20:52:05 XYZ systemd-sleep[8780]: Entering sleep state 'suspend'... Dez 12 20:52:05 XYZ kernel: PM: suspend entry (deep) Dez 12 20:52:26 XYZ kernel: Filesystems sync: 0.006 seconds Dez 12 20:52:26 XYZ kernel: Freezing user space processes Dez 12 20:52:26 XYZ kernel: Freezing user space processes completed (elapsed 0.004 seconds) Dez 12 20:52:26 XYZ kernel: OOM killer disabled. Dez 12 20:52:26 XYZ kernel: Freezing remaining freezable tasks Dez 12 20:52:26 XYZ kernel: Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
合盖触发的失败日志片段:
Dez 12 21:19:10 XYZ systemd[1]: Starting Record successful boot for GRUB... Dez 12 21:19:10 XYZ systemd[1]: Starting Suspend; Hibernate if not used for a period of time... Dez 12 21:19:10 XYZ systemd-sleep[19771]: Entering sleep state 'suspend'... Dez 12 21:19:10 XYZ kernel: PM: suspend entry (deep) Dez 12 21:19:10 XYZ kernel: Filesystems sync: 0.033 seconds Dez 12 21:19:30 XYZ kernel: Freezing user space processes Dez 12 21:19:30 XYZ kernel: Freezing user space processes failed after 20.007 seconds (1 tasks refusing to freeze, wq_busy=0): Dez 12 21:19:30 XYZ kernel: task:modprobe state:D stack:0 pid:19662 ppid:1948 flags:0x00004006 Dez 12 21:19:30 XYZ kernel: Call Trace:
可以看到,合盖触发时,系统无法冻结modprobe进程,导致挂起失败,进而反复循环这个流程,直到电池耗尽。
最终发现的问题与解决方法
经过排查,我发现问题出在之前为解决音频问题而执行的操作上:我经常用pulseaudio -k && sudo alsa force-reload重启音频服务,这个操作的残留进程在后台运行,导致合盖时系统无法正常冻结进程,从而阻碍了挂起后休眠的正常执行。
重启系统后再测试合盖触发功能,发现suspend-then-hibernate恢复正常,验证了这个结论。
备注:内容来源于stack exchange,提问作者yuccapalm
相关产品推荐
相关产品推荐

