Linux休眠将系统状态保存到硬盘后完全断电,恢复时从硬盘加载;挂起则保持内存供电进入低功耗状态,可快速唤醒但持续耗电,休眠适合长时间断电,挂起适合短时离开。
在深入设置之前,明确 Linux 中两种主要的节能状态至关重要,因为它们的设置方式不同:
-
挂起 (Suspend / Sleep to RAM –
suspend
):- 原理: 将系统当前状态(内存内容)保存在 RAM 中,关闭除 RAM 之外的大部分硬件(CPU、硬盘、屏幕等)的供电,RAM 需要持续少量供电来保持数据。
- 特点: 唤醒速度非常快(几秒钟),耗电量低(但并非为零),如果断电(如拔掉笔记本电源且电池耗尽),未保存的工作会丢失。
- 常见操作: 合上笔记本盖子、按下电源按钮选择“睡眠”、系统设置中的“暂停”选项。
-
休眠 (Hibernate –
hibernate
):- 原理: 将系统当前状态(内存内容)完整地写入到硬盘(通常是 Swap 交换分区或 Swap 文件)中,然后完全关闭计算机电源。
- 特点: 唤醒速度较慢(需要从硬盘读取数据回内存),但唤醒后能恢复到休眠前的精确状态,完全断电后数据也不会丢失,因为状态保存在硬盘上。
- 常见操作: 系统设置中的“休眠”选项、特定命令。
用户通常关心的“休眠时间设置”主要涉及:
- 自动进入挂起/休眠的等待时间: 当系统闲置(无用户操作)一段时间后,自动触发挂起或休眠。
- 合上笔记本盖子时的行为: 合盖后是执行挂起、休眠还是什么都不做。
- 按下电源按钮时的行为: 短按电源按钮是执行挂起、休眠、关机还是弹出菜单。
- 当电池电量极低时的行为: 是执行挂起、休眠还是强制关机。
如何设置这些时间或行为?
设置方法主要取决于你使用的 桌面环境 (Desktop Environment, DE) 或 系统管理工具,以下介绍主流方法:
通过图形化系统设置 (推荐给大多数桌面用户)
这是最简单直观的方式,适用于 GNOME, KDE Plasma, Xfce, Cinnamon, MATE 等主流桌面环境,具体路径大同小异:
- 打开“系统设置” (System Settings)。 通常在应用程序菜单中能找到。
- 寻找“电源管理” (Power Management)、“节能” (Energy Saving) 或“电源” (Power) 相关选项。
- 查找以下关键设置项:
- 屏幕关闭时间 (Turn off the screen / Blank screen): 设置显示器在无操作后关闭的时间,这通常独立于挂起/休眠。
- 自动挂起/暂停 (Automatic Suspend / Sleep):
- 使用电池时 (On Battery Power): 设置笔记本在使用电池供电时,闲置多久后自动挂起。
- 接通电源时 (Plugged In): 设置笔记本在连接电源适配器时,闲置多久后自动挂起。
- 选项: 通常有“从不”、“5分钟”、“10分钟”、“15分钟”、“30分钟”、“1小时”、“2小时”等,选择你需要的时长。
- 自动休眠 (Automatic Hibernate): 注意:并非所有发行版或桌面环境都直接在图形界面提供此选项。 如果提供,设置逻辑与自动挂起类似,但时间通常更长(在挂起一段时间后自动转入休眠以进一步省电)。
- 合上盖子时的行为 (When the lid is closed):
- 使用电池时: 选择合盖后执行的操作(如“挂起”、“休眠”、“关机”、“不执行任何操作”)。
- 接通电源时: 同上。
- 按下电源按钮时的行为 (When the power button is pressed): 设置短按电源按钮的操作(如“挂起”、“休眠”、“关机”、“弹出菜单”、“不执行任何操作”)。
- 低电量操作 (Critical Battery Action): 设置当电池电量降至极低水平(如 3%-5%)时执行的操作(通常是“挂起”、“休眠”或“关机”),同时可以设置触发该操作的电量阈值。
使用 systemd
的 sleep.conf
文件 (适用于所有支持 systemd 的系统)
systemd
是现代 Linux 发行版的核心系统和服务管理器,它可以更精细地控制挂起和休眠的行为,包括设置挂起延迟后自动转入休眠的时间(这是实现“休眠时间”的关键之一)。
-
创建或编辑配置文件: 使用具有管理员权限的文本编辑器(如
sudo nano
或sudo gedit
)打开或创建文件:sudo nano /etc/systemd/sleep.conf
-
配置关键参数: 在文件中添加或修改
[Sleep]
部分,最重要的参数是:HibernateDelaySec=
: 指定系统在挂起 (suspend) 状态持续多少秒后,自动转入休眠 (hibernate),这对于希望挂起一段时间后彻底断电省电非常有用。HibernateDelaySec=1h
(1小时后转入休眠),HibernateDelaySec=30min
(30分钟后转入休眠)。
- 其他可能相关的参数(根据需求):
SuspendMode=
: 指定挂起模式 (suspend
,deep
,shallow
– 取决于硬件支持)。SuspendState=
: 指定挂起时进入的 ACPI 状态 (mem
,standby
– 通常用mem
)。HibernateMode=
: 指定休眠模式 (platform
,shutdown
– 通常用platform
)。HibernateState=
: 指定休眠时进入的 ACPI 状态 (disk
)。
示例
/etc/systemd/sleep.conf
片段:[Sleep] # 挂起后 2 小时自动转入休眠 HibernateDelaySec=2h # 使用深度挂起 (如果硬件支持) SuspendMode=deep SuspendState=mem HibernateMode=platform HibernateState=disk
-
保存并退出编辑器。
-
重启
systemd-logind
服务使更改生效 (通常不是必须,但有时需要):sudo systemctl restart systemd-logind.service
使用 systemd
的 logind.conf
文件 (控制用户会话行为)
这个文件控制当用户执行特定操作(如合盖、按电源键)或系统处于特定状态(如空闲)时,systemd-logind
服务的行为。
-
创建或编辑配置文件:
sudo nano /etc/systemd/logind.conf
-
配置关键参数: 找到并取消注释(删除行首的 )或添加以下行,并设置所需的值:
- 处理盖子开关:
HandleLidSwitch=
: 合上盖子时的操作 (suspend
,hibernate
,poweroff
,ignore
等)。HandleLidSwitchExternalPower=
: 当连接外部电源时合上盖子的操作(覆盖HandleLidSwitch
)。HandleLidSwitchDocked=
: 当系统被认为处于“Docked”(扩展坞)状态时合上盖子的操作。
- 处理电源键:
HandlePowerKey=
: 按下电源键时的操作 (suspend
,hibernate
,poweroff
,reboot
,halt
,kexec
,ignore
等)。
- 处理挂起键和休眠键 (如果有):
HandleSuspendKey=
,HandleHibernateKey=
: 类似。
- 空闲行为 (与图形界面设置类似):
IdleAction=
: 当系统检测到空闲时执行的操作 (suspend
,hibernate
,poweroff
,reboot
,halt
,ignore
等)。IdleActionSec=
: 系统空闲多少秒后执行IdleAction
。IdleActionSec=15min
。
- 低电量处理:
HandleLowPower=
: 当电池电量达到LowPowerPercentage
或LowPowerVoltage
时执行的操作 (suspend
,hibernate
,poweroff
,ignore
等)。LowPowerPercentage=
,LowPowerVoltage=
: 定义“低电量”的阈值。CriticalPowerAction=
: 当电池电量达到CriticalPowerPercentage
或CriticalPowerVoltage
时执行的操作 (suspend
,hibernate
,poweroff
,ignore
等)。CriticalPowerPercentage=
,CriticalPowerVoltage=
: 定义“严重低电量”的阈值。
示例
/etc/systemd/logind.conf
片段:[Login] # 合盖时休眠 HandleLidSwitch=hibernate # 连接电源时合盖也休眠 (明确指定) HandleLidSwitchExternalPower=hibernate # 短按电源键弹出操作菜单 HandlePowerKey=ignore # 或者设置为 poweroff/shutdown 等 # 空闲 30 分钟后挂起 IdleAction=suspend IdleActionSec=30min # 电量低于 10% 时挂起,低于 5% 时强制休眠 HandleLowPower=suspend LowPowerPercentage=10 CriticalPowerAction=hibernate CriticalPowerPercentage=5
- 处理盖子开关:
-
保存并退出编辑器。
-
重启
systemd-logind
服务使更改生效:sudo systemctl restart systemd-logind.service
重要前提:确保休眠功能正常工作
- 足够的 Swap 空间: 休眠要求 Swap 空间(分区或文件)的大小至少等于或大于你当前系统的物理内存 (RAM) 大小,使用
free -h
或swapon --show
检查 Swap 大小和内存大小。 - 内核参数配置 (通常自动): 大多数现代发行版会自动配置内核参数 (
resume=...
和resume_offset=...
对于 Swap 文件) 来指向正确的 Swap 位置,如果休眠失败,可能需要检查/etc/default/grub
中的GRUB_CMDLINE_LINUX_DEFAULT
行是否包含类似resume=UUID=your-swap-uuid
的参数,然后运行sudo update-grub
(或发行版对应的命令),使用sudo findmnt -no UUID -T /swapfile
(如果是 Swap 文件) 或sudo blkid
查找 Swap 分区的 UUID。 - 内核支持: 确保内核启用了休眠支持(通常默认开启)。
- 硬件支持: 极少数老旧或特殊硬件可能对休眠支持不佳。
测试休眠
在依赖休眠功能前,务必手动测试:
- 保存所有工作。
- 打开一个终端,运行
sudo systemctl hibernate
。 - 系统应该将内存写入 Swap 并关机。
- 重新开机,如果一切正常,系统应该恢复到休眠前的状态。
设置 Linux 的“休眠时间”或节能行为,核心在于理解需求是设置自动挂起/休眠的等待时间,还是特定触发事件(合盖、按键、低电量)的行为。
- 桌面用户首选: 使用图形化的“系统设置” > “电源管理”进行配置,最直观方便。
- 需要挂起后延迟休眠: 配置
/etc/systemd/sleep.conf
中的HibernateDelaySec=
。 - 需要精细控制事件触发行为或系统级空闲策略: 配置
/etc/systemd/logind.conf
中的相关参数 (HandleLidSwitch
,IdleAction
,IdleActionSec
,HandleLowPower
等)。 - 基础前提: 务必确保 Swap 空间足够大且休眠功能已正确配置和测试通过。
请根据你的具体需求和使用场景选择合适的方法进行配置,修改系统配置文件时请谨慎操作。
引用与参考说明:
systemd
官方文档是这些配置的权威来源:systemd-sleep(8)
手册页 (man systemd-sleep
) – 详细说明/etc/systemd/sleep.conf
的选项。logind.conf(5)
手册页 (man logind.conf
) – 详细说明/etc/systemd/logind.conf
的所有选项及其含义。systemd-logind(8)
手册页 (man systemd-logind
) – 概述systemd-logind
服务及其功能。
- 主流桌面环境 (GNOME, KDE Plasma 等) 的官方文档或帮助中心通常会说明其图形化电源设置的具体位置和选项。
- Linux 内核文档 (
Documentation/power/
目录) 提供了关于挂起和休眠机制的低层细节(适合高级用户或开发者)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4909.html