Ubuntu Server 24.04 新手教程:一次 NVIDIA 驱动安装引发的“黑屏”救援实录

10 阅读5分钟

一次 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-modesetnvidia-drm 正常加载,但没有任何关于显示设备初始化的信息。检查 framebuffer 设备:

ls -l /dev/fb*

返回 No such file or directory,说明内核没有为显卡创建控制台 framebuffer。这意味着 NVIDIA 驱动虽然加载了 DRM,但拒绝激活物理显示输出

可能的原因:

  1. 显卡没有检测到物理连接的显示器(EDID 读取失败、线材问题)
  2. 主板 BIOS 将主显示输出设为集显(即使没有接集显)
  3. 驱动本身的策略将这张卡视为纯计算设备

当前状态与后续尝试

我目前仍处于排障中,没有物理显示就没有吧,可能是我两台机器DP 线材接到一个屏幕的原因导致的,已经安装好了,后续进行一些 显卡的使用再看 显示是否正常使用,本来就作为 CUDA 的学习卡用的,输不输出 显示都无所谓了。

经验与教训

  1. nomodeset 是一把双刃剑:它能让你在安装驱动时避免黑屏,但装完驱动后必须移除,否则显卡永远无法输出画面。
  2. SSH 是救命稻草:只要系统能网络启动,你就可以远程诊断,哪怕显示器完全黑屏。
  3. NVIDIA 驱动在 Server 版 Ubuntu 上的显示输出行为与桌面版不同:Server 默认没有图形界面,驱动可能不会主动激活显示输出,需要额外的内核参数或 X11 配置。
  4. 进入 BIOS 与操作系统驱动无关:如果连 POST 画面都看不到,问题出在硬件/固件层面,需要清除 CMOS、更换视频接口或使用集显。

后续更新

如果你遇到类似问题,或者知道如何强制激活 NVIDIA 显卡的显示输出(即使没有检测到显示器),欢迎留言交流。我会在解决后更新这篇博文。


最后:如果你能看到这里,说明你的显示器是亮的,且系统正常——真羡慕你 😄