一次 NVIDIA 驱动安装引发的“黑屏”救援实录
从显示器无信号、无法进 BIOS,到 SSH 救场,——记录一次 Ubuntu Server 下的显卡排障历程。
背景
我组装了一台 DIY 主机,显卡是RTX3060 12G,安装 Ubuntu Server 24.04 系统。首次启动时,通过显示器能正常看到 tty 登录界面。听说系统自带的都是默认的开源驱动没有官方驱动好,于是我尝试安装 NVIDIA 官方驱动,过程中遇到了 Secure Boot 提示导致安装不成功,卸载后又尝试开源驱动失败,反复折腾几次后,系统出现了一个诡异的现象:
- 重启后显示器全程无信号(提示 DP 检测无输出信号,连 BIOS 自检画面都看不到)
- 按 Del 键无法进入 BIOS(无论怎么重启,进入 BIOS 的快捷键都进不去)
- 尝试扣主板电池、短接 CMOS 跳线(扣电池后放置 3 分钟)
- 但系统似乎是正常启动的——因为同一局域网内的另一台电脑可以 SSH 连接上去!(幸好安装系统设置了静态 IP,无比庆幸)
这意味着:系统活着,但显卡“哑巴”了。
第一阶段:确认系统状态,尝试进入 BIOS
通过 SSH 登录后,执行 sudo update-grub,输出中包含一行:
Adding boot menu entry for UEFI Firmware Settings ...
这说明 GRUB 已经识别了 UEFI 固件设置入口。于是我尝试盲操作进入 BIOS:
sudo systemctl reboot --firmware-setup
重启后显示器依然黑屏,BIOS 界面没有出现。
后来尝试了 sudo grub-reboot "UEFI Firmware Settings" 同样无效。看来问题出在更底层:
显卡在 POST 阶段就没有输出信号。
第二阶段:彻底解决
问了 AI,给出的一系列办法都是敲什么命令,进行重启,挨个试过都无法解决这个问题。
最终使用了物理大法彻底解决了问题:
把主板电池扣了,闲置 3 分钟扣完电池,长按开机键 30 秒,放光主板残余电量(我就是这步没做,导致前面扣了电池还没解决)sudo grub-reboot "UEFI Firmware Settings"设置电脑立马重启,并进入BIOS
就这样,成功的重启了电脑,并顺利进入BIOS 了,之后按 AI 的提示,禁用了 Securty Boot ,顺利的安装成功 nvidia 驱动。
第三阶段:驱动到底装没装好?
在 SSH 中运行 nvidia-smi,有如下输出:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.288.01 Driver Version: 535.288.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 0 NVIDIA Graphics Device Off | 00000000:01:00.0 Off | N/A |
| 0% 30C P8 8W / 170W | 1MiB / 12288MiB | 0% Default |
+-----------------------------------------+----------------------+----------------------+
驱动版本、显存、温度都正常识别——驱动是装好了的!
第四阶段:修改nomodeset模式
查看内核启动参数:
cat /proc/cmdline
输出:
BOOT_IMAGE=/vmlinuz-6.8.0-107-generic root=/dev/mapper/ubuntu--vg-ubuntu--lv ro nomodeset
nomodeset!这个参数是在安装驱动前为了兼容性临时添加的,它会禁用所有显卡的模式设置,包括 NVIDIA 驱动。即使 nvidia-smi 能运行,显示输出也被这个参数强行关掉了。
查看更详细的状态:
nvidia-smi --query-gpu=display_active,display_mode --format=csv
输出:
display_active, display_mode
Disabled, Disabled
果然,显示输出被禁用。
第四阶段:移除 nomodeset,启用 nvidia-drm.modeset
修改 /etc/default/grub:
sudo nano /etc/default/grub
将原来的:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"
然后更新 GRUB 并重启:
sudo update-grub
sudo reboot
重启后再次检查内核参数:
cat /proc/cmdline
输出变成了:
BOOT_IMAGE=/vmlinuz-6.8.0-107-generic root=/dev/mapper/ubuntu--vg-ubuntu--lv ro nvidia-drm.modeset=1
nomodeset 已经消失,nvidia-drm.modeset=1 已生效。检查 nvidia_drm 模块参数:
sudo cat /sys/module/nvidia_drm/parameters/modeset
返回 Y,说明 modeset 已启用。
然而——显示器依然黑屏,nvidia-smi 仍然显示 display_active: Disabled。问题没有完全解决。
第五阶段:更深层的排查
查看内核日志:
sudo dmesg | grep -i nvidia
可以看到 nvidia-modeset 和 nvidia-drm 正常加载,但没有任何关于显示设备初始化的信息。检查 framebuffer 设备:
ls -l /dev/fb*
返回 No such file or directory,说明内核没有为显卡创建控制台 framebuffer。这意味着 NVIDIA 驱动虽然加载了 DRM,但拒绝激活物理显示输出。
可能的原因:
- 显卡没有检测到物理连接的显示器(EDID 读取失败、线材问题)
- 主板 BIOS 将主显示输出设为集显(即使没有接集显)
- 驱动本身的策略将这张卡视为纯计算设备
当前状态与后续尝试
我目前仍处于排障中,没有物理显示就没有吧,可能是我两台机器DP 线材接到一个屏幕的原因导致的,已经安装好了,后续进行一些 显卡的使用再看 显示是否正常使用,本来就作为 CUDA 的学习卡用的,输不输出 显示都无所谓了。
经验与教训
nomodeset是一把双刃剑:它能让你在安装驱动时避免黑屏,但装完驱动后必须移除,否则显卡永远无法输出画面。- SSH 是救命稻草:只要系统能网络启动,你就可以远程诊断,哪怕显示器完全黑屏。
- NVIDIA 驱动在 Server 版 Ubuntu 上的显示输出行为与桌面版不同:Server 默认没有图形界面,驱动可能不会主动激活显示输出,需要额外的内核参数或 X11 配置。
- 进入 BIOS 与操作系统驱动无关:如果连 POST 画面都看不到,问题出在硬件/固件层面,需要清除 CMOS、更换视频接口或使用集显。
后续更新
如果你遇到类似问题,或者知道如何强制激活 NVIDIA 显卡的显示输出(即使没有检测到显示器),欢迎留言交流。我会在解决后更新这篇博文。
最后:如果你能看到这里,说明你的显示器是亮的,且系统正常——真羡慕你 😄