怎样在 Ubuntu 上启用休眠(使用交换文件时)

本文介绍了在使用交换文件(至少 Ubuntu 的默认版本 18.04 及更高版本)时,如何在最近的 Ubuntu 版本中使用 systemd 启用休眠。

我的笔记本电脑的电池在睡眠期间会很快耗尽。我已经尝试了一些这样的解决方案/变通方法(除了我,问题不是笔记本电脑在一夜之间失去了一半的能量,而是在短短几个小时内一切都丢失了),但它没有帮助。所以我决定启用休眠选项(暂停到磁盘)并使用它代替默认的睡眠选项(暂停到 RAM)。这是因为它消耗的电量更少,并且在不使用时不会耗尽笔记本电脑的电池电量。从冬眠中醒来的时间比睡觉的时间长。所以这是做到这一点的方法。

下面的步骤可能适用于其他 Linux 发行版,但我只在 Ubuntu 上测试过(它在基于 Debian 和基于 Ubuntu 的 Linux 发行版上的工作方式完全相同,包括 Pop!_OS 等。应该这样做)。 不是基于 Debian 的 Linux 发行版可能需要使用不同的命令来更新 GRUB 2(步骤 4)和重新生成 initramfs(步骤 6)。因为这些是 Debian 特定的命令。

同样重要的是要注意 Ubuntu 休眠由于某些计算机上的问题而被禁用,并且可能不适用于所有人。 有一些关于在 20.10 版本中重新确认 Ubuntu 休眠的讨论,但默认情况下它仍然处于禁用状态。

先决条件

请注意,您需要一个至少与计算机 RAM 一样大的交换文件(如果计算机的交换文件小于系统 RAM,则休眠可能成功或失败)。本文介绍如何从交换分区迁移到交换文件。您还可以使用这些步骤来创建更大的交换文件。

此外,如果您有专门加密的交换,这些步骤将不起作用。我的笔记本电脑交换是未加密的,所以我不能用加密交换来尝试这个。因此,以下步骤仅适用于未加密的交换文件。但是,如果您已经有一个加密的根文件系统,您需要知道它上面的所有文件,包括交换文件,也是加密的。在这种情况下,以下步骤将起作用。

检查您的计算机交换区的大小,如果您使用的是交换文件或分区(稍后您需要知道这一点),您可以使用以下命令:

cat /proc/swaps

这是我的笔记本电脑的输出示例:

$ cat /proc/swaps
Filename	Type	Size		Used		Priority
/swapfile	file	8388604		3213700		-2

如你所见 Type 它说 file, 所以我的电脑正在使用一个交换文件(它的路径是 /swapfile),其大小为 8388604 千字节 (8,3GB)。

默认情况下,Ubuntu 会使用交换文件一段时间(至少 Ubuntu 18.04 及更高版本),因此以下步骤假定您正在使用它。如果使用swap分区,请使用swap分区的UUID而不是swap文件所在分区的UUID,不要加上swap文件偏移量(按照下面的步骤)。resume_offset 参数)任何地方。这些是使用交换分区和交换文件的休眠之间的区别。

您可能还感兴趣:从命令行查看 Linux 笔记本电池信息的 3 个工具

如何在 Ubuntu 上启用休眠(使用交换文件时)

1、找到swap文件所在分区的UUID。

您需要将其添加到 GRUB 文件和 initramfs 恢复文件中。

要查找交换文件所在分区的 UUID,可以使用以下命令:

findmnt -no UUID -T /swapfile

(((/swapfile 是交换文件的路径,可能因计算机而异。使用返回的确切路径 cat /proc/swaps 说明)。

来自我的电脑的示例(带输出):

$ findmnt -no UUID -T /swapfile

4a59c6a7-ca54-4e24-a362-3eac83bfe226

2. 检查交换文件中的偏移量。

接下来,您需要在交换文件中找到偏移量。 与 UUID 一样,您需要将其添加到 GRUB 文件和 initramfs 恢复文件中。

这可以通过运行以下命令来完成:

sudo filefrag -v /swapfile

根据此命令的输出,“physical_offset”列中的第一个数字块是您稍后需要的交换文件偏移量。只复制数字,而不是数字块后面的点。

例如,在我的情况下,这是输出 sudo filefrag -v /swapfile 说明:

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 8589934592 (2097152 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    6143:    4974592..   4980735:   6144:            
   1:     6144..    8191:    4982784..   4984831:   2048:    4980736:
   2:     8192..   10239:    4988928..   4990975:   2048:    4984832:
   3:    10240..   12287:    4997120..   4999167:   2048:    4990976:
........................................

在本例中,交换文件偏移量是: 4974592 (这是第一个数字块 psysical_offset 位数)。

3. 编辑 /etc/default/grub Resume 和 Resume Offset File 用于使用内核参数启动。

确保此文件中的编辑正确无误非常重要。否则,您的计算机可能无法启动。

打开 /etc/default/grub 使用文本编辑器作为 root 的文件。例如,使用以下命令使用 Nano 命令行文本编辑器打开文件。

sudo nano /etc/default/grub

在这个文件中 GRUB_CMDLINE_LINUX_DEFAULT 行,结束前 ", 添加以下内容: resume=UUID=UUID_FROM_STEP_1 resume_offset=SWAP_OFFSET_FROM_STEP_2..将该值替换为步骤 1 中获得的 UUID 和步骤 2 中获得的交换重启偏移量。

按 保存文件并退出 Nano。 Ctrl + o,在那之后 Enter, 之后 Ctrl + x..

例如。这是怎么回事 GRUB_CMDLINE_LINUX_DEFAULT 添加交换 UUID 和交换偏移后,该行将显示在您的计算机上。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=4a59c6a7-ca54-4e24-a362-3eac83bfe226 resume_offset=4974592"

4. 更新 GRUB 配置。

要在基于 Debian 的 Linux 发行版上更新 GRUB2,只需运行以下命令:

sudo update-grub

5. 创建(或编辑,如果它已经存在) /etc/initramfs-tools/conf.d/resume 使用交换 UUID 并恢复偏移量。

然后你需要编辑(如果不存在则创建) /etc/initramfs-tools/conf.d/resume 使用文本编辑器作为 root 的文件。使用以下命令在 Nano 命令行编辑器中打开此文件:

sudo nano /etc/initramfs-tools/conf.d/resume

如果此文件中有一行以“RESUME”开头,请编辑该行,或者如果没有这样的行(或者文件完全为空),请添加如下一行:

RESUME=UUID=UUID_FROM_STEP_1 resume_offset=SWAP_OFFSET_FROM_STEP_2

按 保存文件并退出 Nano。 Ctrl +o,在那之后 Enter, 之后 Ctrl + x..

内容示例 /etc/initramfs-tools/conf.d/resume 我的笔记本电脑上的文件:

RESUME=UUID=4a59c6a7-ca54-4e24-a362-3eac83bfe226 resume_offset=4974592

6. 重新生成 initramfs。

然后您需要使用以下命令重新生成 initramfs:

sudo update-initramfs -c -k all

7. 重新启动计算机。

重新启动后,使用以下命令使计算机进入休眠状态。

sudo systemctl hibernate

现在,您需要输入密码才能休眠。此外,没有菜单选项可以让计算机进入休眠状态,因此您必须从命令行执行所有操作。要让系统在不输入密码的情况下休眠(并使用桌面电源选项(如面板小程序)中的选项使计算机休眠),请执行以下两个步骤:请参阅。

要从休眠状态恢复,请按计算机上的电源按钮。

如果您在运行此命令时收到错误“系统无法通过 logind 休眠:休眠中没有足够的交换空间”,则您可能错过了文章顶部的通知。有。替换至少与计算机 RAM 一样大的文件。本文介绍如何从交换分区迁移到交换文件。您还可以使用这些步骤来创建更大的交换文件。

您可以使用以下方法检查与 systemdHibernate 服务相关的错误:

systemctl status systemd-hibernate.service

8. 可选。允许在不输入密码的情况下休眠(下一步需要)。在某些桌面环境中,这会重新启用休眠和混合睡眠电源菜单选项。

默认情况下,您必须输入密码才能使计算机休眠。创建/打开以允许无密码休眠 /etc/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla 以 root 用户身份使用文本编辑器。

使用以下命令 /etc/polkit-1/localauthority/50-local.d/com.ubuntu.desktop.pkla 以 root 身份使用 Nano 命令行编辑器:

sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.desktop.pkla

将以下内容粘贴到此文件中:

[Enable hibernate in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Enable hibernate 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

保存文件并退出 Nano(按 Ctrl + o,在那之后 Enter, 之后 Ctrl + x)。

在某些桌面环境中,执行此操作后(以及注销/登录后),您将看到休眠和混合睡眠电源选项。以下是执行此过程后 Xfce 电源选项的示例。

如何在 Ubuntu 上启用休眠(使用交换文件时) 1

但是,这在某些使用 Ubuntu 的桌面环境中不起作用,例如 GNOME Shell。在这种情况下,需要额外的步骤(见下文)。

这是通过询问 Ubuntu

9. 可选。 添加休眠应用程序菜单条目或使用 GNOME Shell 休眠状态按钮。

如果您使用的是 GNOME Shell,请转到顶部栏上的“系统电源”菜单[休止状態ステータスボタン]有一个扩展可用,它添加了一个选项,使计算机进入休眠状态。

启用此扩展后关机/注销 GNOME shell 菜单如下:

休眠菜单 GNOME Shell

如果您没有使用 GNOME Shell 并且在您的桌面环境中没有看到休眠电源选项,或者您不想使用上面的 GNOME Shell 扩展,您可以在应用程序菜单中创建一个条目。Hibernate.desktop 文件 ~/.local/share/applications/例如,使用以下文件打开 Nano 命令行文本编辑器:

nano ~/.local/share/applications/hibernate.desktop

然后将以下内容添加到此文件中:

[Desktop Entry]
Type=Application
Name=Hibernate desktop
GenericName=Hibernate desktop
Comment=Enter hibernation
NoDisplay=false
Icon=drive-multidisk
Exec=systemctl hibernate
Terminal=true
Categories=System;Utility;Settings;

您现在可以转到桌面上的应用程序菜单并单击。 Hibernate 使系统进入休眠状态的图标。为此,您需要按照上述选项的第 9 步操作才能在不输入密码的情况下休眠。

您还需要清楚混合睡眠选项是什么。除了睡眠/暂停(暂停到 RAM)和休眠(暂停到磁盘)之外,还有一个混合睡眠(也称为混合暂停)选项,可以让计算机进入睡眠状态,然后在一段时间后进入休眠状态。我有。您可以通过编辑设置挂起和休眠之间的混合睡眠时间(以及其他选项)。 /etc/systemd/sleep.conf 创建文件,然后重新启动系统。有关更多信息,请参阅 ArchWiki。

您可能喜欢:如何在 Debian、Ubuntu 或 Linux Mint 的 Google Chrome、Brave、Vivaldi、Opera 浏览器中启用硬件加速视频解码