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 验证,比反复调配置有用得多。











