问题
每当我尝试将 PC 从睡眠/挂起模式唤醒时,系统最初似乎会做出响应,但随后屏幕会冻结并且对我所做的任何操作均不响应。此时,唯一的解决方法似乎是按住电源按钮 5 秒钟强制关闭机器,然后重新启动。
不管睡眠是手动触发的还是在长时间不活动后自动触发的,也不管唤醒尝试是通过移动鼠标、敲击键盘还是按下电源按钮进行的,都会发生这种情况。有时它会再次显示登录屏幕,但有时(我想如果我已经登录了),它会显示一个除了鼠标光标外完全是黑色的屏幕。无论如何,移动鼠标或在键盘上打字都不会产生任何可见的响应。
系统
我正在运行 Ubuntu Studio 24.10,但如果我没记错的话,当我还使用 24.04.x 时也出现了这个问题。
我的硬件如下:
主板: ASUS Z790 GAMING WIFI7
CPU: Intel Core i9-14900K (x86_64)
GPU: AMD Radeon RX 7900XT
存储: 8 TB SSD
内存: 96 GB NVMe DDR5
我已经尝试过的解决方案(无济于事)
Ctrl
冻结时,使用+Alt
+F2
–切换到不同的 TTYF6
:它根本什么也不做。- (顺便说一句,当我没有被冻结时,特别是
Ctrl
++ ,它Alt
不会带我进入一个新的 shell 会话,而是显示一个全黑的屏幕,上面只有一个鼠标光标,F2
这与我在唤醒冻结期间有时看到的非常相似,只是我实际上可以移动鼠标,也可以使用Ctrl
++返回到主图形会话。)Alt
F1
- (顺便说一句,当我没有被冻结时,特别是
- 在 GRUB 配置中限制 CPU 的最大 C 状态:我尝试在/etc/default/grub.d/中创建一个新文件并添加行
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT intel_idle.max_cstate=1"
,然后运行sudo update-grub
并重新启动。我还尝试将变量名称更改为processor.max_cstate
并将值4
更改为 。上述步骤的排列似乎最终都没有任何区别。 - 增加交换空间:/swap.img的大小本来是 8 GB,但我根据我读到的建议将其增加到 10 GB,其中指出交换文件应该是系统总 RAM 的平方根。回想起来,我不确定我最初是否期望这会带来什么不同。
- 禁用 systemd 会话冻结:根据网上的其他建议,我尝试添加以下环境变量来配置 systemd 256+:
- 创建/etc/systemd/system/systemd-suspend.service.d/freeze_fix.conf:
[Service] Environment="SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false"
- 创建/etc/systemd/system/systemd- sleep .service.d/作为指向/etc/systemd/system/systemd- suspend .service.d的符号链接。
- 创建/etc/systemd/system/systemd-homed.service.d/freeze_fix.conf:
[Service] Environment="SYSTEMD_HOME_LOCK_FREEZE_SESSION=false"
- 创建/etc/systemd/system/systemd-suspend.service.d/freeze_fix.conf:
(过去我看到在网上发布类似问题的人经常被告知检查/var/log/syslog中的系统日志和/或(或更具体地说, )的输出。这篇文章的初始版本有来自暂停过程的那些日志的结果粘贴在下面,但我后来删除了它们,因为它们只包含来自暂停过程本身的消息,而不是来自再次唤醒过程的消息,而唤醒过程才是实际问题发生的时候。)journalctl
journalctl -b -1
我终于找到了问题的根源!结果发现,出于某种原因,这个问题只在我启用蓝牙时才会发生。虽然这表明 systemd 和我的网卡在睡眠/挂起例程期间相互交互的方式存在更深层次的问题,但它也揭示了一个非常简单的解决方法:只需确保在触发睡眠/挂起时禁用蓝牙即可。
最干净的方法是创建一个小型的 systemd 服务,该服务使用 rfkill 来检查蓝牙是否已解除阻止(即打开),如果是,则在睡眠/暂停期间阻止它,然后在系统重新启动时再次解除阻止。
创建单元文件/etc/systemd/system/bt_workaround.service:
运行
sudo systemctl daemon-reload
以识别单元文件并sudo systemctl enable bt_workaround
使其投入工作。(改编自这个 Reddit 评论,并添加了一些我自己的改进。)