前提条件:

  • 主板启用了安全启动且显卡内核驱动未签名

  • Linux系统(Debian13)

  • 熟练命令行操作

  • 一颗健康且正常的大脑与一双手和一对眼

步骤1:安装所需工具

sudo apt update
sudo apt install mokutil openssl zstd

步骤2:创建签名密钥

# 创建目录存放密钥
sudo mkdir -p /var/lib/shim-signed/mok/
cd /var/lib/shim-signed/mok/

# 创建密钥对
sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=NVIDIA Driver Signing Key/"

# 设置权限
sudo chmod 600 MOK.priv MOK.der

步骤3:注册密钥到 MOK

sudo mokutil --import MOK.der

这会提示设置一个密码(请记住,重启时需要)

步骤4:在启动时注册密钥

  • 重启后会出现蓝色界面(MOK Management)
  • 选择 "Enroll MOK" → "Continue" → "Yes"
  • 输入之前设置的密码
  • 选择 "Reboot"

步骤5:为 NVIDIA 模块签名

重启后,找到模块位置

modinfo nvidia | grep filename
#通常位置:/lib/modules/$(uname -r)/updates/dkms/nvidia.ko

情况一

模块后戳为.ko

#为模块签名
sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia)
sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_modeset)
sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_drm)
sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_uvm)
sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia-peermem)

情况二

模块后戳为.ko.zst

# 创建临时目录
sudo mkdir -p /tmp/nvidia-modules
cd /tmp/nvidia-modules

# 解压所有 NVIDIA 模块
sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst -o nvidia.ko
sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-modeset.ko.zst -o nvidia-modeset.ko
sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-drm.ko.zst -o nvidia-drm.ko
sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-uvm.ko.zst -o nvidia-uvm.ko
sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-peermem.ko.zst -o nvidia-peermem.ko

# 为解压后的模块签名
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia.ko
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-modeset.ko
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-drm.ko
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-uvm.ko
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der nvidia-peermem.ko

# 重新压缩签名后的模块
sudo zstd -f nvidia.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst
sudo zstd -f nvidia-modeset.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-modeset.ko.zst
sudo zstd -f nvidia-drm.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-drm.ko.zst
sudo zstd -f nvidia-uvm.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-uvm.ko.zst
sudo zstd -f nvidia-peermem.ko -o /lib/modules/$(uname -r)/updates/dkms/nvidia-peermem.ko.zst

# 清理临时文件
sudo rm -rf /tmp/nvidia-modules

步骤6:重启系统

sudo reboot

步骤7:验证

# 重启后检查
sudo modprobe nvidia
nvidia-smi
lsmod | grep nvidia

dkms有默认的密钥,你可以直接注册而不用搞上面那些东西