症状

ubuntu 经常静默升级,这种情况我遇到了好多次了,重启机器后,显示器分辨率变成640*480,超大图标和文字,明显是显卡驱动的问题。

系统自动更新内核后重启,显卡驱动失效:

$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

确认显卡还在、驱动包还在,只是当前内核下没模块:

lspci | grep -i vga          # 确认硬件识别正常
dpkg -l | grep nvidia-driver # 驱动包还在
dkms status                  # 该内核下没编译过模块

原因

Ubuntu 24.04 HWE 内核(linux-image-6.17.0-xx-generic)和 NVIDIA 驱动版本是绑定的:

内核升级时,新内核对应的预编译模块包 linux-modules-nvidia-XXX-open-<内核版本> 还没同步到 apt 源 或装好的驱动版本太老,新内核编译不过 DKMS 结果:当前内核下没模块可加载,驱动等于白装

恢复方法

方案一:重装现有驱动(推荐先试)

让 apt 拉对应新内核的预编译模块包:

sudo apt install --reinstall nvidia-driver-580-open -y
sudo reboot

关键判断:安装日志里如果出现 正在设置 linux-modules-nvidia-XXX-open-<新内核版本> 这一行,就说明官方预编译包到位了,重启即可。如果没出现、转去走 DKMS 现场编译,可能要等几分钟。

方案二:升级到推荐版本

如果方案一重装后 DKMS 编译失败(驱动版本太老),换成 ubuntu-drivers devices 推荐的版本:

ubuntu-drivers devices
# 看 output 里带 "recommended" 那一行,比如 nvidia-driver-595-open

sudo apt remove --purge nvidia-driver-580-open nvidia-kernel-source-580-open
sudo apt autoremove
sudo apt install nvidia-driver-595-open
sudo reboot

方案三:进不了图形界面

驱动挂了有时连带桌面也起不来,开机卡在黑屏或循环登录。两种处理:

临时进 TTY:Ctrl + Alt + F2 切到命令行终端,正常登录跑上面命令 Recovery 模式:开机时长按 Shift 进 GRUB → 选 Advanced options → 选带 (recovery mode) 的旧内核启动(系统里通常保留 1-2 个旧内核,6.17.0-29-generic 这种),进 recovery shell 跑命令

验证

重启后跑:

nvidia-smi 正常输出会显示 GPU 型号、驱动版本、显存、进程列表。看到 Driver Version: 580.159.03(或装的版本号)就说明好了。

预防

  • 装驱动尽量用 open 变体(nvidia-driver-XXX-open),Ubuntu 主推,源里维护及时
  • 不要装图形驱动 PPA(graphics-drivers/ppa),会和系统内核预编译包打架
  • 不要用 NVIDIA 官网 .run 包手动装,会覆盖包管理器、后续升级全要手动
  • 看到内核升级提示时,看一眼 apt 是否提示有 linux-modules-nvidia-XXX-open-<新内核> 待装,没有的话等几个小时再重启

经过几次的折腾,结合AI给出的建议,其中方案一基本上就可以搞定,重启后恢复正常。这里记录下来,方便遇到这种情况的盆友快速排查和解决问题。