乐于分享
好东西不私藏

Ubuntu系统Nvidia驱动完整卸载与安装指南:从原理到实践

Ubuntu系统Nvidia驱动完整卸载与安装指南:从原理到实践

1. 项目概述:为什么要在Ubuntu上折腾Nvidia驱动?

如果你在Ubuntu上用过Nvidia显卡,无论是为了跑深度学习、玩Steam游戏,还是仅仅为了获得更好的桌面渲染性能,那么“驱动”这个词很可能给你带来过不少麻烦。Nvidia驱动在Linux上的安装和卸载,从来都不是一个“下一步、下一步、完成”的简单过程。它更像是一场与系统底层、内核模块、图形服务器(X11或Wayland)的精密谈判,稍有不慎,轻则桌面环境崩溃,重则系统直接卡在登录界面甚至黑屏。

我自己就经历过无数次:系统更新后驱动失效, nvidia-smi 命令报错“NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver”;或者为了尝鲜新驱动特性,结果新旧驱动冲突,导致整个图形界面无法启动。网上的教程五花八门,有的让你用 apt ,有的让你用 ppa ,还有的让你去官网下载 .run 文件手动安装,新手看了绝对一头雾水。更棘手的是,如果旧的驱动没卸载干净,残留的配置和内核模块会成为新驱动的“绊脚石”,引发各种难以排查的玄学问题。

所以,一个清晰、完整、可复现的“卸载旧驱动 → 安装新驱动”流程,对于任何一位Ubuntu+Nvidia用户来说,都是必须掌握的生存技能。这不仅仅是安装一个软件,而是涉及系统包管理、内核模块管理、显示服务器配置和启动参数修改的系统级操作。本文将基于我多年在服务器和工作站上反复折腾的经验,为你拆解每一个步骤背后的原理,并提供可直接“抄作业”的命令和避坑指南,目标是让你在任何版本的Ubuntu上,都能安全、干净地完成Nvidia驱动的更替。

2. 核心思路与准备工作:知其然,更要知其所以然

在动手之前,我们必须理解整个操作的核心逻辑。这绝不是简单的一删一装,而是一个环环相扣的系统工程。

2.1 操作的核心逻辑链条

整个流程可以概括为: 信息侦察 → 安全模式切入 → 彻底清理 → 纯净安装 → 验证与配置 

  1. 信息侦察 
    :首先,你需要知道当前系统里有什么(显卡型号、已安装的驱动版本、正在使用的内核版本)。盲目操作是灾难的开始。
  2. 安全模式切入 
    :卸载和安装驱动都可能影响图形界面。最稳妥的方式是进入一个不依赖Nvidia驱动的纯文本环境(如TTY或恢复模式),避免操作过程中因驱动被移除而导致桌面卡死。
  3. 彻底清理 
    :Nvidia驱动由多个部分组成:用户空间的库文件(如CUDA)、内核模块( nvidia.ko )、X11配置文件和DKMS注册信息。必须使用正确的方法将它们全部清除,否则残留文件会像幽灵一样干扰新驱动。
  4. 纯净安装 
    :根据你的需求(是否需要CUDA?是否追求最新版?)选择最合适的安装源(Ubuntu仓库、Nvidia官方PPA或官网.run文件),并进行安装。
  5. 验证与配置 
    :安装后,需要验证驱动是否被内核正确加载,并与显卡通信成功。最后,可能还需要根据你的使用场景(如多显示器、PRIME Offload)进行额外配置。

2.2 关键准备工作清单

在开始任何破坏性操作前,做好备份和记录是专业习惯。

  • 确认显卡型号 
    :打开终端,输入 lspci | grep -i nvidia 。记下输出的型号,例如 GeForce RTX 4090 。这决定了你后续应该安装哪个版本的驱动。
  • 记录当前驱动版本 
    :输入 nvidia-smi 。如果还能运行,顶部会显示驱动版本。如果已经报错,可以尝试 cat /proc/driver/nvidia/version 或 dkms status 
  • 知道你的Ubuntu版本和内核版本 
    : lsb_release -a 查看系统版本(如22.04 LTS), uname -r 查看当前内核版本(如5.15.0-91-generic)。不同内核版本需要对应编译的内核模块。
  • 准备一个稳定的网络环境 
    :安装过程需要下载几百MB的包,网络不稳定会导致安装失败。
  • 重要数据备份 
    :虽然操作不直接涉及用户数据,但任何涉及底层驱动的操作都有极小概率导致系统无法启动。对于重要的工作站或服务器,建议对关键数据进行备份。
  • 准备备用登录方式 
    :确保你记得系统的用户名和密码,并且知道如何在图形界面失效时,通过 Ctrl+Alt+F3 等快捷键切换到文本终端(TTY)进行登录和修复。

注意 :如果你是远程通过SSH连接服务器进行操作,那么你本身就在文本环境中,无需切换TTY。但务必确保你的SSH连接不会因为网络或操作中断而丢失,可以考虑使用 screen 或 tmux 会话保护操作。

3. 彻底卸载现有Nvidia驱动

这是最关键也是最容易出错的一步。不彻底的卸载是后续所有问题的万恶之源。

3.1 进入安全的操作环境

首先,我们需要离开图形桌面环境,进入一个纯净的文本模式。这是因为图形界面(GNOME, KDE等)正依赖着Nvidia驱动在运行,直接在桌面终端里卸载驱动,会导致桌面环境瞬间崩溃,你可能失去所有操作界面。

方法一:使用TTY(推荐)

  1. 在图形界面下,按下 Ctrl + Alt + F3 (F3到F6通常都可以)。屏幕会变黑,然后出现一个纯文本的登录提示。
  2. 输入你的用户名和密码(注意:输入密码时屏幕不会有任何显示,这是正常的)。
  3. 登录成功后,你就进入了一个名为 tty3 的纯文本终端。此时图形桌面运行在 tty2 或 tty1 ,你可以按 Ctrl + Alt + F2 切回去看看,它还在。

方法二:使用恢复模式(更彻底) 如果系统已经因为驱动问题无法进入图形界面,或者你想进行最彻底的清理,可以重启进入恢复模式。

  1. 开机时,在GRUB引导菜单出现时,迅速按下 Esc 或 Shift 键。
  2. 选择 Advanced options for Ubuntu ,然后选择内核版本后面带有 (recovery mode) 的选项。
  3. 在恢复模式菜单中,选择 root (进入root shell)。此时系统以只读方式挂载根文件系统,需要先执行 mount -o remount,rw / 来获得写入权限。

3.2 执行彻底的驱动卸载

在文本终端中,我们将使用一系列命令来清除所有Nvidia相关的痕迹。请严格按照顺序执行。

步骤1:定位并移除所有Nvidia相关软件包 Ubuntu的包管理器 apt 是管理驱动安装的主要工具。我们需要找出所有已安装的、名字中包含 nvidia 的包。

# 首先更新软件包列表,确保信息准确sudo apt update# 查找所有已安装的nvidia相关包,这个命令会列出它们dpkg -l | grep -i nvidia

记下输出的包名,通常包括 nvidia-driver-XXX libnvidia-* nvidia-dkms-XXX nvidia-utils-XXX 等。但不要手动一个个卸载,容易遗漏。

使用 apt autoremove 和 apt purge 进行清理 

# 卸载所有Nvidia驱动包及其依赖。‘*‘是通配符,会匹配所有名字带nvidia的包。# ‘autoremove‘会移除为这些包自动安装但现在不再需要的依赖。sudo apt autoremove --purge ‘nvidia*‘

这条命令是卸载的核心。 --purge 参数非常重要,它不仅删除软件包,还会删除其配置文件。如果没有这个参数,残留的配置文件(如 /etc/X11/xorg.conf )可能会在下次安装时引发冲突。

步骤2:清理潜在的残留文件和目录 即使 apt purge 很强大,一些通过非标准方式(如.run文件安装)留下的文件或目录可能依然存在。手动清理它们是一个好习惯。

# 删除可能存在的Nvidia内核模块目录sudo rm -rf /lib/modules/*/kernel/drivers/nvidia# 删除Nvidia的OpenGL库等文件sudo rm -rf /usr/lib/nvidiasudo rm -rf /usr/lib/x86_64-linux-gnu/nvidia# 删除Nvidia的配置文件目录sudo rm -rf /etc/nvidia# 删除X11配置中可能与Nvidia相关的文件(谨慎操作,最好先备份)sudo rm -f /etc/X11/xorg.conf /etc/X11/xorg.conf.d/*-nvidia.conf

实操心得 :在执行 rm -rf 前,尤其是对 /etc/X11/ 下的文件,可以先使用 ls 命令查看一下是否存在相关文件。或者,更安全的做法是将它们备份到其他地方,例如 sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.backup.nvidia 

步骤3:更新内核模块依赖和启动镜像 卸载驱动后,系统需要重新生成内核模块的依赖关系,并更新启动时加载的内核镜像,以确保旧的Nvidia模块不再被引用。

# 更新initramfs(初始内存文件系统),它包含了启动早期阶段需要的模块sudo update-initramfs -u -k all# 更新GRUB引导配置(虽然不是每次都必须,但可以确保启动参数干净)sudo update-grub
步骤4:禁用Nouveau开源驱动(可选,但推荐) Nouveau是Linux内核自带的Nvidia显卡开源驱动。在安装官方闭源驱动前,通常需要禁用它,因为两者会冲突。卸载官方驱动后,系统可能会自动 fallback 到 Nouveau。如果你确定要安装新版官方驱动,可以先禁用它。
# 创建黑名单配置文件sudo bash -c ‘echo -e “blacklist nouveau\noptions nouveau modeset=0” > /etc/modprobe.d/blacklist-nouveau.conf‘# 再次更新initramfs,使黑名单生效sudo update-initramfs -u

完成后, 重启系统 。你可以使用 sudo reboot 命令。重启后,系统应该会使用一个基本的、通用的帧缓冲驱动(如 vesafb 或 efifb )来显示,分辨率可能较低,但这正是我们想要的“干净状态”。

4. 安装最新的Nvidia驱动

系统重启并进入一个“无Nvidia驱动”的干净状态后,我们就可以开始安装新驱动了。有三种主流方法,各有优劣。

4.1 方法评估:仓库、PPA与.run文件

方法
命令/来源
优点
缺点
适用场景
Ubuntu官方仓库sudo apt install nvidia-driver-XXX
最稳定,与系统集成度最高,自动通过DKMS管理内核模块。
版本通常较旧,不是最新版。
追求绝对稳定,不急需新特性的生产环境或普通桌面用户。
Nvidia官方PPAppa:graphics-drivers/ppa
版本较新,由Ubuntu社区维护,依然通过APT和DKMS管理,相对方便。
仍非最新第一手,更新有延迟(几天到一周)。
需要较新驱动版本,但又希望保持APT管理便利性的用户。
官网.run文件
从Nvidia官网下载
版本绝对最新,可控性强,可定制安装组件。
安装复杂,需要关闭显示服务器,不与系统包管理器集成,升级麻烦。
开发者、研究人员需要第一时间体验最新驱动特性或CUDA版本;或上述方法失败时的备选。

对于绝大多数用户,我 强烈推荐使用Ubuntu仓库或Nvidia PPA ,因为它们通过DKMS(Dynamic Kernel Module Support)自动为你处理内核模块的编译和更新,当系统内核升级时,驱动模块会自动重新编译适配,省心省力。

4.2 实操:通过Nvidia PPA安装最新驱动(推荐流程)

这里以添加Nvidia官方PPA并安装为例,因为它能提供较新且稳定的驱动。

步骤1:添加PPA仓库并更新 首先切回图形界面或TTY(如果你还在TTY,可以按 Ctrl+Alt+F2 尝试回到图形界面,此时应使用基础驱动,桌面应可显示)。打开终端。

# 添加 graphics-drivers PPAsudo add-apt-repository ppa:graphics-drivers/ppa# 更新软件包列表,获取PPA中的驱动信息sudo apt update

步骤2:查找可用的驱动版本

# 这个命令会列出所有可用的、推荐的和专有的Nvidia驱动包ubuntu-drivers devices

输出会类似这样:

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==modalias : pci:v000010DEd00002504sv00001043sd000087ABbc03sc00i00vendor   : NVIDIA Corporationmodel    : GA104 [GeForce RTX 3070 Ti]driver   : nvidia-driver-535 - third-party non-freedriver   : nvidia-driver-525 - third-party non-freedriver   : nvidia-driver-470 - third-party non-free **recommended**driver   : nvidia-driver-545 - third-party non-freedriver   : nvidia-driver-550 - third-party non-freedriver   : xserver-xorg-video-nouveau - distro free builtin

注意看 recommended 标记,它表示Ubuntu系统为此显卡推荐安装的版本。你也可以选择版本号更高的(如550),但新版本可能尚未经过充分测试。

步骤3:安装驱动 假设我们安装推荐的版本(例如470):

sudo apt install nvidia-driver-470

如果你想安装最新版本(例如550):

sudo apt install nvidia-driver-550

安装过程会持续几分钟,它会自动处理内核模块编译(通过DKMS)、用户空间库安装和X11配置。

步骤4:重启系统 安装完成后, 必须重启 以使新驱动的内核模块生效。

sudo reboot

4.3 备选方案:使用官网.run文件安装

当PPA或仓库中的驱动无法满足需求(例如需要特定版本的CUDA,或遇到难以解决的兼容性问题)时,可以考虑此方法。 警告:此方法更复杂,且后续系统内核更新后,可能需要手动重新运行安装程序。

步骤1:下载.run文件

  1. 在另一台机器或手机上,访问Nvidia官网驱动下载页面。
  2. 手动选择你的显卡型号、操作系统(Linux 64-bit)等信息,下载对应的 .run 文件。
  3. 将文件传输到你的Ubuntu机器上(如用U盘或 scp 命令)。

步骤2:进入纯文本模式并关闭显示服务器 .run文件安装需要完全关闭图形界面。

切换到TTY(如tty3)sudo systemctl stop gdm  # 如果你用GNOME/GDM或 sudo systemctl stop sddm  # 如果你用KDE/SDDM或 sudo systemctl stop lightdm  # 如果你用LightDM

步骤3:运行安装程序

# 给文件添加执行权限chmod +x NVIDIA-Linux-x86_64-*.run# 运行安装程序,建议加上参数以禁用Nouveau并安装DKMS支持sudo ./NVIDIA-Linux-x86_64-*.run --dkms -s
  • --dkms 
    : 尝试集成DKMS,这样内核更新后可能(但不保证)自动重新编译模块。
  • -s 
    : 静默安装,跳过交互式提问,使用默认选项。

安装程序会进行编译和安装。完成后,重启图形服务或直接重启系统。

sudo systemctl start gdm  # 启动显示管理器# 或者直接重启sudo reboot

5. 安装后验证与核心配置

重启后进入图形界面,这并不意味着万事大吉。我们需要进行一系列验证,确保驱动已正确加载并运行在最佳状态。

5.1 基础验证三连

打开终端,依次执行以下命令:

  1. 检查驱动内核模块是否加载 

lsmod | grep nvidia
  1. 你应该能看到 nvidia nvidia_uvm nvidia_drm nvidia_modeset 等模块。如果输出为空,说明驱动内核模块没有加载, nvidia-smi 肯定会失败。

  2. 检查驱动版本与显卡状态(黄金命令) 

nvidia-smi
  1. 这是最重要的命令。成功运行后,你会看到一个表格,顶部显示驱动版本和CUDA版本(如果安装了),下方列出显卡的型号、温度、功耗、显存使用率和正在运行的进程。看到这个,基本就成功了90%。

  2. 检查图形接口配置 

nvidia-settings
  1. 这会打开Nvidia的图形化设置面板(如果安装了 nvidia-settings 包)。在这里,你可以配置多显示器、调整色彩、设置PRIME profiles(对于笔记本双显卡)等。能正常打开也是一个好迹象。

5.2 性能模式与持久化设置

对于服务器或需要持续计算的环境,建议启用性能模式和持久化模式。

  • 启用持久化模式 
    :此模式会在驱动加载后,保持NVIDIA内核模块处于初始化状态,避免后续启动GPU应用时的延迟。对于需要快速响应的环境(如AI推理服务器)有益。
sudo nvidia-persistenced --persistence-mode# 可以设置为系统服务开机自启sudo systemctl enable nvidia-persistenced
设置性能模式 :将显卡电源管理模式设置为 最高性能 ,避免自动降频。
sudo nvidia-smi -pm 1  # 启用持久化电源管理sudo nvidia-smi -pl  # 查看可用的电源限制(仅Tesla等专业卡)# 对于消费级显卡,可以通过nvidia-settings在“PowerMizer”设置中调整。

5.3 解决常见冲突:与Secure Boot

如果你在安装过程中看到与“Secure Boot”相关的警告,或者在安装后重启时被要求输入一个“MOK”密码,这是因为Nvidia内核模块没有签名,而Secure Boot要求所有加载的内核模块都必须被签名。

解决方案有两种:

  1. 进入BIOS/UEFI设置,直接关闭Secure Boot 
    。这是最简单彻底的方法,但会降低一点系统安全性。
  2. 为Nvidia模块手动签名 
    。这个过程较复杂,需要生成密钥、签名模块、将密钥注册到UEFI等。除非有强制安全要求,否则一般用户建议选择方案一。

6. 疑难杂症排查实录

即使按照步骤操作,也可能会遇到问题。这里记录几个我踩过的坑和解决方案。

6.1 经典报错: NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

这是最常见的问题,意味着用户空间的 nvidia-smi 工具无法与内核空间的Nvidia驱动模块通信。

排查思路:

  1. 检查内核模块 
    : lsmod | grep nvidia 。没输出?说明模块没加载。可能原因:
    • 驱动未安装成功 
      :重新执行安装步骤,仔细看终端错误信息。
    • 内核版本不匹配 
      :刚升级了系统内核?尝试重启到旧内核,或者为新内核重新安装驱动: sudo apt install --reinstall nvidia-driver-XXX 
    • Secure Boot阻止 
      :禁用Secure Boot或为模块签名。
  2. 检查设备节点 
    : ls -la /dev/nvidia* 。正常情况下应该有 /dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm 等。如果缺少,可以尝试手动创建或重新加载模块:
# 卸载模块sudo rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia# 重新加载模块sudo modprobe nvidiasudo modprobe nvidia_uvm# 检查设备节点是否出现ls -la /dev/nvidia*
  1. 查看内核日志 
    : dmesg | grep -i nvidia 或 journalctl -k | grep -i nvidia 。这里可能会有更详细的错误信息,例如“Failed to load module nvidia”,根据错误信息搜索解决方案。

6.2 图形界面(GDM/SDDM)循环登录或黑屏

表现为输入密码登录后,屏幕一闪又退回登录界面。

原因 :通常是X11或Wayland的配置与Nvidia驱动不兼容,或者驱动本身与当前内核/桌面环境有冲突。

解决步骤:

  1. Ctrl+Alt+F3 
    切换到TTY登录。
  2. 检查 /var/log/Xorg.0.log 或 /home/你的用户名/.local/share/xorg/Xorg.0.log 文件末尾的错误信息。 sudo less /var/log/Xorg.0.log ,然后按 跳到最后。
    一个常见的临时解决方案是使用开源驱动 nouveau 先进入桌面,然后调整配置。可以尝试在TTY下:
# 移除可能出错的X11配置sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.backup# 如果你使用的是GDM,尝试切换Wayland/X11。编辑GDM配置sudo nano /etc/gdm3/custom.conf# 找到 `#WaylandEnable=false` 这一行,去掉注释#,确保它是 `WaylandEnable=false` (强制使用X11)。Nvidia对Wayland的支持在逐步变好,但X11通常更稳定。
  1. 重启显示管理器: sudo systemctl restart gdm3 

6.3 DKMS编译失败

在安装驱动或系统内核更新后,可能会遇到DKMS编译Nvidia模块失败的错误。

排查:

  1. 查看详细错误日志: sudo cat /var/lib/dkms/nvidia/XXX/build/make.log (把XXX换成你的驱动版本号)。
  2. 常见原因是缺少内核头文件。确保安装了与你当前内核版本对应的头文件:
uname -r  # 查看内核版本,例如 5.15.0-91-genericsudo apt install linux-headers-$(uname -r)
安装完整的编译工具链:
sudo apt install build-essential
然后重新尝试DKMS构建和安装:
sudo dkms install -m nvidia -v XXX

6.4 性能低下或风扇狂转

驱动安装成功,但感觉显卡没干活,或者温度很高。

  1. 检查显卡是否在运行 
    : nvidia-smi 看GPU利用率( Volatile GPU-Util )和功耗。如果一直是0%,可能应用并没有使用GPU。
  2. 检查电源模式 
    :运行 nvidia-smi -q | grep “Power Draw” 和 nvidia-smi -q | grep “Performance State” 。如果状态是 P8 (最低功耗),说明显卡处于极度节能状态。可以通过 nvidia-settings 调整电源管理模式为“自适应”或“最高性能”。
  3. 对于笔记本 
    :确保你正在使用Nvidia显卡,而不是集成显卡。很多笔记本使用NVIDIA Optimus技术,需要额外配置(如使用 prime-select 命令选择 nvidia 模式,或者在运行程序时前缀 __NV_PRIME_RENDER_OFFLOAD=1 )。

7. 维护与升级建议

驱动安装不是一劳永逸的。系统更新,尤其是内核更新,可能会带来问题。

  • 定期更新 
    :使用PPA或仓库安装的驱动,可以通过 sudo apt update && sudo apt upgrade 正常更新。更新后如果遇到问题,参考第6节排查。
  • 内核更新后的处理 
    :如果更新了内核,重启后Nvidia驱动应该通过DKMS自动为新内核编译模块。如果没有,可以手动触发: sudo dpkg-reconfigure nvidia-dkms-XXX 或 sudo dkms autoinstall 
  • 降级回滚 
    :如果新驱动有问题,可以降级到旧版本。首先用 apt list --installed | grep nvidia-driver 查看已安装版本,然后用 sudo apt install nvidia-driver-XXX (指定旧版本号)进行安装, apt 会自动处理降级。
  • 保持系统清洁 
    :避免混合使用不同的安装源(如既用PPA又手动安装.run文件)。如果决定换用.run文件,务必先用本文第3节的方法彻底清理之前的驱动。

整个流程走下来,你会发现Linux下管理Nvidia驱动虽然步骤繁多,但每一步都有其道理。核心在于理解“内核模块-用户空间库-显示服务器”这三者之间的关系,以及包管理器(APT)和模块管理器(DKMS)在其中扮演的角色。掌握这套方法后,无论是Ubuntu还是其他衍生发行版,你都能从容应对Nvidia驱动带来的各种挑战。

版权声明:本文内容来自CSDN博客:Sabrina Lee,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/weixin_28725949/article/details/163457572?spm=1001.2660.3001.10198&utm_medium=distribute.pc_feed_vip_blog_category.none-task-blog-classify_tag-7-163457572-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_vip_blog_category.none-task-blog-classify_tag-7-163457572-null-null.nonecase如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。