Linux休眠与挂起究竟有何区别?

Linux休眠将系统状态保存到硬盘后完全断电,恢复时从硬盘加载;挂起则保持内存供电进入低功耗状态,可快速唤醒但持续耗电,休眠适合长时间断电,挂起适合短时离开。

在深入设置之前,明确 Linux 中两种主要的节能状态至关重要,因为它们的设置方式不同:

  1. 挂起 (Suspend / Sleep to RAM – suspend):

    • 原理: 将系统当前状态(内存内容)保存在 RAM 中,关闭除 RAM 之外的大部分硬件(CPU、硬盘、屏幕等)的供电,RAM 需要持续少量供电来保持数据。
    • 特点: 唤醒速度非常快(几秒钟),耗电量低(但并非为零),如果断电(如拔掉笔记本电源且电池耗尽),未保存的工作会丢失。
    • 常见操作: 合上笔记本盖子、按下电源按钮选择“睡眠”、系统设置中的“暂停”选项。
  2. 休眠 (Hibernate – hibernate):

    • 原理: 将系统当前状态(内存内容)完整地写入到硬盘(通常是 Swap 交换分区或 Swap 文件)中,然后完全关闭计算机电源。
    • 特点: 唤醒速度较慢(需要从硬盘读取数据回内存),但唤醒后能恢复到休眠前的精确状态,完全断电后数据也不会丢失,因为状态保存在硬盘上。
    • 常见操作: 系统设置中的“休眠”选项、特定命令。

用户通常关心的“休眠时间设置”主要涉及:

  1. 自动进入挂起/休眠的等待时间: 当系统闲置(无用户操作)一段时间后,自动触发挂起或休眠。
  2. 合上笔记本盖子时的行为: 合盖后是执行挂起、休眠还是什么都不做。
  3. 按下电源按钮时的行为: 短按电源按钮是执行挂起、休眠、关机还是弹出菜单。
  4. 当电池电量极低时的行为: 是执行挂起、休眠还是强制关机。

如何设置这些时间或行为?

设置方法主要取决于你使用的 桌面环境 (Desktop Environment, DE)系统管理工具,以下介绍主流方法:

通过图形化系统设置 (推荐给大多数桌面用户)

这是最简单直观的方式,适用于 GNOME, KDE Plasma, Xfce, Cinnamon, MATE 等主流桌面环境,具体路径大同小异:

  1. 打开“系统设置” (System Settings)。 通常在应用程序菜单中能找到。
  2. 寻找“电源管理” (Power Management)、“节能” (Energy Saving) 或“电源” (Power) 相关选项。
  3. 查找以下关键设置项:
    • 屏幕关闭时间 (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%)时执行的操作(通常是“挂起”、“休眠”或“关机”),同时可以设置触发该操作的电量阈值

使用 systemdsleep.conf 文件 (适用于所有支持 systemd 的系统)

systemd 是现代 Linux 发行版的核心系统和服务管理器,它可以更精细地控制挂起和休眠的行为,包括设置挂起延迟后自动转入休眠的时间(这是实现“休眠时间”的关键之一)。

  1. 创建或编辑配置文件: 使用具有管理员权限的文本编辑器(如 sudo nanosudo gedit)打开或创建文件:

    sudo nano /etc/systemd/sleep.conf
  2. 配置关键参数: 在文件中添加或修改 [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
  3. 保存并退出编辑器。

  4. 重启 systemd-logind 服务使更改生效 (通常不是必须,但有时需要):

    sudo systemctl restart systemd-logind.service

使用 systemdlogind.conf 文件 (控制用户会话行为)

这个文件控制当用户执行特定操作(如合盖、按电源键)或系统处于特定状态(如空闲)时,systemd-logind 服务的行为。

  1. 创建或编辑配置文件:

    sudo nano /etc/systemd/logind.conf
  2. 配置关键参数: 找到并取消注释(删除行首的 )或添加以下行,并设置所需的值:

    • 处理盖子开关:
      • 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=: 系统空闲多少秒后执行 IdleActionIdleActionSec=15min
    • 低电量处理:
      • HandleLowPower=: 当电池电量达到 LowPowerPercentageLowPowerVoltage 时执行的操作 (suspend, hibernate, poweroff, ignore 等)。
      • LowPowerPercentage=, LowPowerVoltage=: 定义“低电量”的阈值。
      • CriticalPowerAction=: 当电池电量达到 CriticalPowerPercentageCriticalPowerVoltage 时执行的操作 (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
  3. 保存并退出编辑器。

  4. 重启 systemd-logind 服务使更改生效:

    sudo systemctl restart systemd-logind.service

重要前提:确保休眠功能正常工作

  • 足够的 Swap 空间: 休眠要求 Swap 空间(分区或文件)的大小至少等于或大于你当前系统的物理内存 (RAM) 大小,使用 free -hswapon --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。
  • 内核支持: 确保内核启用了休眠支持(通常默认开启)。
  • 硬件支持: 极少数老旧或特殊硬件可能对休眠支持不佳。

测试休眠

在依赖休眠功能前,务必手动测试:

  1. 保存所有工作。
  2. 打开一个终端,运行 sudo systemctl hibernate
  3. 系统应该将内存写入 Swap 并关机。
  4. 重新开机,如果一切正常,系统应该恢复到休眠前的状态。

设置 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

(0)
酷番叔酷番叔
上一篇 2025年6月18日 14:18
下一篇 2025年6月18日 14:51

相关推荐

  • Linux如何指定IP访问网站?

    指定本地源IP访问网站(多网卡场景)当主机有多个IP(如多个网卡或虚拟IP),需指定某个IP作为请求源时:使用 curl 命令curl –interface <本地IP> http://example.com示例:通过IP 168.1.100 访问百度 curl –interface 192.1……

    2025年7月13日
    3300
  • 副业月入过万可能吗

    人工智能是模拟人类智能的技术系统;应用于医疗、交通、制造等领域;正深刻改变人类生活和工作方式。

    2025年7月5日
    3500
  • 30秒写出高效脚本?

    cron 任务调度(最常用)原理:通过守护进程crond周期性执行任务,适用场景:需要按固定周期(分钟/小时/天等)重复执行的任务,操作步骤:编辑用户级定时任务crontab -e # 编辑当前用户的任务在打开的文件中添加规则(每行一个任务):# 格式:分 时 日 月 周 <命令&gt……

    2025年6月24日
    3200
  • Linux串口安全设置疑难?嵌入式/工控必看!

    识别串口设备列出所有串口终端执行:dmesg | grep tty # 查看内核识别的串口设备ls /dev/tty* # 列出所有tty设备常见设备名:原生串口:/dev/ttyS0 (COM1), /dev/ttyS1 (COM2)USB转串口:/dev/ttyUSB0, /dev/ttyACM0确认设备权……

    2025年7月8日
    3200
  • 核心概念是什么?挑战如何应对?

    核心概念指学科或领域的基础理论框架与关键要素,挑战则涉及理解、应用这些概念时遇到的复杂问题、矛盾或未知领域,掌握核心概念并有效应对挑战是深化认知、推动创新发展的关键。

    2025年6月23日
    3600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信