如何在Ubuntu 16.04上进入休眠模式?

如何成功地将Ubuntu 16.04休眠?我已经尝试了网上几乎所有的解决方案,但它们都没有真正帮助到我。我发现我的问题几乎与这个链接完全相似。

2可能是如何启用休眠?的重复问题。 - DJCrashdummy
sudo pm-hibernate 能用吗? - Pilot6
2情况难道没有因为systemd而改变吗?现在我们应该使用systemctl hibernate,所以也许不是重复问题...或者至少需要更新答案才能使旧问题成为重复问题的有效解答。 - Zanna
你正在运行什么内核版本?在终端中输入 uname -r(如果你已经知道了,请原谅)。 - WinEunuuchs2Unix
请编辑您的问题并添加free命令的输出,这样我们可以确定您是否有足够的交换空间设置来成功进入休眠状态。 - Elder Geek
@ElderGeek 这是一个好主意去检查。不幸的是,原帖作者自2016年7月以来就没有登录过了。也许他忘记支付在伊朗德黑兰的互联网服务提供商费用了。 - WinEunuuchs2Unix
@WinEunuuchs2Unix 过去的表现并不能预示未来的结果。谁也说不准。也许楼主会回来回答我们两个问题。尽管目前看起来有点怀疑... - Elder Geek
我刚刚换成了Ubuntu,对我来说就像是在关机窗口打开时按下ALT键一样简单,然后会出现一个“暂停”按钮,将机器置于休眠状态。 - James Scott
对我来说,这些都没有起作用。我正在使用Ubuntu 18.04。相反,我发现这个答案很有帮助。 - Mike Williamson
问题链接“Ubuntu 16.04在暂停或休眠后无法关机”是误导性的。请删除该链接,因为您的问题与该链接完全相反。 - Yossarian42
11个回答

使用systemctl进行休眠并在复杂情况下使其正常工作
对我来说,pm-hibernate总是失败。经过一些调整,我能够使用systemd的界面(16.04及以上版本的init系统)进行休眠。我还成功地在17.04上使用交换文件实现了休眠。这个案例研究可能对其他遇到问题的人有用。
首次尝试:
sudo systemctl hibernate

如果失败了,开始故障排除:在休眠状态(HTD或ACPI S4)中,机器状态被写入磁盘,因此不需要电源来保持它。状态要么被写入交换分区,要么被写入交换文件。注意:如果使用Btrfs,请勿尝试使用交换文件,因为这可能导致文件系统损坏 为了允许休眠,您的交换分区或交换文件可能需要与RAM大小相同,但根据Arch wiki页面,如果它至少是RAM大小的2/5,那么您很有可能能够休眠,所以在增加交换大小之前,请先尝试其他步骤。 如果您的问题是您得到了一个干净的启动而不是预期的恢复,则至少您很可能需要设置一个引导参数来找到磁盘映像 找到您的交换分区:
grep swap /etc/fstab

对我来说,这返回(部分输出)
# swap was on /dev/mmcblk0p3 during installation

在这里,/dev/mmcblk0p3 是要指定的分区。
添加一个启动参数:
sudoedit /etc/default/grub

在以GRUB_CMDLINE_LINUX_DEFAULT开头的行中,添加resume=/dev/YourSwapPartition到引号内的部分(用之前确定的分区替换)。以我的例子为例:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3" 

每次更改此文件时,您必须运行sudo update-grub命令,否则更改将不会生效。
现在您需要重新启动。然后,您可以尝试休眠,通过执行以下命令:
sudo systemctl hibernate

要恢复操作,请按下电源按钮,系统将启动。

如果仍然遇到问题,请开始调试。

我在下面附上我的案例作为示例,但有关调试 S 状态的详细信息可以在这篇博客这篇博客中找到。

设置更多的引导参数以捕获更多信息。删除 quietsplash,并添加 initcall_debugno_console_suspend,这将导致 init 系统调用被打印到控制台,以便您可以观察出现了什么问题。我设置如下:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

帮助我看到从休眠恢复时出现了什么问题。你也可以尝试使用 dmesg
在我的情况下,从休眠恢复后,我失去了WiFi连接,而且内核明显感到不满,因为大多数命令(例如从 /sys 读取任何内容、重新加载模块或执行任何 systemctl 命令)都无法工作 - 进程似乎会启动但卡住(当然,在重启后一切都会恢复正常)。观察系统非常缓慢地关闭并阅读所有调试消息后,我注意到“brcm”存在很多问题,所以我猜测是我Broadcom无线驱动程序模块的问题。果然,我调整了休眠流程以先卸载该模块。
sudo modprobe -r brcmfmac
sudo systemctl hibernate

在简历上,我重新插入了模块。
sudo modprobe brcmfmac

一切都运行得很完美。我还需要将模块列入黑名单,因为它似乎与不兼容。
更新:在17.04上使用交换文件进行休眠。
再次借助Arch维基页面的帮助和一些额外的调试,我成功地在17.04上使用交换文件实现了休眠功能。这需要一个额外的引导参数resume_offset=n,其中n是sudo filefrag -v /swapfile输出中physical_offset下的第一个数字。
$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   .... 

因此,在我的情况下,额外的引导参数是resume_offset=34816。您仍然需要设置一个用于从分区恢复的引导参数。这将是根分区(或者您的交换文件所在的分区)。我的参数现在是:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

我的根分区是/dev/mmcblk1p2(你的可能更像是/dev/sda2)。

在恢复过程中,我看到镜像成功加载,但在我的情况下(只是一个例子 - 你的情况可能不同),一些其他驱动程序(如i2c_designware)报错,并且在恢复时系统完全冻结。如果我卸载这些模块以及brcmfmac,休眠功能就能正常工作,但是没有这些模块,系统很快就无法使用。因此,我编写了一个脚本,在恢复时卸载有问题的模块,并立即重新加载它们:

# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac

当我想要进入休眠状态时,我运行sudo bash脚本。这非常有效。


简短总结:

使用systemd,在启动参数中设置从交换分区恢复,识别有问题的驱动程序并在开始休眠之前卸载它们。如果系统在没有这些模块的情况下无法正常工作,或者您需要卸载多个模块,可以使用一个简单的脚本来发起休眠。


那个信息从哪来的,说2/5的RAM大小可能足够,在什么情况下呢?我在Gnome中有一个用户选项叫做“休眠”,看起来它确实休眠了,但是在唤醒后,它工作不正常。我有一个8GB的交换分区和32GB的RAM。虽然这不是2/5,但在创建一个32GB的交换文件(或分区)之前,最好知道一下。 - cslotty
@cslotty 我记得我是从Arch Wiki上获取到这个信息的 - 如果你成功了,请告诉我一声。 - Zanna
谢谢,@Zanna。我发现实际上我想要的不是休眠而是暂停(S3/STR)- 抱歉。 - cslotty
@cslotty 没问题。在这种情况下,交换不是你的问题,因为它与此无关。 - Zanna
1谢谢,我需要这个答案的综合以及关于禁用SecureBoot的提示,最终让它起作用。 - oligofren
@oligofren 谢谢你分享这个!我无法在启用安全启动的情况下运行Ubuntu,所以我无法遇到这个问题。 - Zanna
在18.04版本中,对我来说问题是安装程序在加密卷中创建了一个太小的交换分区。扩大它是(麻烦的)解决方法,然后休眠功能就可以直接使用,包括UI按钮(在LXQt中)。 - Murphy
1在我的情况下,对于Dell Latitude 5501 - Ubuntu 20.04,我需要通过UUID来设置交换分区以使得休眠功能正常工作。然后,在grub中的resume选项也必须是UUID格式,例如resume=UUID=your-swap-uuid-here - Oki Erie Rinaldi
帮助偏移 - Oleksandr IY

你可以使用
sudo pm-hibernate 

要检查休眠功能是否在您的系统上工作(这将使您的计算机进入休眠状态)。

如果不起作用,请检查交换空间大小是否至少与RAM大小相同。

要将该选项添加到设置菜单中,您可以创建一个配置文件。打开终端窗口并运行以下命令:

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

它打开一个空文件的nano。复制下面的行并粘贴到nano窗口中。

[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

然后保存更改并关闭nano,重新启动系统以使“休眠可用”出现在“电源选项”中。
参考:Ubuntu 16.04官方文档中的如何让计算机进入休眠模式?
希望能起作用。在尝试了所有其他选项之后,这对我有效。

在编辑文件后,我们需要重新启动以使“休眠”选项出现在“电源选项”中。 - Jus12
23'sudo pm-hibernate' 立即无警告地使我的系统崩溃了。你应该告诉人们这就是会发生的事情。 - Yair Daon
1最佳答案。这也适用于17.4和17.10版本。 - Saurabh Bhandari
1这个答案和告诉我在GRUB_CMDLINE_LINUX_DEFAULT中添加"resume="的那个答案结合起来,确实解决了我的问题 - 谢谢! - Christoph
我在我的交换分区中有17GB,并且有16GB的RAM,为什么它不起作用?它似乎正在休眠,因为关闭计算机需要很长时间,而如果我执行“关机”命令,它几乎立即关闭。但是,当我重新启动计算机时,所有的东西都关闭了,我必须重新开始。这根本不是休眠。为什么不能像Windows那样简单呢?如果有人对如何正确使其休眠有想法,我希望能得到一些帮助。 - user1271772
在我的Ubuntu 16.04上,不需要重新启动就可以在电源选项中看到休眠选项。 - loved.by.Jesus

我认为,如何在16.04上启用休眠的答案是众所周知的,正如Ubuntu Wiki中所描述的(如果需要步骤,请参见下文)。但是我认为需要检查的事项并不彻底。至少,这是我发现的。

需要检查的事项

根据我的测试,我至少找到了一个额外的检查项目,您应该执行。我在互联网上没有找到相关信息。

以下是一些需要检查的内容 -

  1. 检查一下你是否使用了任何 btrfs 分区。是的。根据我的测试,如果你有 btrfs 分区,休眠功能将无法正常工作。删除或将分区类型更改为 ext4 对我没有帮助。我需要移除 btrfs-tools 软件包。

    sudo apt-get purge btrfs-tools
    

    你可能还想检查其他未经充分测试的新分区类型。在不移除软件包的情况下,禁用驱动程序也可能起作用,但我没有测试过。

  2. 此外,你还需要检查是否有足够大的交换分区来容纳内存内容。如果你的内存是 4 GB,交换分区应至少为 4 GB(为了安全起见,你可以多分配几 MB)。

启用休眠的步骤

它涉及以下步骤

  1. 以 root 身份在 /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla 中创建一个文件

    sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. 将以下内容放入该文件中

    [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
    
  3. 按下 Ctrl-O 保存文件。使用 Ctrl-X 退出

  4. 重新启动 polkitd 守护进程

    sudo systemctl restart polkitd.service
    
应该启用休眠模式。

2谢谢,安瓦尔。我已经提交了错误编号#1619846,并参考了您上面的回答。有没有可能您能在官方文档中提出更精确的修改或补充? - Gunnar Hjalmarsson
1@GunnarHjalmarsson 我建议加上这个限制条件。不过,我需要更多的测试人员来验证一下。稍后会告诉你结果。 - Anwar
好的,那我们就多聊一些吧。 - Gunnar Hjalmarsson
我按照您的指示在btrfs分区上安装并清除了“btrfs-tools”,但仍无法进入休眠状态。 - Oxwivi
@Oxwivi 除了ext3/4,您在使用fstab时还挂载了哪些其他类型的分区? - Anwar
1硬盘上只有vfat用于UEFI,还有btrfsswap。我怀疑这是由于硬件问题(AMD笔记本电脑)。我将在另一台使用btrfs的系统上进行测试,并向您反馈结果。 - Oxwivi
@Oxwivi 要试试没有btrfs的同一系统。如果可以的话,为另一个分区腾出空间,安装Ubuntu并开启休眠功能。在/etc/fstab中不要添加任何挂载btrfs的行。由于是新安装,Ubuntu 默认不支持btrfs,所以它无法识别它们。现在检查看看是否可以正常工作。 - Anwar
休眠在我之前提到的另一个btrfs系统上运行良好。而且我还发现,在Ubuntu中,需要禁用UEFI才能进行休眠。恭喜你,你赢得了奖励! - Oxwivi
@Oxwivi 在禁用 btrfs 的情况下,休眠功能是否与 btrfs 挂载一起正常工作? - Anwar
我只是卸载了 btrfs-tools,没有做任何其他更改。 - Oxwivi
@Gunnar,这里是Oxwivi,确认同样的事情。btrfs中断了休眠。 - Anwar
请注意,截至10月18日,btrfs不再是一个问题。 - ukos

安全启动

(我问了一个类似的问题,要求重点关注基于systemd的回答,并在这里分享我的解决方案,以供关注此问题的人参考)

这个解决方案来自Fedora的主题(他们一段时间前就转向了systemd,所以那里有更多的资料)。

在我的情况下(在一台始终支持休眠的机器上进行了新鲜的16.04.1安装),调用已过时的sudo pm-hibernate似乎没有任何作用,而最新的systemd方法systemctl hibernate会返回:

Failed to hibernate system via logind: Sleep verb not supported

原来安全启动是罪魁祸首:在安装16.04时,会询问你对此的处理方式(据我所知这是个新事物),而我没有多加考虑就选择了保持开启状态。
在我的机器上,安全启动开启的情况下,运行cat /sys/power/disk命令得到的回答是:
 [disabled]

在重新启动并在BIOS设置中禁用安全启动(这些是机器特定的,但通常很简单)之后,我尝试了cat /sys/power/disk命令,并得到以下结果:
 [platform] shutdown reboot suspend 

哪个看起来更好。事实上,调用systemctl hibernate会导致成功的休眠/唤醒序列。

此外,在那之后,我可以在图形界面的各个地方看到可用的休眠选项,而无需进行任何polkit的修改。因此,似乎systemd实际上是从/sys/power/disk推测出系统无法休眠。


我按照你在这里解释的步骤进行了操作。但是当我执行"systemctl hibernate"命令后,屏幕变黑了3秒,然后桌面回到了执行命令之前的状态,所有我打开的程序都还在。当我执行"cat /sys/power/disk"命令时,显示的文本是"[platform] shutdown reboot suspend test_resume",与你在你那边执行相同命令时的结果类似,只是最后一个文本不同:"test_resume"。你有什么办法可以解决我的问题吗? - foxhard
不太确定,看起来你的硬件默认情况下无法正常使用休眠功能,这就是为什么它被默认禁用的原因,正如其他人所指出的。 你可能想要提出一个关于你具体问题的单独问题。 - Marc
只对我有一半的效果。它会休眠,但是在从休眠中唤醒时,会进入正常启动,然后永远卡住,直到进行硬件强制关机。 - matanster

尝试将系统置于休眠状态(深度睡眠,将RAM写入磁盘),生成了以下错误。
$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb not supported

以下步骤解决了该问题(在Thinkpad X1 Carbon 7th Gen,Ubuntu 19.10上进行了测试)。其中大部分步骤来自这里
  1. 在BIOS中关闭安全启动。
  2. 在BIOS中将"睡眠状态"设置为Linux。该选项在我的BIOS中最初命名为"Modern Standby",我必须将其关闭,但是在一次BIOS更新后,名称更改为"Sleep State"。
  3. 创建一个与RAM大小相同或更大的交换文件。这里涉及到几个步骤,如下所示。

    a. 关闭交换文件:

    $ sudo swapoff -a
    

    b. 创建一个大小等于或大于RAM的文件。我的RAM是16GB,所以:

    $ sudo dd if=/dev/zero of=/swapfile bs=1G count=16
    
    16+0 records in
    16+0 records out
    17179869184 bytes (17 GB, 16 GiB) copied, 19.3685 s, 887 MB/s
    

    c. 为文件设置正确的权限:

    $ sudo chmod 600 /swapfile
    

    d. 将文件设为交换文件:

    $ sudo mkswap /swapfile
    
    Setting up swapspace version 1, size = 16 GiB (17179865088 bytes)
    no label, UUID=3b2e6f0c-ce12-4a84-9044-d99bfba059ea
    

    e. 打开交换文件并检查是否正确设置:

    $ sudo swapon /swapfile
    $ cat /proc/swaps
    
    Filename                Type        Size    Used    Priority
    /swapfile                               file        16777212    0   -2
    

    f. 为了在重新启动后加载交换文件,我们必须将其添加到/etc/fstab中。执行以下命令打开该文件:

    $ sudo gedit /etc/fstab
    

    并通过像下面这样添加最后一行来更新它。请注意,我还将原始的交换文件注释掉了,因为我不需要它。

    /dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
    # /boot was on /dev/nvme0n1p2 during installation
    UUID=d265e7c4-1a4f-49c4-af29-fea2543490d7 /boot           ext4    defaults        0       2
    # /boot/efi was on /dev/nvme0n1p1 during installation
    UUID=0004-FB5F  /boot/efi       vfat    umask=0077      0       1
    #/dev/mapper/vgubuntu-swap_1 none            swap    sw              0       0
    /swapfile       none    swap    sw      0       0
    

    g. 重新启动并运行以下命令以查看交换文件是否显示:

    cat /proc/swaps
    
    Filename                Type        Size    Used    Priority
    /swapfile                               file        16777212    0   -2
    
  4. 现在,是时候更新grub了。

    a. 执行以下命令打开grub:

    $ sudoedit /etc/default/grub
    

    b. 运行以下命令查找根目录的挂载位置:

    $ mount | grep " / "
    
    /dev/mapper/vgubuntu-root on / type ext4 (rw,relatime,errors=remount-ro)
    

    c. 因此,我的挂载点是/dev/mapper/vgubuntu-root。通过运行以下命令找到此位置的UUID:

    $ sudo blkid
    /dev/mapper/nvme0n1p3_crypt: UUID="AZrE57-dlNc-BiUr-RrTF-SdT2-luVK-vrliNq" TYPE="LVM2_member"
    /dev/mapper/vgubuntu-root: UUID="2331fe68-3e7a-4937-9cfa-74fc7a4b79f6" TYPE="ext4"
    /dev/nvme0n1p1: UUID="0004-FB5F" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="09813156-6b7a-4fc2-b644-a8c6b7d40abf"
    /dev/nvme0n1p2: UUID="d265e7c4-1a4f-49c4-af29-fea2543490d7" TYPE="ext4" PARTUUID="64f5da2f-71d3-4f02-9b1e-3e12d7f6c445"
    /dev/nvme0n1p3: UUID="201acba5-ff20-46ee-9000-34efefef3fbe" TYPE="crypto_LUKS" PARTUUID="16858e70-eb08-4de8-b944-50689cad9d9f"
    /dev/sda1: LABEL="ST64GB" UUID="624AB7B308FE9F38" TYPE="ntfs" PTTYPE="dos"
    /dev/mapper/vgubuntu-swap_1: UUID="af3b29a2-ba6b-44de-89dd-072f4233aaf9" TYPE="swap"
    
    

    在这种情况下,UUID是2331fe68-3e7a-4937-9cfa-74fc7a4b79f6。记住这个UUID。

    d. 接下来,我们需要找到交换文件的偏移量。运行以下命令:

    $ sudo filefrag -v /swapfile
    
    Filesystem type is: ef53
    File size of /swapfile is 17179869184 (4194304 blocks of 4096 bytes)
    ext:     logical_offset:        physical_offset: length:   expected: flags:
      0:        0..   32767:     835584..    868351:  32768:            
      1:    32768..   49151:     868352..    884735:  16384:            
      2:    49152..   81919:     886784..    919551:  32768:  
      ...
    

    我们找到第一个块的物理偏移量。在上面的情况下,它将是835584。也记住这个数字。

    e. 现在,我们需要更新grub。运行以下命令:

    $ sudoedit /etc/default/grub
    

    使用以下内容进行更新。我们更新GRUB_CMDLINE_LINUX_DEFAULT并添加GRUB_RECORDFAIL_TIMEOUT=0

    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    GRUB_DEFAULT=0
    GRUB_TIMEOUT_STYLE=hidden
    GRUB_TIMEOUT=0
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=2331fe68-3e7a-4937-9cfa-74fc7a4b79f6 resume_offset=835584"
    GRUB_CMDLINE_LINUX=""
    
    # Avoiding grub to show up in boot when resuming from hibernation
    GRUB_RECORDFAIL_TIMEOUT=0
    

    f. 更新grub文件后,运行此命令:

    $ sudo update-grub
    
那就是这样了。现在你可以通过运行命令将系统置于休眠状态。
$ sudo systemctl hibernate

谢谢,这对我在Ubuntu 19.10上有效。 - Rémy Hosseinkhan Boucher

对我来说,安装hibernate软件包,重新启动然后运行sudo hibernate-disk是有效的。我相信可以将其添加到菜单中,但对我来说不值得花时间去做。

这并没有帮助我。我使用双系统的Ubuntu 18.04.3。 - Swaroop
非常感谢!这对我在Ubuntu MATE 18.04上起作用了。 - egor83

这个指令适用于我的Ubuntu 18.04安装。

  1. sudo apt install hibernate 它会安装hibernate和其他所需的依赖项来进行休眠
  2. grep swap /etc/fstab (找到UUID)
  3. sudoedit /etc/default/grub 在GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"行添加swap的UUID。行看起来像这样GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=swap的UUID"
  4. sudo update-grub
  5. 重新启动,在重启后sudo systemctl hibernate。如果一切正常,添加菜单项。
  6. sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla 现在粘贴以下内容:
[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

https://askubuntu.com/a/819891/712203复制:
  1. 重新启动电脑
  2. 安装https://extensions.gnome.org/extension/755/hibernate-status-button/

1不要将固定值添加到/etc/default/grub中,考虑使用update-initramfs -u -k all来更新initramfs,并查找类似于The initramfs will attempt to resume from /dev/dm-0的消息。这将自动设置恢复设备。 - ukos
非常感谢,Ubuntu 18.04 上完美运行!请注意,如果您是第一次使用 GNOME 扩展,您需要安装一个浏览器扩展和一个连接器。这在扩展链接的顶部有详细说明。 - Karim Sonbol

扩展我的评论,回应kelvinelove的答案,他建议编辑的文件在我的系统上不存在(全新的Ubuntu 16.04)。相反,我做了以下操作:
  1. sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. 查找这些部分(它们彼此紧挨着):

    [Disable hibernate by default in upower] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=no

    [Disable hibernate by default in logind] Identity=unix-user:* Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key; ResultActive=no

  3. ResultActive=no更改为ResultActive=yes

  4. 按下Ctrl + O保存文件。
  5. 重新启动计算机
  6. 现在您的电源菜单中有Hibernate选项。

编辑:Gunnar 指出,如果某个软件包更新,则该文件将被覆盖,因此根据您的意图,这很可能不是最佳解决方案。

来源:http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/


/etc目录中的文件默认情况下是不存在的。它是一个你自己创建的配置文件。根据你上面的建议,编辑一个属于软件包的文件是个不好的建议,因为在下次软件包更新时会被覆盖掉。 - Gunnar Hjalmarsson
如果是这样的话,我会认为应该明确说明可能不存在。对于一个评分很高的Ask Ubuntu答案,我期望得到更多,而不仅仅是“复制/粘贴这个命令”->“输入这个” -风格的回答,缺乏任何验证是否做正确的事情(除了检查它是否起作用)。如果有人在几年后找到这个答案,但因为文件是空的而害怕尝试,而且指示清楚地说明要添加到文件中,暗示它存在呢?尽管如此,我感谢提供的信息,将其添加到答案中以完整。 - fgblomqvist
1公平的观点;我根据那个澄清编辑了NirajW的回答。值得注意的是,这个页面上提供信息的原始来源谈到了“创建”。 - Gunnar Hjalmarsson
太完美了,你救了我兄弟 :) - Azam Alvi

这里有一些非常好的资源,可以帮助您解决Ubuntu下一些常见的休眠问题。
在我的情况下,我在Lenovo u300s上运行Ubuntu 16.10,为了使休眠正常工作,我必须执行以下操作:
  • 创建一个适当大小的交换文件(我通常设置为大约1倍大小,但我听说过最多1.6倍和2倍)
  • 编辑/etc/default/grub文件,添加以下行:

    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"
    
简历是指您特定的交换文件UUID。特别是在我的机器上,设置pci=nomsi是关键。
祝你好运!

Grub区分大小写吗?为什么使用RESUME? - NelsonGon

首先,我建议您测试一下您的机器是否支持休眠功能,因为默认情况下禁用休眠的原因是因为它有时会对某些机器产生不良影响。通过打开终端(Ctrl+Alt+T)并输入sudo pm-hibernate来测试您的机器。
您的机器应该会进入休眠状态。在休眠后唤醒您的机器,并观察它是否表现异常或正常运行。如果在休眠后出现任何异常情况,我建议您不要继续以下步骤。然而,如果一切正常,可以按照以下步骤激活休眠功能:
sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

编辑打开的文件并添加以下行:
[Re-enable hibernation]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

重启计算机后,登录后,您应该在电源菜单的右上角设置处看到一个休眠选项。

我有一台ThinkPad - E550,当我的操作系统是Ubuntu 15.1或Windows 8.1时,它在休眠方面没有任何问题。但是使用Ubuntu 16.04时,当我使用命令“sudo pm-hibernate”时,它无法完全进入休眠状态,只是屏幕变黑,机器仍然开着。 - Mahyar
在我的情况下,该命令根本没有任何作用。终端会跳到新行并等待下一个命令,即先前的命令已被执行。但它完全没有任何作用。 - axolotl
这对我来说不起作用。Ubuntu 16.04。休眠选项在“设置”->“电源”中没有显示,并且始终处于禁用状态,还有其他的解决方法吗? - Daniele Segato
修改已有的政策更好:http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/ - fgblomqvist
com.ubuntu.enable-hibernate.pkla文件中的内容不完整。请参考NirajW发布的答案。 - Gunnar Hjalmarsson
@fgblomqvist:不是的,因为这样的编辑会在下次软件包更新时被覆盖掉。 - Gunnar Hjalmarsson