systemd 作为一个功能强大的新一代 init 系统,功能不仅仅限于启动一系列 daemon ,还接管了日志、电源管理甚至部分的用户登录功能。在切换至 systemd 来管理电源后(卸掉了 pm-utils ,改用专为 Thinkpad 开发的 tlp ),我的 Thinkpad T430s 遇到了休眠后无法关机(使用的命令是 systemctl hibernate ,或者是通过 GNOME 来触发)的问题。经过一番搜索,找到了 /etc/systemd/sleep.conf 这个配置文件,简单设置即可 fix 。

这个文件默认是不存在的,需要自行建立,然后在文件中加入以下配置:

1
2
3
[Sleep]
# A fix for unable to poweroff after hibernation
HibernateMode=shutdown

原理是让内核在休眠后使用普通的关机流程(默认是“platform”,即通过 ACPI 进入 S4 之类的模式,在某些笔记本上可能无法正常工作)。具体详情可以 man systemd-sleep.conf 查看。