核心概念:三种主要状态
-
睡眠 / 挂起
(图片来源网络,侵删)- 工作原理:将当前所有工作状态(打开的程序、文档等)保存在内存中,然后关闭大部分硬件(如硬盘、显示器),仅维持内存供电。
- 优点:唤醒速度极快(通常几秒钟),因为数据直接从内存读取。
- 缺点:非常耗电,如果断电,所有未保存的数据都会丢失。
- 英文:
Suspend或Sleep。
-
休眠
- 工作原理:将内存中的所有数据写入硬盘上的一个特殊文件(
swap分区),然后完全关闭计算机。 - 优点:功耗极低,和关机一样,即使断电,数据也不会丢失。
- 缺点:唤醒速度较慢,因为需要从硬盘将数据重新读回内存。
- 英文:
Hibernate。
- 工作原理:将内存中的所有数据写入硬盘上的一个特殊文件(
-
混合睡眠
- 工作原理:结合了睡眠和休眠的优点,数据同时保存在内存和硬盘上。
- 优点:如果不断电,唤醒速度和睡眠一样快;如果断电,因为有硬盘备份,数据也不会丢失。
- 缺点:比纯睡眠更耗电,因为需要同时为内存和硬盘供电(直到断电)。
- 英文:
Hybrid Sleep,这是 Windows 的默认行为,在 Linux 上也可以配置。
基本命令
在终端中,你可以使用 systemd 提供的命令来控制这些状态。
进入睡眠状态
systemctl suspend
进入休眠状态
systemctl hibernate
进入混合睡眠状态
systemctl hybrid-sleep
让系统进入空闲状态(可选)
这个命令不会立即挂起,而是会等待一段时间的系统无活动后自动执行挂起操作,这通常在电源设置中配置,但也可以手动触发。

systemctl suspend-then-hibernate
这个命令会先让系统进入睡眠状态,如果系统在睡眠期间接收到来自 AC 电源适配器的断开信号(即拔掉电源),它将自动转入休眠状态,防止数据丢失。
通过图形界面操作
对于大多数桌面用户来说,使用图形界面是最简单的方式:
- 点击右上角的电源图标,通常会有以下选项:
- 睡眠:对应
systemctl suspend。 - 休眠:对应
systemctl hibernate。 - 注销 / 关机。
- 睡眠:对应
如何启用休眠功能(重要步骤)
在很多现代 Ubuntu 发行版中,为了节省空间,swap 分区可能没有被创建或者大小不够,这会导致休眠功能无法正常工作,你需要确保系统有一个足够大的 swap 文件或分区。
检查当前 Swap 状态
打开终端,运行:

swapon --show
- 如果没有任何输出,说明系统没有启用
swap。 - 如果输出显示了你的
swap分区或文件,请检查Size列,确保它至少和你的物理内存大小一样大,如果你有 16GB 内存,swap最好也 >= 16GB。
创建 Swap 文件(如果需要)
如果你的 swap 太小或不存在,可以按照以下步骤创建一个与内存大小相同的 swap 文件,假设你有 8GB 内存。
-
创建一个 8GB 的空文件:
sudo fallocate -l 8G /swapfile
注意:
fallocate命令在你的文件系统上不起作用(Btrfs),可以使用dd命令,但速度会慢很多:sudo dd if=/dev/zero of=/swapfile bs=1G count=8 status=progress
-
设置正确的权限:
swap文件必须是安全的,只有 root 用户可以读写。sudo chmod 600 /swapfile
-
将文件标记为 Swap 文件:
sudo mkswap /swapfile
-
启用 Swap 文件:
sudo swapon /swapfile
-
使其永久生效:编辑
/etc/fstab文件,让它在每次开机时自动加载。echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
现在你的系统已经准备好支持休眠了。
配置电源按钮和笔记本盖合上的行为
你可以通过 systemd 的配置文件来自定义这些行为。
-
创建或编辑配置文件:
sudo nano /etc/systemd/sleep.conf
-
取消注释并修改以下行:
-
配置电源按钮:
#HandlePowerKey=poweroff
修改为你想要的行为,
HandlePowerKey=suspend# 按下电源键睡眠HandlePowerKey=hibernate# 按下电源键休眠HandlePowerKey=hybrid-sleep# 按下电源键混合睡眠HandlePowerKey=ignore# 忽略电源键 -
配置笔记本盖合上:
#HandleLidSwitch=suspend #HandleLidSwitchDocked=ignore
修改为你想要的行为,
HandleLidSwitch=suspend# 合上盖子睡眠HandleLidSwitch=hibernate# 合上盖子休眠HandleLidSwitch=lock# 合上盖子锁定屏幕HandleLidSwitch=ignore# 忽略盖子开关
-
-
保存文件并重启
systemd-logind服务:sudo systemctl restart systemd-logind
常见问题排查
-
问题:执行
systemctl hibernate后,系统黑屏或死机。- 原因:通常是因为
kernel参数中没有正确指定resume设备。 - 解决:
- 找到你的
swap分区 UUID:blkid | grep swap
输出类似:
/dev/nvme0n1p2: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="swap" PARTUUID="..." - 编辑
kernel启动参数,添加resume=UUID=你的swap分区UUID。sudo nano /etc/default/grub
找到以
GRUB_CMDLINE_LINUX_DEFAULT=开头的行,在引号内添加resume=UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890。GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890" - 更新
grub:sudo update-grub
- 重启电脑。
- 找到你的
- 原因:通常是因为
-
问题:没有休眠选项。
- 原因:
swap分区太小或不存在。 - 解决:按照上面的步骤创建或调整
swap文件。
- 原因:
总结表格
| 命令 | 功能 | 优点 | 缺点 |
|---|---|---|---|
systemctl suspend |
睡眠/挂起 | 唤醒极快 | 耗电,断电数据丢失 |
systemctl hibernate |
休眠 | 耗电极低,断电安全 | 唤醒较慢 |
systemctl hybrid-sleep |
混合睡眠 | 兼顾速度与安全 | 比纯睡眠耗电 |
systemctl suspend-then-hibernate |
先睡眠后休眠 | 拔掉电源自动转入休眠 | 初始功耗与睡眠相同 |
希望这份详细的指南能帮助你完全掌握 Ubuntu 的系统挂起功能!
