如何在 Ubuntu 20.04 中启用休眠选项?

Raj*_*esh 69 hibernate 20.04

我尝试了不同的选项来在 Ubuntu 20.04 中启用休眠,但没有任何效果。如何在 Ubuntu 20.04 中启用休眠选项?

小智 67

我假设您有一个可以使用的交换分区。(如果您有交换文件,则无法休眠)

安装pm-utilshibernate

sudo apt install pm-utils hibernate
Run Code Online (Sandbox Code Playgroud)

然后:

cat /sys/power/state
Run Code Online (Sandbox Code Playgroud)

你应该看到:

freeze mem disk
Run Code Online (Sandbox Code Playgroud)

然后运行:

grep swap /etc/fstab
Run Code Online (Sandbox Code Playgroud)

复制 UUID 值。稍后您将需要它。然后运行:

sudo nano /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

(或者你最喜欢的编辑器,如果不是 nano)。改变说的那一行

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Run Code Online (Sandbox Code Playgroud)

所以它反而说:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=YOUR_VALUE"
Run Code Online (Sandbox Code Playgroud)

然后,在保存文件并退出文本编辑器后,运行:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

要测试它,请运行:

sudo systemctl hibernate
Run Code Online (Sandbox Code Playgroud)

目前,没有任何 GNOME 扩展程序正在努力将休眠选项恢复到系统菜单中。

在我的 Lenovo Thinkpad X1 Carbon 上的 Ubuntu 20.04 内核 5.4.0-31 上测试。

  • 如果 `grep swap /etc/fstab` 不返回 UUID 怎么办? (13认同)
  • 运行`grep swap /etc/fstab` 返回`/swapfile none swap sw 0 0`。有什么建议吗? (11认同)
  • 我收到错误:“E:软件包‘hibernate’没有安装候选者” (5认同)
  • @DouglasLeeder 为什么当交换文件非常适合休眠时切换到交换分区(假设它足够大)。你只需要找到交换文件的偏移量,除了 `resume` 参数,传递一个 `resume_offset` 参数。这在 Arch Wiki 中有详细描述:https://wiki.archlinux.org/index.php/Power_management/Sus​​pend_and_hibernate#Hibernation_into_swap_file (3认同)
  • 知道为什么 `cat /sys/power/state` 只打印 `freeze mem` 吗? (3认同)
  • 作品。:) 它只适用于 UUID。 (2认同)
  • 只是提一下 gnome 36 / ubuntu 20.04 的这个扩展,一旦设置完成就很方便。https://extensions.gnome.org/extension/755/hibernate-status-button/(查看扩展的github页面以获取ubuntu所需的其他配置) (2认同)
  • @abu_bua 查看您的 UEFI/BIOS 设置。我遇到了同样的问题 - 必须禁用安全启动。 (2认同)
  • @sinchan是的,我必须禁用安全启动。已经明白了。这是一个内核问题,想知道是否有解决方法,让休眠也可以在安全启动中工作。 (2认同)
  • 不要忘记 grub 行中的“UUID=”!我为此浪费了2天时间... (2认同)

Jam*_*ond 13

如果您想使用/swapfile而不是交换分区来休眠:

顶端回答运作良好,但你没有使用的分区,你也可以使用一个默认的/swapfile

首先,您应该至少将 /swapfile的大小增加到 RAM 的大小。

  1. 安装依赖:
sudo apt install pm-utils hibernate uswsusp
Run Code Online (Sandbox Code Playgroud)
  1. 找到您的 UUID 和交换偏移量:
findmnt -no UUID -T /swapfile && sudo swap-offset /swapfile
Run Code Online (Sandbox Code Playgroud)

你会看到这样的事情:

371b1a95-d91b-49f8-aa4a-da51cbf780b2
resume offset = 23888916
Run Code Online (Sandbox Code Playgroud)
  1. 编辑/etc/default/grub和替换字符串
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Run Code Online (Sandbox Code Playgroud)

使用您的 UUID 和偏移量:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=371b1a95-d91b-49f8-aa4a-da51cbf780b2 resume_offset=23888916"
Run Code Online (Sandbox Code Playgroud)
  1. 更新 GRUB:
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
  1. 测试你的冬眠:
sudo systemctl hibernate
Run Code Online (Sandbox Code Playgroud)

可能您不应该在启用休眠后更改交换的大小(至少在不更改swap-offsetGRUB 中)。

有关更多详细信息,请参阅维基

UPD:如果您想在关闭笔记本电脑盖时休眠(请参阅此内容):

  1. 禁用触摸笔记本电脑盖子的设置中的任何选项,将它们设置为“什么都不做”。

  2. 运行sudo mkdir -p /etc/acpi/events/ && sudo nano /etc/acpi/events/laptop-lid并粘贴:

sudo apt install pm-utils hibernate uswsusp
Run Code Online (Sandbox Code Playgroud)
  1. 运行sudo touch /etc/acpi/laptop-lid.sh && sudo chmod +x /etc/acpi/laptop-lid.sh && sudo nano /etc/acpi/laptop-lid.sh并粘贴:
findmnt -no UUID -T /swapfile && sudo swap-offset /swapfile
Run Code Online (Sandbox Code Playgroud)
  1. 须藤 /etc/init.d/acpid 重启

  • 不幸的是,这对我不起作用,因为“sudo systemctl hibernate”返回错误消息“无法通过登录休眠系统:不支持睡眠动词“hibernate””。根据互联网搜索,休眠与安全启动不兼容。你同意吗? (3认同)
  • 注意:不要将`mkswap`返回的UUID用于`resume_offset`。根据 https://ubuntuforums.org/showthread.php?t=1042946,`mkswap` UUID 是无用的 (2认同)
  • 这对我有用。无需使用*交换分区*。*交换文件*就足够了。 (2认同)
  • @PaddyLandau:禁用安全启动,如 https://devopsid.com/linux-machine-failed-to-hibernate-system-via-logind-sleep-verb-not-supported/ 所示 (2认同)

SuR*_*uRa 9

如果您想在 Ubuntu 20.04 * 中打开休眠功能,请按照以下步骤操作:

  1. 首先确保你在你的机器上分配了交换内存来检查

     swapon --show
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后检查您分配的交换内存是否大于或至少等于物理内存(RAM)。

  3. 使用以下命令查找交换分区。

     grep swap /etc/fstab
    
    Run Code Online (Sandbox Code Playgroud)
  4. 复制输出的 UUID for example( UUID=XXXXX-XXX-XXXX-XXXX-YYYYYYYYYY)

  5. 通过以下命令添加引导参数

     sudoedit /etc/default/grub
    
    Run Code Online (Sandbox Code Playgroud)
  6. GRUB_CMDLINE_LINUX_DEFAULT添加到开始添加的行resume=UUID=XXXXX-XXX-XXXX-XXXX-YYYYYYYYYY(注意:在所有其他线程中,他们曾经要求添加交换分区,但在这里我们添加了 UUID 值)

    最后一行将是这样的:

     GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=XXXXX-XXX-XXXX-XXXX-YYYYYYYYYY"
    
    Run Code Online (Sandbox Code Playgroud)
  7. 更新文件

     sudo update-grub
    
    Run Code Online (Sandbox Code Playgroud)
  8. sudo systemctl hibernate 并且休眠现在可以在您的 Ubuntu 20.04 中运行。

  • 如果 grep swap `/etc/fstab` 没有给你 swap 的 UUID,试试 `sudo blkid`。此外,如果 `sudo systemctl hibernate` 不起作用,请尝试使用 `sudo hibernate`。我认为您甚至不需要编辑 grub,因为当您安装 `hibernate` 时,它会检测您的交换分区。 (3认同)
  • 我的 RAM 是 16 GB,我的交换是 2 GB。如何增加交换以匹配 RAM? (2认同)
  • 如果交换是文件而不是分区呢? (2认同)
  • @david.perez “使用交换文件还需要设置 `resume=swap_device` 和额外的 `resume_offset=swap_file_offset` 内核参数。” https://wiki.archlinux.org/index.php/Power_management/Sus​​pend_and_hibernate#Hibernation_into_swap_file (2认同)

C.S*_*ron 8

要在 20.04 中启用休眠:

本页上的所有示例似乎都缺少resume-offset使用交换文件而不是交换分区时所必需的。

增加swapfile大小以匹配 RAM 大小,最高可达 8GB。

resume位置和偏移添加到grub.cfg

可以使用 GNOME 扩展添加休眠按钮。

swapfile请注意,使用 来创建a 时,有可能会出现漏洞fallocate/var/log/syslog可以搜索该短语swapon: swapfile has holes以确保不会丢失数据。

也可以使用以下命令创建交换文件dd

sudo dd if=/dev/zero of=/swapfile bs=1G count=8
Run Code Online (Sandbox Code Playgroud)

使用时出现错误dd可能会覆盖您的硬盘。


小智 6

我刚刚添加了一个键盘快捷键。已禁用Super+ H。(我不需要它 - 默认是隐藏窗口)并使用 command 创建了一个新的快捷方式systemctl hibernate。完毕。:-)

  • systemctl hibernate 在没有保存当前状态的情况下关闭了,这不是我对休眠的期望。-1 (6认同)

Bob*_*coe 5

eldwist 的解决方案对我有用,除了......

...最初不是,因为我收到以下错误:

$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb not supported
Run Code Online (Sandbox Code Playgroud)

如果出现此错误,您可能需要在 UEFI/BIOS 的安全菜单下禁用安全启动(请参阅与 16.04 类似的问题)。然后它对我有用(在 Ubuntu 20.04; 5.4.0-33 内核上测试,配置为双引导与 Win10)。

  • 您不需要在固件中禁用 secureboot - 您可以使用 `sudo mokutil --disable-validation` 在 shim 加载程序中禁用它,我认为这应该让 bitlocker 也满意,请参阅 https://wiki.ubuntu.com/ UEFI/SecureBoot/DKMS#Method_2_-_Disable_Secure_Boot_in_shim 签名,希望这一切很快就能开箱即用:https://mjg59.dreamwidth.org/55845.html (2认同)

小智 5

SuRa在顶部的答案效果很好,但是,如果您的笔记本电脑附带交换文件而不是交换分区,那么您必须先执行几个步骤才能使其全部正常工作。高层次上:

  1. 从 Live CD/USB 驱动器启动,将主分区缩小到您拥有的内存量加上 1-2 GB 的余量。例如,我有 16 GB,因此为了更好的测量,我将分区缩小了 18 GB。这将在您的磁盘上留下空白/未分区的空间。
  2. 在磁盘上的空/未分区空间中创建交换类型的新分区。
  3. 重新启动至已安装的操作系统(即没有 Live CD/USB)
  4. 转到“分区”或“gparted”以获取新交换分区的 UUID。
  5. 添加新的交换分区/etc/fstab删除(或注释掉)旧的交换文件
  6. 使用swapoff和命令从交换文件swapon切换到交换分区
  7. 不要忘记删除交换文件以回收该空间
  8. 现在您可以按照 SuRa 的指示进行操作。

  • 当您可以很好地休眠到交换文件时,为什么要做这一切呢? (3认同)