Ubuntu如何设置自动关机休眠时长
在 Ubuntu 里,其实并没有一个统一叫“自动关机休眠时长”的设置。shutdown 负责的是定时执行硬关机,比如 sudo shutdown -h +30;而空闲一段时间后进入挂起或休眠,则由 systemd-logind 的 IdleAction 来控制,这通常需要修改 /etc/system
在 Ubuntu 里,其实并没有一个统一叫“自动关机休眠时长”的设置。shutdown 负责的是定时执行硬关机,比如 sudo shutdown -h +30;而空闲一段时间后进入挂起或休眠,则由 systemd-logind 的 IdleAction 来控制,这通常需要修改 /etc/systemd/logind.conf 并重启服务。说白了,这两套机制各管一摊,彼此是独立的。

Ubuntu 里没有“自动关机休眠时长”这个统一概念——shutdown 是硬关机,systemd-logind 管的 IdleAction 是空闲后挂起/休眠,两者互不干扰。你得先分清自己要的是哪一种行为,再选对应机制。
用 shutdown 定时关机:只关电,不进休眠
这是最直接的“到点断电”,不保存状态、不依赖休眠支持,适合跑完任务就彻底停机的场景。
sudo shutdown -h +30表示 30 分钟后关机;sudo shutdown -h 22:00表示今晚 10 点整关机- 定时任务要用
crontab -e,写成0 22 * * * /sbin/shutdown -h now(每天 22:00 关机),注意路径必须用绝对路径/sbin/shutdown - 别用
shutdown -r混淆重启逻辑;取消任务用sudo shutdown -c,不是kill进程 - 虚拟机里执行
shutdown可能被 VirtualBox 拦截(尤其启用了“自动关闭”策略),此时需检查 VirtualBox 设置里的“系统 → 加速 → 启用 EFI”和“电源管理”是否冲突
用 logind.conf 控制空闲后动作:挂起 or 休眠
这是真正意义上的“自动休眠”逻辑,由 systemd-logind 监控用户活动,触发 IdleAction。它不等于关机,但常被误称为“自动关机休眠”。
- 编辑
/etc/systemd/logind.conf,取消注释并修改:IdleAction=lock改为IdleAction=hibernate或IdleAction=suspend;IdleActionSec=30min设为空闲阈值(单位支持s、min、h) - 改完必须运行
sudo systemctl restart systemd-logind,否则不生效;systemctl status systemd-logind可确认服务状态 - 休眠(
hibernate)需提前验证:运行sudo pm-hibernate测试能否成功进出,失败则说明 swap 不足或内核不支持,此时设成suspend更稳妥 - 图形界面设置(如“电源 → 自动挂起”)只是改了同一组底层配置,优先级低于
logind.conf;若 GUI 里改了没反应,大概率是配置文件里被覆盖了
图形界面里关掉“5 分钟自动休眠”的真实路径
很多人抱怨“一离开就锁屏/休眠”,其实根源不在休眠本身,而在屏幕锁定与电源策略耦合。Ubuntu 默认把“屏幕关闭”和“系统挂起”绑在一起,且优先级混乱。
- 打开“设置 → 电源”,把
自动挂起设为从不(注意不是“屏幕关闭”选项) - 再进“设置 → 屏幕保护程序”,把
激活屏幕保护程序关闭,或设为远大于挂起时间(比如 30 分钟),否则屏幕保护一启动,就会强制触发锁屏+挂起联动 - GNOME 环境下,
dconf直接更底层:gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0(交流电下禁用空闲休眠) - 如果用了第三方桌面(如 XFCE、KDE),它们各自维护独立电源模块,
logind.conf可能被绕过,得去对应面板里关
更容易被忽视的,其实是这件事:IdleAction=hibernate 能不能生效,前提很硬——swap 分区至少得和 RAM 一样大,同时内核还必须启用 CONFIG_HIBERNATION=y。不少云镜像,或者精简版 Ubuntu,默认就把休眠支持关掉了,这种情况下即便配上也基本不起作用。与其来回折腾配置,不如先直接跑一遍 sudo pm-hibernate 做验证,这往往更管用。


































