最近,我的 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

发表回复