Ubuntu 在挂起然后休眠后无法唤醒

Ubuntu 在挂起然后休眠后无法唤醒

有一个问题我还没能解决,而且似乎也没有太多讨论。

我最近在 Ubuntu 22.04 上的交换分区上启用了休眠功能,方法是在文件行中添加并在文件中添加。resume=UUID=UUID_OF_MY_SWAP_PARTITION这成功启用了休眠功能,我可以看到菜单项,并且可以随时休眠。GRUB_CMDLINE_LINUX_DEFAULT/etc/default/grubRESUME=UUID=UUID_OF_MY_SWAP_PARTITION/etc/intramfs-tools/conf.d/resume

休眠然后唤醒,暂停然后唤醒都没有问题。一切都运行良好。

我还在文件中禁用了混合睡眠,/etc/systemd/sleep.conf.d/并将挂起后休眠的延迟设置为 60 分钟;以下是该文件的内容

[Sleep]
AllowHybridSleep=no
HibernateDelaySec=60min

我想要的行为是合上盖子或按下睡眠键或不活动来执行经典挂起,并且任何这些经典挂起,无论是否插入电源,都会在 60 分钟后进入休眠状态。在不改变任何命令的行为的情况下,它确实会这样做。在挂起模式下唤醒确实有效,并且在挂起 60 分钟后成功进入休眠状态。但是,当休眠时这边走仅有的当休眠状态从挂起状态开始时,我无法再次启动:打开计算机后会进入 grub 屏幕(双启动),而选择 Ubuntu 则无法完全启动:我反而在一个类似命令行的黑屏上收到一条消息。

我尝试再次执行该错误以复制错误消息,但今天它什么都没写!只是一个黑屏!此外,在接下来的几天里,它启动到登录屏幕,在要求输入会话密码之前显示时间,但它停留在时间上而不接受输入。我不知道是什么导致了这种行为的改变。论坛上的用户在挂起(不是挂起然后休眠)时遇到过这种问题,并显示以下消息:

Bluetooth hci0: Timeout waiting for suspend events
Bluetooth hci0: Suspend timeout bit: 6
Bluetooth hci0: Suspend notifier action (3) failed: -110

我的错误消息非常相似。它也是三行,第一行肯定是一样的。接下来的两行我不确定,甚至写的数字更少,但它们看起来确实很相似。我再次检查了日志,但找不到它。

然后计算机不接受任何输入并且无法启动;我必须使用电源按钮(或 REISUB)关闭它然后再次打开 - 这有点违背了休眠的目的......

我尝试查看日志,但不确定要检查哪个日志,也没有找到任何真正相关的内容。但我不太擅长这个,所以如果你们中有人想让我查找一些具体的东西,我当然可以!

供您参考,我使用的是 DELL Precision 7520 笔记本电脑,在我自己添加的 SSD 上安装了全新的 Ubuntu 22.04,并与后来安装的 Windows 11 进行双启动。这两个分区、两个数据分区和我的交换分区都在 SSD 上。还有一个仅用于数据存储的 HDD。

我确信这很容易修复,但我完全不知道该怎么做。

非常感谢您的帮助,我会提供您想要的任何进一步的信息。


编辑 :

不幸的是,按照评论中的建议,使用内核启动选项mem_sleep_default=s2idle没有任何效果。

虽然我无法真正理解日志文件,但似乎有很多 nvidia 消息。我记得在同一台计算机上,但很久以前,比如 ubuntu 16.04 或 18.04,我遇到了唤醒问题(不是休眠后,只是常规睡眠),最终切换到服务器 nvidia 驱动程序解决了这个问题。在这种情况下,我在软件和更新中尝试了许多可用的 nvidia 驱动程序,无论是否是服务器,但都无济于事。
我最初想这样做是为了节省能源。由于我有一个 SSD,从磁盘唤醒非常快,所以我决定完全禁用 RAM 睡眠并一直处于休眠状态。
我首先尝试在 .conf 文件中/etc/systemd/logind.conf.d/说每个电源操作都是休眠:

[Login]
HandlePowerKey=poweroff
HandleSuspendKey=hibernate
HandleHibernateKey=hibernate
HandleLidSwitch=hibernate
HandleLidSwitchExternalPower=hibernate

但奇怪的是,它并不够用(盖子开关可以休眠,但不能暂停键)。将 conf 文件更改/etc/systemd/sleep.conf.d/SuspendModeSuspendState休眠相同的文件也不起作用。我不得不创建一个链接

sudo ln -s /usr/lib/systemd/system/systemd-hibernate.service /etc/systemd/system/systemd-suspend.service

现在它可以工作了,我不再有“经典”暂停,它只是一直处于休眠状态。

这样对我来说没问题!也许这可以帮助某些人,尽管根本问题仍未解决。

感谢您的帮助 :)

答案1

我看到这个消息已经很晚了,但无论如何我都会发布,希望它能帮助到这个情况或者帮助到其他人。

我遇到了同样的问题,暂停工作,休眠工作,但暂停然后休眠失败。我在 Dell XPS 9310 上运行 22.04。

我最终使用了 suspend-then-hibernate 的替代方案,名为 suspend-sedation。这是一个可以作为 systemd 服务的一部分运行的脚本。与 suspend-then-hibernate 一样,它会在一定秒数(由下面脚本中的 ALARM_SEC 变量定义)后将笔记本电脑从挂起模式唤醒,然后进入休眠状态。在我的情况下,该变量设置为 21600 秒,即六个小时。

起初,我也遇到过失败,但因为它是一个脚本,所以我能够尝试一下。我怀疑它导致我的笔记本电脑在完全从挂起状态唤醒之前进入休眠状态,所以我在退出挂起状态时插入了三秒钟的延迟。这招奏效了。我还对其进行了调整,这样如果笔记本电脑插入电源,它就不会进入休眠状态。这是脚本,有关更多信息,请参阅“文档”部分中的页面:

# save as: /etc/systemd/system/suspend-sedation.service
# reload service files to include this service: sudo systemctl daemon-reload
# start the service: sudo systemctl start suspend-sedation.service
# check its status: sudo systemctl status suspend-sedation.service
# enable to run at startup: sudo systemctl enable suspend-sedation.service

[Unit]
Description=Suspend Sedation
Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1420279
Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1574125
Documentation=https://wiki.archlinux.org/index.php/Power_management
Documentation=http://forums.debian.net/viewtopic.php?f=5&t=129088
Documentation=https://wiki.debian.org/SystemdSuspendSedation
Conflicts=hibernate.target hybrid-sleep.target
Before=sleep.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
Environment="ALARM_SEC=21600"
ExecStart=/usr/sbin/rtcwake --seconds $ALARM_SEC --auto --mode no
ExecStop=/usr/bin/bash -c '\
sleep 3; \
ALARM=$(cat /sys/class/rtc/rtc0/wakealarm); \
NOW=$(date +%s); \
BATRY=$(echo /sys/class/power_supply/BAT*); \
BAT_STATUS=$(tail "$BATRY/status"); \
if [[ -z "$ALARM" ]] || [[ "$NOW" -ge "$ALARM" ]]; then \
  if [[ "$BAT_STATUS" = "Charging" ]] || [[ "$BAT_STATUS" = "Full" ]]; then \
    echo "suspend-sedation: Woke up, no alarm set, but plugged in. Suspending..."; \
    systemctl suspend; \
  else \
    echo "suspend-sedation: Woke up, no alarm set, and unplugged. Hibernating..."; \
    systemctl hibernate; \
  fi \
else \
  echo "suspend-sedation: Woke up before alarm - normal wakeup."; \
  /usr/sbin/rtcwake --auto --mode disable; \
fi \
'

[Install]
WantedBy=sleep.target

哦,我也遇到了和你一样的蓝牙问题。第二个答案在此帖子帮我解决了这个问题。

相关内容