Ubuntu 16.04 在挂起或休眠后无法关机

Ubuntu 16.04 在挂起或休眠后无法关机

为什么没有接受答案

原因很简单,我已经很久没有使用 Ubuntu 了,所以我无法测试答案。

问题

实际上我的问题可能看起来与这个论坛里的(并且这个在别处); 确实问题是一样的,但我还是要问,因为我可以提供更多信息,而且我尝试了在网上找到的一些解决方案(可能会使情况变得更糟)。

我曾经让 Ubuntu 15.10 进入休眠状态(合上盖子)。现在我已将其更新到 16.04(我认为这是一件好事,因为这个版本是 LTS,与 15.10 不同),我无法再使用休眠(或暂停!):如果我尝试使用它,Ubuntu 不会关闭,只是屏幕变黑,电源指示灯亮起,我除了手动关闭(长按电源按钮)之外什么也做不了。当我再次打开电源时,我看到以下几行

在此处输入图片描述

然后 Ubuntu 启动了。

这里我尝试过

sudo -s
echo shutdown > /sys/power/disk
echo disk > /sys/power/state

sudo -s
echo platform > /sys/power/disk
echo disk > /sys/power/state

只有第一个部分起作用,并且只起作用一次:部分起作用的意思是,在残酷关闭之后,会话得以恢复。

然后我试着跟着这个建议。我不明白命令后面写的注释,所以我直接按原样输入了命令(认为如果命令中有需要替换的内容,就会出现“此命令/文件夹不存在”之类的错误):

编辑

cat /proc/meminfo
sudo swapoff -a
sudo dd if=/dev/zero of=/swapfile bs=1024 count=8M
sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
sudo -b gedit /etc/fstab
free -m
swapon

mount | grep " / "
sudo blkid -g
sudo blkid
sudo filefrag -v /swapfile | grep "First block:"
sudo filefrag -v /swapfile
echo "resume=UUID=cdXX--X18 resume_offset=66050" | sudo tee /etc/initramfs-tools/conf.d/resume
sudo -b gedit /boot/grub/menu.lst
sudo -b gedit /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... resume=UUID=cdXX--X18 resume_offset=66050"
sudo update-grub -y
sudo update-initramfs -u

也许这是一个糟糕的想法,因为现在我明白了。

图片:

最后我找到了上面链接的问题,然后我去了这里,但我不知道该怎么办。

编辑2现在如果我进入

...$ sudo swapon -s

我什么也没得到

...$

答案1

强制休眠关闭机器:

在寻找一个真正解决这个问题的答案(不是相关的问题)之后,我找到了一个提示这里这帮我完成了工作:

在 config 目录中创建一个文件pm

sudo vim /etc/pm/config.d/hibernate_mode

像这样设置变量HIBERNATE_MODE

HIBERNATE_MODE="shutdown"

完成此操作后,休眠功能会按预期完成关闭计算机。有关该设置的说明,HIBERNATE_MODE请参阅手册冬眠后

休眠时关闭系统的默认方法。如果未设置,系统将使用内核默认值作为默认值。检查 /sys/power/disk 以获取有效值。默认值将被 [方括号] 括起来。

我在该文件中的默认设置是platform。将上面的变量设置为shutdown覆盖此设置,并获得我们想要的结果。

使休眠模式正常工作的相关信息和提示:

至于每个人似乎都遇到的与休眠有关的“相关问题”,快速调试技巧如下:

  1. 检查命令是否sudo pm-hibernate确实执行了某些操作。如果没有,这些其他技巧都没有任何作用。如果不起作用,请确保 1) 交换分区的大小大于 RAM 的大小,并且 2) BIOS 中已禁用安全启动。

  2. 只有当该命令起作用时,才可以根据需要将 Hibernate 集成到系统中。以下是一些常见的命令:

    • 将休眠添加到 Ubuntu 菜单: 对我来说这似乎是最好的答案。官方文档也有略有不同的版本。
      注意:将休眠添加到 Ubuntu 菜单后,您可能还需要修复对 的替代调用sudo systemctl hibernate。显然,(至少对于 Ubuntu 16.04)Ubuntu 菜单选项调用sudo systemctl hibernate而不是sudo pm-hibernatesystemctl hibernate通过将以下内容添加到文件 ,我已修复此问题/etc/systemd/sleep.conf

      [睡眠]
      HibernateMode=关机

      如果文件尚不存在,您可以创建它。更多信息这里

    • 更改电源按钮的行为(默认情况下它显示在交互式菜单中):要将其更改为直接休眠或关机,您需要修改相关的设定条目。如果您感兴趣的话,许多其他答案都通过 GUI 方式进行。要查看可用选项,请使用gsettings range org.gnome.settings-daemon.plugins.power button-power

答案2

我从 15.10 升级到 16.04 后遇到了同样的问题:

  • 合上盖子没有任何作用
  • 使用系统托盘中的菜单项手动暂停会导致半暂停状态,唯一的方法是重置系统。

我通过以下方式解决了这些问题

  1. 将内核升级到 4.4.8(在此之后,菜单暂停功能对我有用)
  2. 将该行添加HandleLidSwitchDocked=suspend到 /etc/systemd/logind.conf(这使得盖子开关再次工作)。

我认为这两个问题都是应该修复的错误(https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1574120)。

答案3

通过查看你的最后一张照片和编辑2,我理解 Ubuntu 无法在您的系统上找到交换分区。因此我建议您创建一个等于或大于您的 RAM 大小的交换分区,然后通过运行重试

sudo pm-hibernate

您可以使用 GParted 创建交换分区,运行此命令进行安装

sudo apt-get install gparted

答案4

默认情况下,Hibernate 已被禁用。

尝试这个

sudo pm-hibernate

如果休眠测试有效,那么当您想要休眠时可以继续使用 sudo pm-hibernate 命令。

您还可以在菜单中启用休眠选项。为此,请使用您最喜欢的文本编辑器创建 /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.hibernate-multiple-sessions
ResultActive=yes

点击此链接了解有关 Hibernation 16.04 的更多信息

去关机

sudo shutdown -h now

重启

sudo shutdown -r now

相关内容