Ubuntu Server 24.04 下安装 NVIDIA 驱动与解决 Secure Boot 签名问题

  • 1119 字
  1. 1. 前因
  2. 2. 初见
  3. 3. 打驱动
    1. 3.1. apt get
    2. 3.2. 使用官方 .run 文件安装驱动
      1. 3.2.1. 手动导入秘钥
        1. 3.2.1.1. 找到公钥文件
        2. 3.2.1.2. 导入秘钥(用mokutil)
        3. 3.2.1.3. 重启进行MOK Enrollment

前因

是这样网管会最近整了个20G的魔改3080(还有一张在路上了),然后准备拿来跑点好玩的,于是就要给这玩意儿打个驱动,于是有了一系列破事(不是

在开启 UEFI Secure Boot 的机器上,内核模块签名一定要注意

初见

因为有台机的电源带不动所以就用我的显卡坞测试了一下

跑分还行(毕竟矿卡)而且很惊讶压力测试三分钟温度才八十几通过率百分百

打驱动

apt get

直接 ubuntu-drivers devices

然后选一个装,最后nvidia-smi

可惜

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

包管理进程被意外终止了

于是尝试让系统完成剩余配置:sudo dpkg --configure -a

可是仍然不能解决问题

这个时候主包急了,然后想着用nv自己的.run重新安装一下

使用官方 .run 文件安装驱动

安装过程中会有一些选项,这里跳过,按需求选择就行,但是注意一定要

  • Sign the Kernel Module
  • 在Key Pair Management 要Generate a new key pair
  • Delete Private Key? 环节不要删除私钥
  • Install signed kernel module
  • DKMS Registration选yes让驱动随 Linux 内核更新自动重新编译
  • Update X Configuration(如果没有桌面环境就是no,反之yes)

装完之后,nvidia-smi发现:

1
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

使用 lsmod | grep nvidia 发现没有加载任何模块。因为虽然给驱动签了名,但主板的 UEFI 固件还不信任这个签名

手动导入秘钥

需要手动将安装程序生成的公钥导入到MOK列表中

找到公钥文件

1
ls /usr/share/nvidia/*.der

导入秘钥(用mokutil)

1
sudo mokutil --import /usr/share/nvidia/nvidia-modsign-crt-XXXXXXXX.der

密码设个简单的后面要用

重启进行MOK Enrollment

在BIOS启动画面之后,Ubuntu 加载之前,Shim UEFI key management(是蓝底白字的一个界面)按enter选Enroll MOK -> Continue -> Yes,输入之前的密码然后reboot

这个时候就好了

好耶