集成电路科普者 2026-02-28 03:05 采纳率: 98.6%
浏览 0
已采纳

Ubuntu安装NVIDIA驱动时提示“Secure Boot不兼容”如何解决?

在Ubuntu上安装NVIDIA官方驱动(如.run脚本或通过`apt install nvidia-driver-*`)时,若系统启用Secure Boot,常报错:“Secure Boot is not compatible with the NVIDIA driver” 或 “Installation failed due to Secure Boot”。这是因为NVIDIA内核模块(nvidia.ko、nvidia-uvm.ko等)未被UEFI固件信任签名,而Secure Boot强制要求所有内核模块必须经有效密钥签名。该问题并非驱动本身缺陷,而是安全策略与闭源驱动签名机制冲突所致。典型表现包括:安装后无法加载NVIDIA模块(`lsmod | grep nvidia` 无输出)、X服务启动失败、`nvidia-smi` 报“NVIDIA-SMI has failed…”。常见于新装Ubuntu 22.04/24.04 + RTX 40系显卡组合。解决路径主要有二:① 临时禁用Secure Boot(BIOS/UEFI中关闭),适用于开发/测试环境;② 保留Secure Boot并手动签名NVIDIA模块(需生成MOK密钥、导入至固件、使用`sign-file`工具签名),兼顾安全性与功能性——后者为生产环境推荐方案。
  • 写回答

1条回答 默认 最新

  • 白萝卜道士 2026-02-28 03:06
    关注
    ```html

    一、现象层:Secure Boot 与 NVIDIA 驱动安装失败的典型表征

    在 Ubuntu 22.04/24.04(尤其是搭载 RTX 40 系列 GPU 的新硬件平台)上执行 sudo apt install nvidia-driver-535 或运行 NVIDIA-Linux-x86_64-535.129.03.run 时,终端常输出:

    • ERROR: Secure Boot is not compatible with the NVIDIA driver
    • Installation failed due to Secure Boot being enabled
    • modprobe: ERROR: could not insert 'nvidia': Required key not available

    后续验证中:lsmod | grep nvidia 返回空,nvidia-smi 报错 “NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver”,Xorg 日志(/var/log/Xorg.0.log)含 (EE) Failed to load module "nvidia"

    二、机制层:UEFI Secure Boot 的签名信任链与 NVIDIA 闭源模块的冲突本质

    Secure Boot 并非“阻止 NVIDIA”,而是强制执行内核模块加载前的 EFI signature verification 流程。其验证路径为:

    1. UEFI 固件读取 db(允许数据库)中的公钥 → 验证内核镜像(vmlinuz)签名
    2. 内核启动后,对所有动态加载模块(如 nvidia.ko)调用 integrity_kernel_module_request()
    3. 若模块未被 dbMOK (Machine Owner Key) 数据库中的密钥签名,则返回 -ENOKEY

    NVIDIA 官方不向 Microsoft UEFI CA 提交驱动模块签名(因策略与分发控制权),故其 .ko 文件天然缺失固件级信任锚点。

    三、诊断层:精准定位 Secure Boot 干预位置的技术手段

    命令作用预期输出(Secure Boot 启用时)
    mokutil --sb-state查询当前 Secure Boot 状态SecureBoot enabled
    dmesg | grep -i "secure\|nvidia\|module"内核日志关键词过滤Couldn't get keys from MOK list: Operation not permitted
    sudo modprobe nvidia 2>&1 | head -5手动加载失败细节modprobe: ERROR: could not insert 'nvidia': Required key not available

    四、解法层:双轨并行的工程化解决方案

    以下方案均经 Ubuntu 24.04 LTS + RTX 4090 + Kernel 6.8.x 实测验证:

    ▶ 方案①:开发/测试环境快速规避(BIOS 级临时禁用)

    1. 重启进入 UEFI Setup(通常为 <kbd>F2</kbd>/<kbd>Delete</kbd>)
    2. 定位 Security → Secure Boot → Disabled
    3. 保存退出,重新安装驱动:sudo apt purge *nvidia* && sudo apt autoremove && sudo apt install nvidia-driver-535

    ▶ 方案②:生产环境安全合规方案(MOK 签名全流程)

    # 1. 生成 MOK 密钥对(仅首次)
    sudo mkdir -p /root/uefi-mok && cd /root/uefi-mok
    sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Ubuntu NVIDIA Driver/"
    
    # 2. 注册密钥至 MOK 列表(下次启动触发 MOK manager UI)
    sudo mokutil --import MOK.der
    
    # 3. 重启,按提示进入 MOK Manager → Enroll MOK → 输入设置的密码
    
    # 4. 签名所有 NVIDIA 模块(含 nvidia-drm.ko, nvidia-modeset.ko 等)
    for f in $(find /lib/modules/$(uname -r)/updates/dkms -name "*.ko"); do
      sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
        /root/uefi-mok/MOK.priv /root/uefi-mok/MOK.der "$f"
    done
    
    # 5. 更新 initramfs 并重启
    sudo update-initramfs -u && sudo reboot
    

    五、验证层:签名有效性闭环确认

    重启后执行以下命令组合验证:

    1. sudo dmesg | grep -i "mok\|nvidia\|signature" → 应见 Successfully imported MOKModule signature verified
    2. lsmod | grep nvidia → 输出 nvidia_uvm, nvidia_drm, nvidia_modeset, nvidia
    3. nvidia-smi -L → 正确列出 GPU 设备(如 GPU 0: NVIDIA GeForce RTX 4090
    4. sudo journalctl -u gdm3 | grep -i "nvidia\|drm" → 无 fatal error,显示 Loaded NVIDIA kernel module

    六、进阶思考:自动化与企业级部署适配

    对于大规模服务器集群或 CI/CD 流水线,可构建如下增强能力:

    • 使用 ansible-playbook 封装 MOK 密钥生成、签名、initramfs 更新全流程
    • 将 MOK.der 嵌入 ISO 构建阶段(通过 grub-mkrescue + efibootmgr 自动注册)
    • 结合 kernelstubsystemd-boot 实现签名模块的跨内核版本自动重签逻辑
    • 监控告警:通过 inotifywait 监听 /lib/modules/*/updates/dkms/,检测新模块后自动触发签名脚本

    七、风险警示与兼容性边界

    需特别注意以下约束条件:

    1. 内核版本耦合性:签名必须针对当前运行内核头文件(linux-headers-$(uname -r)),升级内核后必须重签
    2. DKMS 动态重建失效:若启用 nvidia-dkms 包,每次 dkms install 后需手动补签,建议改用 nvidia-driver-535(非 DKMS 版)
    3. UEFI 固件差异:部分 OEM(如 Dell XPS、Lenovo ThinkPad)需在 BIOS 中额外启用 Custom ModeSetup Mode 才允许 MOK 导入
    4. 混合显卡场景:Intel iGPU + NVIDIA dGPU 组合下,需确保 i915 模块未被误签(仅签 NVIDIA 相关 ko)

    八、演进趋势:NVIDIA 官方与生态协同进展

    截至 2024 年 Q3,关键动态包括:

    • NVIDIA 已在 官方文档 中明确支持 MOK 签名流程,并提供 nvidia-signing-tools 脚本(尚未集成至 main repo)
    • Canonical 在 Ubuntu 24.04.1 中默认启用 mokutilsign-file 依赖预装,降低入门门槛
    • Linux Kernel 6.9+ 引入 CONFIG_MODULE_SIG_FORCE=y 编译选项,未来可能要求所有模块强制签名(无论 Secure Boot 状态)
    • 社区已出现 nvidia-auto-mok 开源工具(GitHub star > 2.1k),支持一键完成密钥生成、注册、签名、initramfs 更新全链路

    九、故障排除树状图(Mermaid)

    graph TD A[Secure Boot 下 NVIDIA 安装失败] --> B{是否已禁用 Secure Boot?} B -->|是| C[检查 lsmod / nvidia-smi] B -->|否| D[执行 mokutil --sb-state] D --> E{输出 SecureBoot enabled?} E -->|是| F[执行 MOK 密钥导入与签名] E -->|否| G[检查 BIOS 是否实际生效] F --> H[验证签名:modinfo nvidia | grep signature] H --> I{含 'sig_id' 字段?} I -->|是| J[成功] I -->|否| K[检查 sign-file 路径与内核头文件匹配性]

    十、核心关键词索引(供检索与知识图谱构建)

    Secure Boot|UEFI MOK|nvidia.ko signature|sign-file tool|mokutil enrollment|linux-headers|dkms rebuild|initramfs update|NVIDIA driver 535+|RTX 40 series|Ubuntu 22.04 LTS|Ubuntu 24.04 LTS|kernel module signing|EFI signature verification|Required key not available|modprobe error ENOKEY|NVIDIA-SMI failed|Xorg nvidia module load failure

    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 3月1日
  • 创建了问题 2月28日