Ubuntu Desktop 部署 NVIDIA 驱动的流程及常见错误处理
该文章根据本人安装ubuntu24.02中nvidia驱动安装遇到的问题以及大模型给出的解决方案整理。
引言
在 Ubuntu Desktop 系统上为 NVIDIA 显卡安装驱动,是许多开发者、数据科学家和游戏玩家的必备操作。然而,由于硬件、系统版本、尤其是安全启动(Secure Boot)机制的复杂性,这个过程常常充满挑战。本指南旨在提供一个从标准到高级的完整安装流程,并深入剖析在此过程中可能遇到的各种疑难杂症及其解决方案。
本指南将覆盖两种主流安装方法:
- 官方仓库
apt安装:推荐新手和追求稳定性的用户使用。 - 官网
.run文件安装:适用于需要最新驱动、或官方仓库不支持新硬件的用户。
我们将以一个典型的排错路径来组织内容:从标准流程开始,逐步深入到因 Secure Boot 等机制引发的复杂问题。
一、通用准备工作(所有方法适用)
在开始任何安装步骤之前,请务-必完成以下准备工作,以确保一个干净的系统环境。
-
更新系统
确保所有系统软件包都处于最新状态。sudo apt update sudo apt upgrade -y -
安装编译依赖
无论使用何种方法,内核模块都可能需要现场编译。DKMS 工具更是保证驱动在内核更新后能自动重新编译的关键。sudo apt install build-essential dkms libelf-dev linux-headers-$(uname -r) -y -
清理旧驱动(非常重要)
为避免版本冲突,彻底清除任何可能已存在的 NVIDIA 驱动。sudo apt purge '*nvidia*' -y sudo apt autoremove -y
二、标准流程:使用 apt 和系统工具(推荐)
这是最简单、最安全的方法,它能与系统集成得最好,并能自动处理 Secure Boot 的签名问题。
1. 安装驱动
Ubuntu 提供了一个便捷的命令来自动安装推荐的驱动程序。
sudo ubuntu-drivers install
或者,您可以先查看推荐版本,再手动安装:
ubuntu-drivers devices
# 假设输出推荐 nvidia-driver-550-open
sudo apt install nvidia-driver-550-open
2. 配置 Secure Boot 签名 (MOK)
在安装过程中,如果您的系统启用了 Secure Boot,终端会弹出一个蓝色的图形界面 Configuring secure boot。
- 第一步: 看到提示后,选择
<Ok>。 - 第二步: 在创建密码的界面,输入一个您能记住的临时密码。这个密码仅用于下一步重启时注册密钥,非常重要。
- 第三步: 等待安装完成。
3. 重启并注册密钥
sudo reboot
重启时,在进入 Ubuntu 之前,系统会进入一个蓝色的 "Perform MOK management" 界面。
- 选择
Enroll MOK。 - 选择
Continue或Yes。 - 输入您在上一步设置的临时密码。
- 选择
Reboot。
4. 验证
登录系统后,打开终端运行:
nvidia-smi
如果成功显示显卡信息,则安装完成。
三、高级流程:使用 NVIDIA 官网 .run 文件
当您的硬件过新(如 RTX 50 系列),或需要特定版本的驱动时,就需要采用此方法。此方法与 apt 安装方式完全不兼容,请勿混合使用!
1. 禁用 Nouveau 开源驱动
.run 安装程序与系统自带的 Nouveau 驱动冲突,必须禁用。
# 创建黑名单文件
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
# 在文件中添加以下内容
blacklist nouveau
options nouveau modeset=0
# 保存退出 (Ctrl+X, Y, Enter) 并更新内核镜像
sudo update-initramfs -u
sudo reboot
重启后,屏幕分辨率变低是正常现象。
2. 在 Secure Boot 环境下的核心步骤:手动签名
如果启用了 Secure Boot,必须手动创建密钥并用其签名内核模块。
步骤 A: 创建并注册 MOK 密钥
此方法利用系统的 MOK 机制,较为通用。
- 生成密钥对:
mkdir ~/nvidia_mok_keys cd ~/nvidia_mok_keys openssl req -new -x509 -newkey rsa:4096 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=My NVIDIA Driver Signer/" - 向系统导入公钥:
根据提示,设置一个一次性的临时密码。sudo mokutil --import ~/nvidia_mok_keys/MOK.der - 重启并在 MOK 管理界面注册:此步骤与
apt方法中的 MOK 注册完全相同。
步骤 B: 安装驱动并签名
- 进入纯命令行模式:这是必须的步骤,因为安装程序不能在图形界面运行时工作。
# 设置默认启动到命令行 sudo systemctl set-default multi-user.target sudo reboot # 登录命令行 - 运行安装程序:使用绝对路径指定密钥来避免解析错误。
cd ~/Downloads # 进入 .run 文件所在目录 chmod +x NVIDIA-Linux-x86_64-*.run # 使用密钥签名并安装 # 使用该命令偶尔会在build阶段直接出错,根据信息查看日志,好像是/var/install/nvidia-install.log,如果出现类似key不存在的错误,移除该命令--dkms及后续的参数,在安装过程中手动填写密钥和公钥的路径。 sudo ./NVIDIA-Linux-x86_64-*.run --dkms --module-signing-secret-key=/home/YOUR_USERNAME/nvidia_mok_keys/MOK.priv --module-signing-public-key=/home/YOUR_USERNAME/nvidia_mok_keys/MOK.der - 遵循向导: 在安装向导中,对 DKMS 选择
Yes,对nvidia-xconfig建议选择No。
步骤 C: 恢复并验证
- 恢复图形界面启动:
sudo systemctl set-default graphical.target sudo reboot - 验证: 登录后运行
nvidia-smi。
四、疑难杂症排查(Troubleshooting)
如果您严格遵循了以上流程但问题依旧,下面是根据错误现象进行排查的指南。
问题一:nvidia-smi 失败,提示"couldn't communicate with the NVIDIA driver"
这是最常见的错误,意味着 NVIDIA 内核模块(nvidia.ko)没有被成功加载。
- 诊断 1:
lsmod | grep nvidia,如果无任何输出,则证实模块未加载。 - 诊断 2:
dmesg | grep -iE "nvidia|secure boot|signature",查看内核日志寻找线索。
问题二:dmesg 提示 "Key was rejected by service"
即使您已经正确注册了 MOK 密钥,也可能遇到此错误。
- 原因分析: 这通常是由于内核进入了比标准
integrity更严格的confidentiality锁定(Lockdown)模式。在此模式下,即使是 MOK 签名的密钥也会被拒绝,以防止对内核的任何修改。 - 解决方案: 强制内核使用
integrity锁定模式。- 编辑 GRUB 配置文件:
sudo nano /etc/default/grub - 找到
GRUB_CMDLINE_LINUX_DEFAULT这一行,在引号内添加lockdown=integrity参数,例如:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash lockdown=integrity" - 更新 GRUB 并重启:
sudo update-grub sudo reboot
- 编辑 GRUB 配置文件:
问题三:禁用 Secure Boot 后无法启动 Ubuntu
在某些主板(特别是华硕等)上,禁用 Secure Boot 会导致系统无法引导。
- 原因分析: 这是由于 BIOS 的一个“智能”设定。当禁用 Secure Boot 时,BIOS 会自动启用 CSM (Compatibility Support Module),即旧版 BIOS 兼容模式。而您的 Ubuntu 是在现代 UEFI 模式下安装的,因此在 Legacy 模式下无法被找到。
- 解决方案:
- 进入 BIOS/UEFI 设置。
- 找到 "CSM (Compatibility Support Module)" 选项,将其强制设置为
Disabled(禁用)。 - 找到 "Secure Boot" 选项,将其设置为
Disabled(禁用)。 - 按
F10保存并退出。这样系统就会在纯 UEFI 模式(但无签名验证)下启动。
问题四:所有方法都失败,依然是 Key was rejected... (终极问题)
这通常发生在对安全有极高要求的现代主板上(如我们遇到的华硕 X870)。固件的 Secure Boot 策略否决了操作系统层级的 MOK 密钥。
- 原因分析: 系统的信任链不允许 MOK 密钥加载第三方模块。我们需要将自己的公钥提升到与 Microsoft、Canonical 同等的地位,直接写入 UEFI 固件的信任数据库 (
db) 中。 - 终极解决方案: 将自定义公钥注入 UEFI
db。- 准备: 一个 FAT32 格式的 U 盘;安装
efitools(sudo apt install efitools)。 - 生成 UEFI 兼容的密钥:
mkdir ~/uefi_keys && cd ~/uefi_keys # 生成私钥和公钥 openssl req -new -x509 -newkey rsa:4096 -nodes \ -keyout NVIDIA.key -out NVIDIA.pem \ -subj "/CN=My Custom NVIDIA Key/" -days 36500 # 转换为 UEFI 签名列表 (ESL) 格式 cert-to-efi-sig-list -g "$(uuidgen)" NVIDIA.pem NVIDIA.esl - 复制到 U 盘: 将
NVIDIA.esl,NVIDIA.key,NVIDIA.pem复制到 U 盘根目录。 - 操作 BIOS:
- 重启进入 BIOS/UEFI 设置。
- 进入 "Secure Boot" 菜单,将模式从
[Standard]切换为[Custom]。 - 请注意,该位置有的主板会包含一个启动类型的配置,包括Windows UEFI启动和其他操作系统UEFI,大模型建议选择其他操作系统,但是本人测试发现如果先安装WINDOWS再安装Linux,该选项会导致无法进入ubuntu的系统。
- 进入 "Key Management" -> "DB Management"。
- 选择 "Append Key from file" 或类似选项。
- 从 U 盘中选择
NVIDIA.esl文件并确认添加。 - 按
F10保存并退出。
- 用新密钥重装驱动: 按照 高级流程 (三) 的步骤进行安装,但在运行
.run文件时,--module-signing-secret-key和--module-signing-public-key参数要指向 U 盘中新的NVIDIA.key和NVIDIA.pem文件。
- 准备: 一个 FAT32 格式的 U 盘;安装
总结
安装 NVIDIA 驱动的旅程可能充满挑战,但每一个错误信息都是通往正确配置的线索。核心要点可以归纳为:
- 优先使用
apt:对于大多数用户和硬件,这是最省心的方法。 - 隔离安装方法:绝对不要混合使用
apt和.run文件安装。 - 理解 Secure Boot:它是大多数问题的根源。问题的层次从操作系统的 MOK 机制,到内核的 Lockdown 策略,再到最终的 UEFI 固件信任数据库。
- 保持环境纯净:在执行关键安装步骤前,务必进入纯命令行模式,并确保系统已被清理干净。

浙公网安备 33010602011771号