目录

  • 前言
  • 前提条件
  • 具体步骤
    • 1.将系统更新到最新并重启Fedora
    • 2.安装Mok工具(mokutil)和密钥生成工具(openssl)
    • 3.生成内核驱动模块的自签安全启动密钥
    • 4.将刚刚自签的安全启动密钥进行注册(导入进主板)
    • 5.重启电脑
    • 6.导入并注册自签密钥
    • 7.启用两个第三方仓库,以便于安装修改过的内核工具进行模块签名
    • 8.修改仓库优先级,让修改过的内核工具优先于官方原版安装
    • 9.安装修改过的内核工具(kmodtool与akmods)
    • 10.移动证书至正确的位置以便于内核工具能识别到
    • 11.安装英伟达驱动
    • 12.编译并签名驱动内核模块
    • 13.更新内核启动镜像
    • 14.重启电脑
    • 15.查看英伟达驱动是否正确加载

前言

目前新出厂的电脑UEFI会默认开启安全启动(Secure Boot),以阻止不受信任的引导加载程序启动,可以在一定程度上防御RootKit病毒,不过同样会阻止一些未经微软签名的Linux发行版的安装和运行,比如Arch Linux。虽然可以直接选择在主板设置中关闭安全启动来解决一系列麻烦,但就在近期微软公布的Windows11最低硬件标准中可以看到,安全启动被微软看的越来越重。所以掌握让自己常用的Linux发行版支持安全启动的方法是有必要的。然而,让Linux本身支持安全启动,最重要的是让发行商对该Linux的内核与引导加载器进行签名。本文就已经通过安全启动认证的比较受欢迎的一个Linux发行版——Fedora,来讲解常见的英伟达驱动签名问题。

至于为什么有这个教程,是因为如果在Fedora上通过自带软件源一键安装官方的英伟达驱动,会造成这些驱动的内核模块未签名,导致在Linux启动过程中因为安全启动校验签名的存在,被阻止加载这些模块,进而无法正常驱动显卡。用过Ubuntu的伙伴们应该知道,在安全启动开启的情况下 ,Ubuntu安装程序会自动用自签密钥签名英伟达驱动内核模块,并在开机过程中自动将该自签密钥导入MOK List(安全启动机器主人信任密钥列表)。而Fedora只会保证自身内核签名有效,对后期安装的第三方内核模块签名问题不予理会,导致无法正常加载英伟达驱动。

本教程参考这里并实现,感谢该博客作者
本教程已在Fedora 36 Beta版本上测试通过,理论上向下兼容,具体是否有效请自测。注意备份重要数据!笔者仅为分享经验,不对您的任何操作造成的任何后果而负责!
最新测试显示,本教程方法仅适用于Fedora 36 Beta及以下版本,Fedora 36正式版不再适用,官方支持通过特定工具一键生成安全启动密钥并导入,具体请参考这里

前提条件

在开始之前,您的电脑必须满足以下条件

  1. 主板必须在已经开启安全启动的情况下安装Fedora
  2. 必须确保任何来源、任何版本的英伟达驱动从未被安装过 (如果已经安装过,请搜索有关彻底卸载的相关教程,或者直接重装系统。因为笔者在试验时发现卸载完后再继续进行以下步骤仍然会导致驱动模块无法被签名)

具体步骤

打开终端,按步骤分别执行以下命令(本教程通用性强,无需考虑命令中的路径与环境变量问题)。

1.将系统更新到最新并重启Fedora

sudo dnf update
sudo reboot

2.安装Mok工具(mokutil)和密钥生成工具(openssl)

sudo dnf install mokutil openssl

3.生成内核驱动模块的自签安全启动密钥

sudo openssl req -new -x509 -newkey rsa:2048 -keyout ~/driver-signing.key -outform DER -out ~/driver-signing.der -nodes -days 36500 -subj "/CN=Private Driver Signing"

4.将刚刚自签的安全启动密钥进行注册(导入进主板)

此操作会让Linux内核信任由该自签密钥签名过的任何内核模块。

sudo mokutil --import ~/driver-signing.der

执行完此命令后,控制台会让您设置一个密码,该密码的作用是用来导入并注册自签自签密钥,只会在第6步用到一次,合理设置即可,建议8位。

5.重启电脑

sudo reboot

6.导入并注册自签密钥

在第5步键入完命令并重启时,系统启动之前会出现一个蓝色界面(标题为MOK Manager)。在安全启动的条件下安装过Ubuntu的您可能会熟悉。按照以下选项导入密钥即可:
注意:以下几个步骤要小心,任何一步误操作,都必须从第4步开始重做。

  1. 通过方向键选择“Enroll MOK”

  2. 选择“Continue”

  3. 选择“Yes”

  4. 此时输入在第4步时设置的密码并回车(输入过程中密码不会显示)

  5. 成功后选择“Reboot”
    此时,电脑会再次重启,等待进入Fedora即可。

7.启用两个第三方仓库,以便于安装修改过的内核工具进行模块签名

(感谢Elia Geretto提供的仓库)

sudo dnf copr enable egeretto/kmodtool-secureboot

sudo dnf copr enable egeretto/akmods-secureboot

8.修改仓库优先级,让修改过的内核工具优先于官方原版安装

以ROOT权限打开文件管理器,修改以下两个文件,每个文件均增加一行:priority=1,然后保存退出。

执行以下命令刷新软件源:

sudo dnf update --refresh

9.安装修改过的内核工具(kmodtool与akmods)

sudo dnf install kmodtool akmods

注意控制台中的此处,查看这两个软件包是否来自于刚刚添加的第三方仓库

输入y同意导入仓库公钥:

10.移动证书至正确的位置以便于内核工具能识别到

依次执行以下命令即可:

sudo mv ~/driver-signing.der /etc/pki/akmods/certs/public_key.der
sudo chown root:akmods /etc/pki/akmods/certs/public_key.der
sudo chmod 640 /etc/pki/akmods/certs/public_key.der
sudo mv ~/driver-signing.key /etc/pki/akmods/private/private_key.priv
sudo chown root:akmods /etc/pki/akmods/private/private_key.priv
sudo chmod 640 /etc/pki/akmods/private/private_key.priv

11.安装英伟达驱动

执行以下命令即可:

sudo dnf install gcc kernel-headers kernel-devel akmod-nvidia xorg-x11-drv-nvidia xorg-x11-drv-nvidia-libs xorg-x11-drv-nvidia-libs.i686

12.编译并签名驱动内核模块

sudo akmods --force

13.更新内核启动镜像

sudo dracut --force

14.重启电脑

sudo reboot

15.查看英伟达驱动是否正确加载

执行以下命令,查看是否有如图所示的类似结果,并查看英伟达控制面板是否正常显示。



教程结束

在Fedora中全自动签名英伟达驱动内核模块以支持安全启动(Secure Boot)相关推荐

  1. centos7 安装英伟达驱动;cuda;docker离线安装;docker gpu离线安装;制作自己的cuda镜像;安装 容器中ssh协议

    原创不易,谢谢! centos7 安装英伟达驱动,cuda,docker安装,docker gpu安装,制作自己的cuda镜像,docker ssh协议 无论是笔记本还是台式电脑,这一步关键 参考资料 ...

  2. Ubuntu18.04 安装NVIDIA英伟达驱动教程

    2022.2.16 佩服网上各种大神的CSDN帖子,写的太过于良心了.坑孩子坑了三个小时左右,都没有装好,真是绝绝子.咋也不知道,咋也不敢说,如果帮到其他网友,请收藏. 因为本人是刚重新装好Linux ...

  3. Ubuntu 16.04 英伟达驱动、常用软件以及虚拟环境的安装

    一.英伟达驱动的安装 Ubuntu 桌面版驱动可这样安装:系统设置--->软件和更新--->附加驱动--->NVIDIA binary driver-version 384.130, ...

  4. 配置YOLOV5 小记(一)从英伟达驱动开始

    YOLO5终于装上了,及时总结(万一哪天要重装) YOLO 配置步骤 英伟达驱动(GPU) Anaconda+ pytorch(GPU/CPU) paddle yolov5 git 这一章就是更行驱动 ...

  5. Ubuntu16.04 安装NVIDIA英伟达驱动教程 及常见几种报错Error的解决方案

    1.安装过程中遇到的一些错误提示与解决方案: 错误1. the distribution-provided pre-install script failed! 这个问题源自nvidia驱动安装包自身 ...

  6. Ubuntu22.04安装详细教程 英伟达驱动安装教程 软件与更新无法打开 Ctrl+Alt+T打不开终端

    提示:文章记录了双系统(Windows+Ubuntu)的安装过程,本人电脑为Dell 文章目录 利用U盘安装Ubuntu22.04 1.插入U盘 2.前往Ubuntu官网下载22.04版本系统 3.下 ...

  7. ubuntu16.04安装英伟达驱动,cuda8.0和cudnn

    禁用nouveal自带驱动(可选,推荐)   控制台输入命令,创建一个文件通过命令 sudo vim /etc/modprobe.d/blacklist-nouveau.conf 并添加如下内容: b ...

  8. win8.1 android驱动安装失败,win8.1系统下英伟达驱动安装失败的解决方法

    当我们在安装完win8.1系统的时候,总是要安装各种各样的驱动,然而有不少win8.1系统用户反映说遇到英伟达驱动安装失败的情况,遇到这样的问题该怎么办呢,现在随小编一起来看看win8.1系统下英伟达 ...

  9. ubuntu20.04独显和集显切换安装英伟达驱动

    先说设备参数:华硕天选2,配备intel集显和3060显卡,ubuntu的内核是5.13. 我装了两天的英伟达驱动没有成功,在淘宝上找了个大哥给我一小时装完了.最重要的是一句选择显卡的代码. 重装系统 ...

最新文章

  1. “北京今年入冬的第一场雪”,纪念博客园写日志一年了
  2. 栈与队列2——两个栈组成队列
  3. 面试官:啥是集群策略啊?
  4. linux crontab 定时任务 计划任务 不执行 原因
  5. 金融产品京东金融2015年战略主攻三大方向:股权众筹、农村金融和校园金融...
  6. 2022-03-17
  7. 相机矫正_实战 | 我用位姿解算实现单目相机测距
  8. 信息系统项目管理师考前冲刺第一天:项目基础知识和立项管理
  9. 前端月趋势榜:9 月最新上榜的、热门的 10 个前端开源项目 - 2109
  10. VTK:绘图之CompareRandomGeneratorsCxx
  11. 数据结构(2) -- 线性表的顺序表示
  12. JavaScript面向对象——深入理解默认的继承方式原型链
  13. c语言 整数除以分数,2019年六年级数学上册 3.1分数除法(第1课时)分数除法的意义和整数除以分数练习题 新人教版 (I).doc...
  14. 北京市常用电话号码表
  15. python 京东 价格监控_双十一购物 || Python监控商品价格 插件监控
  16. Android系统-MTK_android12默认横屏
  17. 4826 Problem A 计算组合数
  18. 你听不出是AI在唱歌!这个日本虚拟歌姬,横扫中英日三种语言
  19. application实现一个简单的网页计数器
  20. 匿名科创地面站v4.08

热门文章

  1. 分众发行,移动电影院的防盗链
  2. Unity AVPro Video 加载视频第一秒图片与例子
  3. 【PAT乙级】狼人杀-简单版(暴力逻辑)
  4. windows 8 应用商店揭秘(推荐)
  5. Atcoder abc 233 题解
  6. androiduboot reset流程
  7. 应用向国产架构体系化迁移的三大难点及解决方案
  8. Error: A cross-origin error was thrown. React doesn’t have access to the actual error object in deve
  9. 记录一次文本挖掘 情感分析的项目过程
  10. xfce4/X11 on Ubuntu18/armhf/ARM/Hisilicon3798