Ubuntu22.04启用休眠(hibernation)模式

系统的电源状态一共分为:s0-s5六种状态,其中s0是启动状态,s1-s4是睡眠状态,s5是关闭状态。而我们说的休眠实际是s1-s4中的,虽然统称睡眠,级别却有着差异。具体了解可参考微软官方电源部分文章:系统电源状态

我的电脑是Thinkpad x1 carbon gen10,系统为ubuntu 22.04,目前已经升级为pro。默认电源状态为suspend,现在需要改为hibernation。

1. swap设置

通过以下命令找到swapfile的UUID,

1
2
digops@digops:~$ findmnt -no UUID -T /swapfile
1db0f23d-a4b0-4c0c-812f-d3b66531a3d0

通过以下命令找到swapfile的offset

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
digops@digops:~$ sudo filefrag -v /swapfile|head -n 10
Filesystem type is: ef53
File size of /swapfile is 16384000000 (4000000 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   10239:   28968960..  28979199:  10240:            
   1:    10240..   30719:   38252544..  38273023:  20480:   28979200:
   2:    30720..   63487:   38207488..  38240255:  32768:   38273024:
   3:    63488..   96255:   38174720..  38207487:  32768:   38240256:
   4:    96256..  129023:   38141952..  38174719:  32768:   38207488:
   5:   129024..  161791:   38109184..  38141951:  32768:   38174720:
   6:   161792..  194559:   38076416..  38109183:  32768:   38141952:

复制 physical_offset: 中第一行第一列(0:)的值,不含后面的两个“.”,在此示例中是 28968960 。

2. 编辑 /etc/default/grub

将以上swap的信息编写到 /etc/default/grub

image-20240216135605371

更新grub配置

1
sudo update-grub

3. 在initramfs中配置休眠

1
2
3
4
5
sudo vim /etc/initramfs-tools/conf.d/resume
## 添加如下行,文件有可能不存在,直接新建即可。
resume=UUID=1db0f23d-a4b0-4c0c-812f-d3b66531a3d0 resume_offset=28968960"

sudo update-initramfs -c -k all

4. 重启测试

1
sudo systemctl hibernate

5. 为休眠模式添加图标

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
sudo vim /usr/share/applications/hibernation-mode.desktop

## 添加如下内容
[Desktop Entry]
Type=Application
Name=Hibernation Mode
GenericName=Hibernation Mode
Comment=Enter Hibernation Mode
NoDisplay=false
Icon=drive-multidisk
Exec=systemctl hibernate
Terminal=true
Categories=System;Utility;Settings;

6. 在 Ubuntu 22.04 LTS 的系统托盘关闭/注销菜单中添加休眠选项

一旦您在 Ubuntu 22.04 LTS 的系统托盘关闭/注销菜单中添加休眠选项,只需单击几下,您就可以轻松地休眠 Ubuntu 22.04 LTS。

为此,请在 /etc/polkit-1/localauthority/50-local.d/ 目录中创建一个新文件 com.ubuntu.enable-hibernate.pkla 并使用“gedit”文本编辑器打开它,如下所示:

1
$sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

在 com.ubuntu.enable-hibernate.pkla 文件中键入以下代码行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[Re-enable hibernate by default in upower]

Identity=unix-user:*

Action=org.freedesktop.upower.hibernate

ResultActive=yes

[Re-enable hibernate by default in logind]

Identity=unix-user:*

Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit

ResultActive=yes

完成后,按 + S 保存文件。

现在,使用以下命令更新 APT 包存储库缓存:

1
$ sudo apt update

使用以下命令安装 GNOME 扩展管理器应用程序:

1
$ sudo apt install gnome-shell-extension-manager

要确认安装,请按Y,然后按。

应安装 GNOME 扩展管理器应用程序。

安装 GNOME Extension Manager 应用程序后,从 Ubuntu 22.04 LTS 的“应用程序菜单”将其打开。

导航至 GNOME Extension Manager 应用程序的“浏览”部分**[1],搜索 hibernate[2],然后单击“休眠状态按钮[3]”**,如以下屏幕截图所示:

单击“安装”。

单击“安装”。

应安装“休眠状态按钮”扩展。

image-20240216142434292

恢复suspend模式

  • 查看休眠状态是否打开
1
systemctl status sleep.target  sleep.target - Sleep
  • 关闭休眠模式
1
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
  • 再次查看休眠模式
1
systemctl status sleep.target
updatedupdated2024-02-162024-02-16