最近,我的 ThinkPad T570 在 Ubuntu 下突然出现了一个比较麻烦的问题:
电脑进入挂起状态以后,重新唤醒时屏幕一直黑着,最终只能长按电源键强制关机。
以前我暂停使用电脑时,经常直接挂起。下一次回来以后轻按电源键,就能继续之前的工作。但在 2026 年 7 月 30 日,这种使用方式连续出现异常。
当天至少有两次是在正常使用过程中遇到挂起后无法恢复显示,后来完成系统更新后,我又主动测试了一次,问题仍然能够复现。
最开始,我想继续排查内核、Intel i915、NVIDIA、PRIME 和显示恢复问题。
但排查一段时间以后,我重新确认了自己的实际需求:
我并不一定需要真正的“挂起”。
我只是希望暂停使用电脑时不用关机,回来以后仍然可以继续 Firefox、VS Code、终端和其他已经打开的工作。
于是最后采用了一个更简单的办法:
暂时彻底绕过挂起:关闭自动挂起,同时关闭合盖挂起,只保留锁屏和自动息屏。
最终实际合盖测试通过。
一、最初的问题:挂起以后屏幕无法恢复
我的电脑是 Lenovo ThinkPad T570。
目前的主要环境是:
Linux 内核:7.0.0-28-generic;PRIME 模式:on-demand;Intel 核显:HD Graphics 620;Intel 驱动:i915;NVIDIA 独显:GeForce 940MX;NVIDIA 驱动:580.173.02。
问题发生以后,大致过程是:
正常使用电脑 → 进入挂起 → 稍后轻按电源键 → 屏幕没有亮起 → 再次轻按几次 → 仍然黑屏 → 最后只能长按电源键 → 强制关机 → 重新开机。
当时比较容易产生一个错觉:
按下电源键以后,电脑根本没有从挂起状态恢复。
但后面的日志分析表明,实际情况并不是这样。

二、系统其实已经醒了,只是屏幕没有恢复
查看上一轮启动日志以后,可以看到系统正常进入了深度挂起:
PM: suspend entry (deep)
而在尝试唤醒以后,也能看到:
ACPI: PM: Low-level resume complete
ACPI: PM: Waking up from system sleep state S3
随后还有:
System returned from sleep operation 'suspend'.
PM: suspend exit
NVIDIA 的恢复流程也正常执行:
Starting nvidia-resume.service
...
Finished nvidia-resume.service
甚至 Wi-Fi 都重新连接成功,并重新获得了 IP 地址。
所以更准确的情况其实是:
电脑进入挂起 → 按电源键唤醒 → 底层电源管理恢复成功 → NVIDIA 恢复流程完成 → 网络重新连接 → 但是屏幕没有恢复显示。
也就是说:
电脑其实已经醒了,只是显示恢复出现了问题。
这也解释了为什么我从外部观察时,会感觉“轻按电源键完全没有反应”。
三、一天内多次出现相同问题
其中一次比较完整的时间线是:
7 月 29 日 22:33 进入深度挂起 → 7 月 30 日 10:57 尝试唤醒 → 系统完成恢复 → 屏幕仍然黑屏 → 约 11:00 长按电源键强制关机 → 11:01 左右重新开机。
另一次发生在当天中午:
12:33 左右进入深度挂起 → 12:56 左右可能轻按了一次电源键 → 系统已经恢复 → 屏幕仍然黑屏 → 约 13:30 回来以后再次轻按几次电源键 → 仍然没有显示 → 长按电源键强制关机 → 重新开机。
这已经不太像一次偶发故障了。
四、日志中还出现了 Intel i915 显示异常
进一步检查以后,还发现 Intel i915 驱动多次出现:
i915 0000:00:02.0: [drm] *ERROR* Atomic update failure on pipe A
以及:
workqueue: i915_hpd_poll_init_work [i915]
hogged CPU for >10000us
另外,在进入挂起之前,GNOME 还出现过:
Cursor update failed: drmModeAtomicCommit: 无效的参数
而且类似情况并不是只出现了一次。
所以目前至少可以确认:
故障重点更偏向于挂起之后的图形显示恢复,而不是电源键本身无法唤醒电脑。
但我最终没有继续深挖到底是 Linux 内核、Intel i915、NVIDIA,还是混合显卡显示链路中的哪一层导致黑屏。
因为后面我发现,其实没有必要为了这个问题继续大幅修改系统。
五、先进行了一次正常系统更新
在考虑修改内核和显卡配置之前,我先执行了一次正常更新:
sudo apt update
sudo apt upgrade
当时系统提示有 75 个软件包可以升级:
升级 75 个软件包,安装 2 个,卸载 0 个。
其中包括一些与桌面、显示和固件有关的组件,例如:
其中包括 gnome-shell、gdm3、gnome-session、ubuntu-session、linux-firmware-intel-graphics、linux-firmware-nvidia-graphics 和 fwupd。
这次更新没有更换当前内核,也没有更换 NVIDIA 驱动版本。
完成更新并重启以后,再次确认:
echo "当前内核:$(uname -r)"
echo "PRIME 模式:$(prime-select query)"
nvidia-smi | head -n 10
结果仍然是:
当前内核:7.0.0-28-generic
PRIME 模式:on-demand
NVIDIA Driver Version: 580.173.02
随后,我再次通过 Ubuntu 系统菜单执行“挂起”。

结果:
依然失败。
屏幕再次黑屏,最终还是只能强制关机。
所以至少可以确认:
这次普通的软件包更新并没有解决挂起后黑屏的问题。
六、重新确认需求:其实我不一定需要挂起
排查到这里以后,我开始重新考虑:
我到底为什么需要挂起?
答案其实很简单。
我平时真正想实现的是:
暂停使用电脑 → 不用关闭 Firefox、VS Code 和终端 → 不用关机 → 过一会儿甚至第二天回来 → 继续原来的工作。
至于电脑在这段时间内到底是不是进入 Suspend,其实对我并不重要。
而且我的这台 T570 目前已经没有电池,一直连接电源使用。
所以:
电脑继续正常运行,只关闭屏幕,对我来说完全可以接受。
这样还可以直接绕过目前存在问题的“挂起 → 恢复 → 显示恢复失败 → 黑屏”这条路径。
于是,我决定暂时不再修改内核、不切换 PRIME 模式,也不调整 NVIDIA 驱动,而是彻底关闭挂起功能。
七、关闭自动挂起
首先进入:
设置 → 电源 → 节电
我原来的设置中:
自动息屏:开启,延时 5 分钟;自动挂起:使用电池时开启,15 分钟;插入电源时关闭。

因为我的电脑已经没有电池,所以实际上,“插入电源时:关闭”才是目前真正起作用的设置。
不过为了保险起见,我还是把“使用电池时”的自动挂起也一起关闭。
最终变成:
自动息屏:开启,5 分钟;自动挂起:使用电池时关闭,插入电源时关闭。

这里需要区分两个概念:自动息屏 ≠ 自动挂起。我仍然保留 5 分钟自动息屏。
也就是说:
离开电脑 → 5 分钟没有操作 → 屏幕关闭 → 电脑继续运行 → 不会因为空闲时间过长进入挂起。
这已经能够满足大部分暂时离开电脑的场景。
八、关闭自动挂起还不够,合盖仍然是另一个入口
接下来还有一个问题:
合上笔记本屏幕以后怎么办?
关闭“自动挂起”,只解决了长时间没有操作导致的挂起。
但是,合上笔记本盖子是另一个独立的动作。
而我真正希望实现的是:
正在工作 → 合上 T570 屏幕 → 电脑继续运行 → 过一会儿重新掀开 → 直接继续工作。
所以还需要单独处理合盖行为。
九、GNOME 优化中已经找不到合盖选项
我的电脑已经安装 GNOME“优化”。
最开始,我也尝试在这里寻找类似“合上笔记本盖子时挂起”的开关。
但当前版本的“优化”界面中已经看不到这一项。

所以最后选择直接通过 systemd 配置合盖行为。
十、通过 systemd 禁止合盖挂起
执行:
sudo mkdir -p /etc/systemd/logind.conf.d
sudo tee /etc/systemd/logind.conf.d/99-lid-no-suspend.conf >/dev/null <<'EOF'
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
EOF
echo "========== 合盖配置 =========="
cat /etc/systemd/logind.conf.d/99-lid-no-suspend.conf
输出:
========== 合盖配置 ==========
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

ignore其中,HandleLidSwitch=ignore 表示普通合盖不执行挂起;HandleLidSwitchExternalPower=ignore 表示接通电源时合盖也不执行挂起;HandleLidSwitchDocked=ignore 则同样将 Docked 状态下的合盖动作设置为忽略。
对于我的实际情况,最重要的是 HandleLidSwitchExternalPower=ignore,因为这台 T570 目前一直连接电源使用。
十一、第一次命令行重启还被阻止了
配置完成以后,我原本直接执行:
sudo reboot
结果却得到:
Call to Reboot failed: Operation denied due to active block inhibitor
也就是说,当时系统中存在一个正在阻止直接重启的会话或程序。
我没有使用强制参数绕过,而是直接通过 Ubuntu 图形界面正常执行“重新启动”。
这样可以让桌面环境先正常处理当前会话,再完成重启。
十二、重启以后确认合盖配置是否真正生效
重新进入系统以后,执行:
echo "========== 合盖处理配置 =========="
systemd-analyze cat-config systemd/logind.conf \
| grep -E 'HandleLidSwitch'
结果:
#HandleLidSwitch=suspend
#HandleLidSwitchExternalPower=suspend
#HandleLidSwitchDocked=ignore
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

这里需要特别注意前后两组配置的区别。
前面的 #HandleLidSwitch=suspend、#HandleLidSwitchExternalPower=suspend、#HandleLidSwitchDocked=ignore 都带有 #,只是默认配置中的注释,并没有直接生效。
真正需要关注的是最后的 HandleLidSwitch=ignore、HandleLidSwitchExternalPower=ignore、HandleLidSwitchDocked=ignore。这说明刚才创建的 /etc/systemd/logind.conf.d/99-lid-no-suspend.conf 已经被系统正确读取。
十三、最终进行实际合盖测试
配置和重启都完成以后,我没有再测试那个已经连续失败多次的“挂起”。
而是直接测试真正想要的使用场景:
正常使用电脑 → 合上 T570 屏幕 → 等待约 30 秒 → 重新掀开屏幕。
最终结果:
测试通过。
电脑没有进入挂起。
重新掀开屏幕以后,能够继续之前的工作。
也就是说,现在已经实现:
正在使用电脑 → 暂时离开 → 锁屏 / 合盖 → 屏幕关闭 → 电脑本身继续运行 → 过一段时间回来 → 重新打开屏幕 → 继续工作。
这正好就是我真正需要的效果。
十四、现在我的最终配置
目前,我保留自动息屏,时间为 5 分钟。
自动挂起则全部关闭:使用电池时关闭,插入电源时也关闭。
同时设置 HandleLidSwitch=ignore、HandleLidSwitchExternalPower=ignore 和 HandleLidSwitchDocked=ignore。
所以现在有两种日常使用方式。
短时间离开时:
锁屏 → 5 分钟后自动息屏 → 电脑继续运行 → 回来解锁。
长一点时间不使用时,也可以:
合上盖子 → 电脑继续运行 → 重新掀开 → 继续原来的工作。
不需要频繁关机。
也不需要再冒挂起以后黑屏、最终被迫强制关机的风险。
十五、为什么最终没有退内核或者切换显卡模式
排查期间,我还发现电脑中保留了 7.0.0-27-generic 和 7.0.0-28-generic 两个内核版本。
之前还考虑过回退到 7.0.0-27,或者将 PRIME 从 on-demand 切换为 Intel;也可以继续测试 s2idle,并进一步研究 i915、DRM、NVIDIA、GNOME、ACPI 之间到底是哪一层导致显示恢复失败。
但这些操作都意味着继续扩大排查范围。
而我的实际目标只是:
暂停使用电脑以后,不用重新关机、开机。
现在已经通过一个更加简单的方案实现了这个目标。
所以我最终决定:
暂时停止继续修改内核、显卡和启动参数。
以后系统更新以后,可以偶尔再测试一次真正的挂起。
如果某一天发现“挂起 → 轻按电源键 → 屏幕正常恢复”已经稳定正常,再考虑重新开启挂起功能。
十六、这个方案也有代价:合盖后电脑没有休眠
需要特别说明:现在的“合盖”已经不再等于“挂起”。
合上屏幕以后,电脑仍然处于正常运行状态。
也就是说,CPU 仍然运行,内存仍然保持工作,Wi-Fi 仍然连接,后台任务仍然执行,终端程序仍然可能继续运行。
所以耗电肯定比真正的挂起更高。
不过我的 T570 已经没有电池,一直连接电源,而且主要放在桌面上使用,因此这个代价目前可以接受。
反而还有一个好处:
后台正在执行的任务不会因为挂起而停止。
但需要注意:
合盖以后不要把仍在运行的电脑直接塞进电脑包或者其他密闭空间。
因为电脑实际上没有休眠,仍然会产生热量。
十七、以后如何恢复默认合盖挂起
这次方案并没有修改原始的 systemd 配置文件,而是在 /etc/systemd/logind.conf.d/ 中新建了 99-lid-no-suspend.conf。
所以恢复也很简单。
以后挂起问题解决后,可以执行:
sudo rm /etc/systemd/logind.conf.d/99-lid-no-suspend.conf
然后正常重新启动电脑。
之后再根据需要,在:
设置 → 电源
中重新打开自动挂起。
这样就可以恢复原来的使用方式。
十八、最终结论
这次问题最开始看起来是:
ThinkPad T570 挂起以后无法唤醒。
但结合系统日志,实际更接近:
进入挂起正常 → 电源键成功触发恢复 → 底层恢复流程完成 → NVIDIA 恢复完成 → 网络恢复 → 显示没有正常恢复 → 屏幕一直黑着。
期间也确实观察到了 i915、drmModeAtomicCommit、Atomic update failure 等显示相关异常。
不过普通系统更新以后,问题仍然能够复现。
最终,我没有继续为了“必须恢复挂起功能”而折腾内核和显卡。
因为重新确认需求以后发现:
我真正需要的是离开电脑以后不用关机,回来还能继续工作,而不是一定要让电脑进入挂起。
于是最终方案变成:
关闭自动挂起 + 关闭合盖挂起 + 保留自动息屏。
然后进行了实际测试:
合盖 → 等待约 30 秒 → 重新掀开 → 正常继续工作。
测试通过。
至少现阶段,这已经解决了我最实际的问题:
不用再因为暂停使用电脑,而频繁遭遇黑屏后长按电源键强制关机。
Linux 服务器运维、部署与线上故障排查
如果你的网站或后端服务部署在 Linux 服务器上,遇到访问异常、Nginx 配置问题、MySQL / Redis 异常、Docker 服务不可用、磁盘占满、CPU / 内存过高等问题,可以联系我做一次远程排查。
适合以下场景:
✅ 网站打不开或访问不稳定
✅ Nginx / PHP-FPM 配置异常
✅ MySQL / Redis 性能或连接问题
✅ Docker 服务部署与维护
✅ 服务器迁移与环境配置
✅ CPU / 内存 / 磁盘异常排查
服务内容:
✅ Linux 环境检查
✅ 网站部署与迁移
✅ Nginx / PHP-FPM / MySQL / Redis 排查
✅ Docker 配置与维护
✅ 服务器性能分析
✅ 长期远程运维支持
如需咨询,请联系我,并注明:Linux 运维咨询。
联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com
