在Fedora上安装NVIDIA驱动详细教程及解析

写在前面:在经历了各种尝试和试错之后,发现并总结出了比较合适、安全且合理的NVIDIA驱动安装方案,本教程基于Fedora linux发行版,rhel,RockyOS等基本完全相同,deb系及其它linux发行版大同小异,freebsd也能用,本教程基于NVIDIA官方run包安装方式,尽可能把每一个过程和选择讲述清楚,请大家看完全篇再上手尝试。由于BIOS UEFI Secure Boot的存在使得安装NVIDIA driver并不是像一般的教程直接运行run包或者使用rpmfusion里的[akmod-nvidia] or [xorg-x11-drv-nvidia-cuda]就行。

在linux下安装NVIDIA 驱动方法有多种多样,经过我的测试,还是官方提供的闭源驱动run包是最流畅且占用GPU资源最合理的方法,所以该教程只记录官方run包的安装方式。在一些Arch或Gentoo发行版,通过包管理器安装的NVIDIA闭源驱动有可能导致只有X服务跑在了显卡上,其他应用程序的渲染则仍旧使用CPU硬算或者核显,而.run包的驱动则一直比较稳定,这是推荐给大家的原因。不过也不一定完全是这样,有的时候包管理器安装的也许会有更好的效果,而且包管理器会自动安排新内核的模块编译,不需要手动运行.run包。不论如何,如果你使用的也是rpm类的Linux发行版,可以大胆地使用dnf包管理器安装,注意闭源驱动的位置在rpmfusion-nonfree.repo这个地方。

如果你是个懒人,实在懒得探究run包或者使用run包安装失败了,在文章最后的最后也会给出rpm包的解决方法。

在总结这篇教程之前,我经历过无数次的失败,虽然心里非常想“F**k you ,nvidia”,但是本着独乐乐不如众乐乐的原则,还是把过程分享出来比较合适。

注意:这是本人个人经验的总结,讲述不一定正确,如果出现错字或错误请大家指正。

环境及效果展示:

Fedora37操作系统

NVIDIA driver works successfully. 

NVIDIA settings

现在离我刚写本文章已经过去快一年了,我来说说我的体会吧。在这一年里NVIDIA一直有在修自己的驱动,由于Linux最新内核的API不断地修改,NVIDIA驱动也会跟着更改,相当于NV对linux kernel紧随其后,这种体验和感觉还是非常不错的。在2024年2月中旬,NVIDIA做出了一个违背祖宗的决定:开始大力支持新一代显示服务器Wayland,也就是所谓的550版本的驱动,同时,Fedora项目组也是积极跟进,在rpmfusion-nonfree-rawhide.repo这些最新仓库里已经打包了550版本的驱动,我现在使用了一个多月的NVIDIA闭源驱动+Wayland完全没有问题,建议大家也可以放下成见,积极拥抱新技术。虽然Fedora项目组在积极跟进,但是我当时看Gentoo的仓库里好像没有跟进,不知道现在是什么情况了,大概也有了。当时NVIDIA550属于测试驱动,下载链接藏的很深,哈哈。现在大概是开放出来了变成了正式驱动。

虽然这篇文章也许比较比较详细了,但是也并不能包揽所有的情况,大家想要了解更多细节和配置,还是需要看Arch Wiki或者到NVIDIA搜索相关问题,我作为Fedora用户也经常去蹭隔壁的Arch Wiki看,会有很多收获。

不过我还是得提醒一下:就是在使用.run包安装NVIDIA驱动的时候,它是要编译内核模块的。在大多数GNU/Linux的玩家里多数的内核都是使用官方提供的默认的gcc来编译的,但也有少部分玩家选择了使用了自编译内核,也就是自己去编译Linux Kernel。一旦你编译内核的时候选择了clang这些非gcc的编译器,那么你编译NVIDIA模块的时候也必须选择相同的编译器。


一、搭建环境

由于构建编译NVIDIA官方提供的run包以及需要给NVIDIA driver签名需要一些工具,所以先进行rpm包的安装。安装NVIDIA驱动属于系统级别的改动,所以以下所有的操作都需要在root下进行!

dnf groupinstall "Development Tools"
dnf update
dnf install kernel-headers kernel-devel
dnf install kmodtool akmods mokutil openssl dkms

如果出现找不到任何一个rpm包的情况,请添加清华源、ustc源、阿里源等,这些并不是冷门的包。


二、下载官方run包

首先要明确用的是什么显卡:

1、在neofetch那里就已经显示了当前的显卡(图片在前面)

2、使用lshw -c video查看

3、 使用lspci|grep -i vga查看

4、在系统设置中查看

进入NVIDIA官方页面下载linux版的驱动

官方驱动 | NVIDIA

根据自己的情况选择正确的NVIDIA驱动。注意如果你是笔记本显卡,可能要选notebook版本,操作系统应选择Linux。如果显卡填错了,会给出错误的显卡驱动,会影响显示效果。

其中,下载类型有生产分支和新功能分支,建议两个都试一遍然后选择版本更高的那个,一般高版本更加合适。

 下载之后会取得上图所示的一个run包,这里面装着的就是我们的NVIDIA 驱动了。文件名称中就是版本号(525)了,不同级别的NVIDIA显卡有不同有级别的驱动,不仅仅是linux版的驱动,Windows版本也是同样分级。一般来说NVIDIA公司对Windows版驱动比较上心,所以同样的显卡,以我的1660Ti为例,Windows上官方提供的显卡驱动版本号就高一些。版本号越高,意味着显卡所能实际发挥性能就越强。所以上面强调要选择版本号更高的显卡驱动。

然后把下载下来的run包移动到root目录下。由于NVIDIA对LInux的适配力度并没有像WIndows那么大,所以基本只要下载这一次就好了,它一般不会更新,所以一次性下载好以后就不需要再访问NVDIA官网了,少“F**k you ,nvidia”一次也不错。

接下来我们要来查看自己的电脑BIOS是否开启了安全启动模式,这也是linux安装nvidia驱动里最坑人的地方。

有如下两种方式在linux系统内查看是否开启了安全启动模式。

 

 主板BIOS的安全启动情况,建议要打开它,不然的话安装NVIDIA驱动之后Fedora就不正常了。也就是要保持enable然后进Fedora,如果已经是enable那就不用调节;如果是disable,也要调成enable.

这个安全启动的意义,我会在后记那里说明一下。


三、禁用nouveau开源显卡驱动

在NVIDIA显卡上如果没有安装闭源驱动,那么默认使用的就是nouvea开源驱动。

nouveauicon-default.png?t=N7T8https://nouveau.freedesktop.org/以上为nouveau官网。

nouveau(英语:/nuːˈvoʊ/) 是一个自由开放源代码GPU驱动程序,是为Nvidia的GPU所编写,也可用于属于系统芯片高通系列,此驱动程序是由一群独立的软件工程师所编写,Nvidia的员工也提供了些微的帮助,微软也提供了很大的帮助,谷歌也不甘示弱地提供了尽可能多的帮助。

nouveau只是入门级别的显卡驱动,也就是仅仅在勉强够用的水平,在这种情况下是不能完全发挥nvidia显卡的优势的。

所以我们在安装nvidia驱动之前必须禁用它,不要慌,完全没有nvidia驱动的情况下也是能进图形化界面的,只是拿CPU硬算会比较卡。

vim /etc/modprobe.d/blacklist.conf

blacklist nouveau
options nouveau modeset=0
vim /etc/default/grub

在GRUB_CMDLINE_LINUX那一项里加入一句代码:
rd.driver.blacklist=nouveau nouveau.modeset=0

最终效果:

 在禁用模块和启动引导里同时禁用nouveau驱动。

grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

根据/etc/default/grub的情况重新制作启动引导配置文件,然后重启

lsmod|grep nouveau

重启之后使用以上指令查看nouveau显卡驱动模块是否被加载,最后没有出现任何模块就对了! 

这里必须保证没有任何模块显示出来,如果还有那就是失败了。


四、安装NVIDIA显卡驱动

我们安装的步骤从现在开始。

systemctl isolate multi-user.target

输入以上指令后会进入多用户界面,就是纯命令行界面。首先输入用户名,这里我们用root,然后输入密码,就以root的身份登录了。

chmod +x NVIDIA-Linux-x86_64-525.85.05.run
./NVIDIA-Linux-x86_64-525.85.05.run

给安装包执行权限然后执行,run包最前面是shell脚本所以直接运行就好了。我把run包的执行过程拆解一下方便大家理解。

1、运行后在命令行界面会出现.....的进度条

Uncompress NVIDIA driver 这是在解包,后面我会讲一讲解包出来的东西是什么。

2、进度条读完之后会进入NVIDIA驱动的安装界面,以蓝色调为主,看起来比较安心。

Building kernel modules 此时在构建编译NVIDIA驱动linux内核模块,所以需要“Development Tools”组提供gcc等编译器。编译完成后Continue。

3、提示是否要给编译好的NVIDIA 模块签名

由于签名几步比较关键,为了读者的用户体验,我把这段提示手打出来了。

The target kernel has CONFIG_MODULE_SIG set which means that it supports cryptographic signatures on kernel modules.On some systems,the kernel may refuse to load modules without a valid signature from a trusted key.This system also has UEFI Boot enabled; many distributions enforce module signature verification on UEFI systems when Secure Boot is enabled. Would you like to sign the NVIDIA kernel module?

select:

        Sign the kernel module     or     Install without signing

目标内核设置了CONFIG_MODULE_SIG,这意味着它支持内核模块上的加密签名。在某些系统上,内核可能拒绝加载没有来自可信密钥的有效签名的模块。此系统还启用了UEFI引导;当启用安全引导时,许多发行版在UEFI系统上强制执行模块签名验证。是否要签署NVIDIA内核模块?

我们知道,linux是典型的模块化的宏内核操作系统,在加载安装nvidia内核模块的时候由于Uefi Secure Boot的阻拦,我们必须给该模块签名,如果不签名则无法加载。

所以我们这里选择“Sign the kernel module”,给我们的NVIDIA内核模块签名以免被安全启动阻拦。

4、生成签名密钥

Would tou like to sign the NVIDIA kernel module with an existing key pair,or would you like to generate a new one?

select:

        Use an existing key pair     or     Generate a new key pair

首次安装时务必选择“Genrate a new key pair”,它会自动生成NVIDIA模块的签名密钥,我们将来要把它交给UEFI Secure Boot审核。非首次安装的时候,也就是密钥文件以及存在的情况下,可以选择“Use an existing key pair ”,选择这个选项,它会提示你输入密钥文件存储的位置。

那么实际上我们这里的  /usr/share/nvidia/nvidia-modsign*.der  就是它索要的密钥文件,首次安装的时候没有这个文件,首次安装后选择generate才生成的这个文件。

5、删除私有的签名密钥

The NVIDIA kernel module was successfully signed with a newly generated key pair .Would you like to delete the private signing key?

select:

        Yes     or     No

如果你频繁更新内核,那么可以选择保留私有密钥,在你下一次安装NVIDIA驱动的时候可以选择“Use an existing key pair”,也就是第四步的时候,如果你选择了这个选项,实际上它会让你输入密钥的位置。这么做其实是比较麻烦的,在这个蓝色界面还不能使用Tab查看目录里的文件,如果没有把位置背下来,那就只能用Ctrl+Alt+Fn切换到另一个tty去查看,因此我不建议选择保留。直接选择Yes就好,下一次我们重新生成一个密钥,然后再签名会方便很多。

做出选择之后

An X.509 certificate containing the public signing key will be installed to /usr/share/nvidia/nvidia*.der . ..................此处省略一万字.......................

This certificate must be added to a key database which is trusted by your kernel in order for the kernel to be able to verify the module signature.

select:

        OK

必须将此证书添加到内核信任的密钥数据库中,以便内核能够验证模块签名

根据以上提示,虽然我们一厢情愿地想安装NVIDIA驱动.但是Linux kernel和UEFI Secure Boot并不领情,不相信我们的NVIDIA kernel modules sign.没有关系,这个我们选择第一项“Install signed kernel module”就好了,具体操作我后面会讲。

这里问我们是否要安装NVIDIA 32位兼容库,我们选择Yes就好。 

6、选择是否注册DKMS

 dkms我们最前面已经安装过了。

DKMs以文件的形式存储并能在系统运行过程中动态地加载和卸载。DKMs由一个用户层的DKM服务器来管理,并非由内核来管理。当核心需要某模块时,由DKM服务器负责把相应的DKM加载;当核心的内存资源紧缺时,由DKM服务器负责卸载一个没有被使用的DKM。

dkms这个工具的作用就是动态加载内核模块,在NVIDIA的提示下,它的大致作用是在你安装新的linux kernel的时候dkms会自动帮你编译安装nvidia驱动模块到你的新内核。这里可以选择Yes或者No,本人测试更新内核的时候,在新内核里并没有自动加上nvidia驱动。这里讲一下选择Yes的情况,选择No的话就直接进入下一步了。

 选择Yes后会提示错误,不要慌,虽然它是ERROR,但它并不会影响你安装NVIDIA驱动。我这里建议你把这个提示错误的界面给拍下来,等到后面我们还有用的。

 直接OK就好了,没有大碍。

7、修改X的配置文件

 选择Yes即可,让NVIDIA驱动帮你自动修改X和grub2的配置文件,就不要自己去改了。

接下来就已经退出NVIDIA驱动的安装界面了,会重新回到命令行界面,如果以上步骤和我讲述的不一样直接提示错误导致退出,可以重新运行NVIDIA驱动安装包,多次尝试。

8、安装NVIDIA驱动之后操作

这里千万不要直接重启,我们还有一些善后事宜要做的。

akmods --force #确保内核模块已编译
dracut --force #确保引导映像已更新
mokutil --import /usr/share/nvidia/nvidia*.der #手动签名NVIDIA驱动
它会提示要你输入一串密码,然后again,这里要记住你输入的密码,一会儿要用到它



grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

特别是第三步,非常重要,因为前面提示签名错误,我们这里可以手动签名,所以前面提示错误也无妨。注意:如果你没有打开安全启动,那么就不需要签名这个步骤,NVIDIA驱动也大概不会给你这个.der文件,所以直接跳过mokutil就好了。

输入的那串密码一定要记住,很快就要用到了。


五、重启并验证NVIDIA驱动

 重启之后会出现如下界面,不要慌,根据它的提示按下任意键即可。不要一直停留,不然界面消失的话,我们得在linux中重复 mokutil --import /usr/share/nvidia/nvidia*.der 这个步骤然后重启。

选择“Enroll MOK”

 

选择Yes

 这里要写上刚才记录的密码。

reboot重启

重启之后就回到了熟悉的grub2的启动引导界面,然后进入Fedora,就有NVIDIA驱动了。

 

在terminal输入nvidia然后两个Tab就能显示NVIDIA提供的命令了。

nvidia-smi是官方提供用来监控nvidia显卡情况的工具;nvidia-settings用来设置显卡;nvidia-uninstall用来卸载显卡驱动。

然后就可以开始愉快地玩耍啦。

可以看到,从开源的nouveau驱动切换到了官方闭源的nvidia驱动,显示效果会好很多很多。

那么既然来到了这里,顺便了解一下这几个模块分别有什么作用吧。

模块名作用
nvidia这是NVIDIA最主要的驱动程序,负责管理和控制NV显卡的硬件功能
nvidia_uvm UnifiedVirtual Memory内核模块,使CPU和GPU之间数据传输更加高效
nvidia_modesetDRM内核模块,负责处理图形卡的直接渲染
i2c_nvidia_gpuI2C(集成电路总线)驱动,是一种用于连接微电子设备的开放标准接口
nvidia_drm提供对DRM设备的支持
video视频驱动的通用模块,被nvidia_modeset使用,故出现在这里


六、后记

前面还挖了几个坑,我们来填一下。

首先是dkms报错的问题,我前面说如果报错的话可以把报错信息给拍下来,这里说一下这个东西怎么用。

 以上是报错信息,上面给出了执行的代码和错误建议。我们安装好NVIDIA驱动之后可以根据建议再次执行这行代码。

/usr/sbin/dkms install -m nvidia -v 525.85.05 --force

这里我稍加修改,大家可以根据自己的报错信息去执行提示的代码。 

可以看到注册成功了,确实出现了extra目录。

  大家注意一下,本人亲测,2023年 8月之后的NV驱动修复了这个bug,dkms应该是可以成功自动设置的,不过失败了也不用慌,照着上面做就好了。

大家注册dkms后可以观察一下,更新linux kernel的时候是否会自动编译安装nvidia闭源驱动的模块,如果没有自动安装也不要急。我们不需要卸载再安装nvidia驱动,只需要按照步骤再来一遍就好了,从运行run包开始。如果有水平高的小伙伴可以写一个自动编译安装nvidia驱动模块的脚本。

在注册dkms成功后更新linux kernel的时候会自动编译安装NVIDIA驱动模块,如图所示:

 此时,我正在升级内核,在安装的过程中就出现了dkms的自动操作。

当然,这还没完,dkms自动生成的NVIDIA驱动模块的签名并没有被UEFI Secure Boot认可,所以我们还是要手动引入这个签名。带图片中就有签名的位置。

mokutil --import /var/lib/dkms/mok.pub

引入后重启即可。


我们再来看看NVIDIA官方提供的run包解包出来的是什么。

实际上,-x选项可以把run包给解出来 。里面是一堆动态链接库,压缩包和可执行文件,这些就是run包的本来面目,以及安装NVIDIA闭源驱动后产生的那些以nvidia开头的命令皆来自这里。

2.1.2  Linux/FreeBSD Exception.  Notwithstanding the foregoing terms
of Section 2.1.1, SOFTWARE designed exclusively for use on the Linux or
FreeBSD operating systems, or other operating systems derived from the
source code to these operating systems, may be copied and redistributed,
provided that the binary files thereof are not modified in any way
(except for unzipping of compressed files).

2.1.3  Limitations.

No Reverse Engineering.  Customer may not reverse engineer,
decompile, or disassemble the SOFTWARE, nor attempt in any other
manner to obtain the source code.

No Separation of Components.  The SOFTWARE is licensed as a
single product.  Its component parts may not be separated for use
on more than one computer, nor otherwise used separately from the
other parts.

2.1.2 Linux/FreeBSD异常。尽管有上述条款

第2.1.1节,专为Linux或

FreeBSD操作系统,或衍生自

这些操作系统的源代码可以被复制和重新分发,

前提是其二进制文件未以任何方式修改

(压缩文件解压缩除外)。

2.1.3限制。

无逆向工程。客户不得逆向工程,

反编译或反汇编软件,也不尝试任何其他

获取源代码的方式。

无部件分离。本软件作为

单一产品。其组成部分不得分开使用

在多台计算机上,也不能与

其他部分。

温馨提示:这是NVIDIA闭源驱动,里面的LICENSE也不是开源的,所以这里面的东西看可以,但不要拿去搞逆向和反编译,也不能擅自修改二进制文件,只能在官方的基础上加上自己脚本什么的方便安装或者自动安装。切记不要搞逆向,否则会涉及侵权!

NVIDIA run包的命令参数如下:

参数作用
--info打印驱动程序信息
--check检查存档完整性
-x解包
-A打印常用命令行选项和高级选项的使用信息
--no-rpms取消与rpm包冲突的检查
--no-opengl-files不安装openGL相关的文件
--no-wine-files不安装wine驱动相关的文件
--dkms使用dkms
--no-dkms取消dkms
--no-check-for-alternate-installs跳过对备用驱动的检查
--no-unified-memory不需要CUDA
--skip-depmod驱动安装后不自动运行depmod
--no-systemd禁用systemd单元的安装
--no-nouveau-check不检查nouveau模块是否被加载
--disable-nouveau不禁用nouveau
--kernel-modules-only仅安装内核模块,不要卸载现有驱动程序
--silent静默模式,不询问
--sanity对现有NVIDIA驱动程序安装执行基本的健全性测试
--expert / -e专家模式

--no-questions / -q

不要问任何问题;对于所有是/否问题,都假定默认值(通常为“是”),并且在提示用户输入字符串的任何情况下都假定默认字符串

最后说明一下如果安装NVIDIA闭源驱动失败如何退回nouveau.

su -
nvidia-uninstall
rm -rf /etc/modprobe.d/blacklist.conf
vim /etc/default/grub
把之前添加的和NVIDIA添加的代码删除

grub2-mkcofig -o /boot/grub2/grub.cfg
reboot

lsmod|grep nouveau

那么如何判断显卡驱动安装失败?

我给出一下几种情况,如果符合你的实际情况,那么就可以认为你安装失败了。当然必须在确保你的每一步都没有错误的情况下。

1、重启后,在Fedora启动界面出现:
Fedora 37 NVIDIA kernel module missing. Falling back to nouveau

这句话的时候,这意味着NVIDIA驱动安装失败了,可以尝试重装或者回退到nouveau.

2、启动成功,但是进去之后进入了纯命令行界面,没有进桌面。

以root身份登录然后执行以下代码

systemctl isolate graphical.target

#如果图形界面启动失败就在命令行下运行一下命令
startx

#如果你用的是wayland,也可以
startplasma

如果报错了,那么就卸载nvidia闭源驱动再次进入Fedora,NVIDIA闭源驱动的卸载器(nvidia-uninstall)会自动帮你把配置文件改回去,不用自己去改。

卸载显卡时可能会出现的问题

这里的卸载显卡可能是由于显卡驱动安装失败、也有可能是NVIDIA官网更新了显卡驱动,而你也想要更新它,那么你就需要重装这个驱动。

重装NVIDIA驱动其实就是卸载驱动然后再安装的过程。安装的过程已经写得很详细了,那么卸载过程中也是可能会出现一些不可避免的问题。

问题描述:使用nvidia-uninstall 后没有把模块完全删除,问题描述如下。

ERROR: An NVIDIA kernel module 'nvidia-drm' appears to alreadybe loaded in your kernel. This may be become it is in use (for example by an X server , CUDA program ,or the NVIDIA persistence Daemon),but this may also happen if your kernel was configured without support for module unloading. Please be sure to exitany program that may be using  the GPU(s) before attempting to upgrade your driver  ............

这段话很长,大致意思就是虽然你的NVIDIA驱动已经卸载了,但是还有模块由于X server的存在还在运行,你没有办法在X还在运行的情况下而卸载这个模块。

问题很清晰,在系统启动的时候默认进入的是图形化界面,所以X是没办法而开启的。

先登陆你的桌面,然后打开终端。

systemctl isolate multi-user.target

#进入命令行界面后登陆
sudo rmmod nvidia_drm nvidia nvidia_modeset

#你写上rmmod nvidia然后按两个Tab就能显示出当前装载的模块了

卸载了这几个模块然后你就能安装了,注意不要重启,直接运行.run即可。

在卸载旧驱动并安装新驱动之后,还有一件很重要的事情就是把dkms自动管理驱动模块的就驱动给删除,大家千万不能忘记。

sudo rm -rf /var/lib/dkms/nvidia/<驱动的版本号>

显卡驱动与虚拟化

很多带虚拟化程序在nouveau和nvidia驱动下工作方式和策略是不一样的。

比如flatpak ,安装NVIDIA 525驱动之后,它也要跟着安装这个环境(org.freedesktop.Platform.GL.nvidia-525-85-05),不然就不能正常工作了。

那么我们只需要修复后更新即可,它会自动为你寻找适合你显卡的包.

flatpak repair
flatpak update

NVIDIA 容器工具包允许用户构建和运行 GPU 加速的 Docker 容器。该工具包包括一个容器运行时和实用程序,可自动配置容器以利用 NVIDIA GPU。

产品文档包括体系结构概述、平台支持、安装和使用指南,可在文档库中找到。

常见问题解答可在wiki上找到。

再比如使用docker运行GUI程序也可能报错 ,需要NVIDIA和docker配合的引擎。

GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUsBuild and run Docker containers leveraging NVIDIA GPUs - GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUsicon-default.png?t=N7T8https://github.com/NVIDIA/nvidia-docker


安全启动的意义

可能有很多小伙伴们会认为:这个UEFI Secure Boot真是太麻烦了,本来安装个显卡驱动只是点击下鼠标、写几个命令就好的事情居然被搞得这么麻烦。

那么其实这个安全启动是很有意义和必要的。

https://uefi.org/sites/default/files/resources/Improving%20Platform%20Security%20with%20UEFI%20Secure%20Boot%20and%20UEFI%20Variables_20160318.pdficon-default.png?t=N7T8https://uefi.org/sites/default/files/resources/Improving%20Platform%20Security%20with%20UEFI%20Secure%20Boot%20and%20UEFI%20Variables_20160318.pdf

趣话安全启动:迷思与启示 - 知乎最近终于沉下心读完了当年明月大作《明朝那些事》。说实话,当朋友推荐这本书时,我的内心是拒绝的,多么低俗的笔名和书名!看过黄仁宇先生《万历十五年》等书和钱穆先生的大作的我,怎么也要读某些古籍书才更加合…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/30136593

SecureBoot - Debian Wikiicon-default.png?t=N7T8https://wiki.debian.org/SecureBootUEFI Secure Boot - Understanding the UEFI Secure Boot Chainicon-default.png?t=N7T8https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/secure_boot_chain_in_uefi/uefi_secure_boot我这里放几个链接,其中有官方的解释,也有民间大神的说法。

那么,对操作系统有所了解的同学应该很清楚一点,操作系统对于驱动程序级别的病毒是很难管控的,上层应用程序级别的杀毒软件对驱动层的病毒更是什么没有办法。所以为了操作系统安全,在加载驱动模块的时候要加一把锁,也就是说只有通过签名(被UEFI和kernel认可)的模块才能被成功加载,那些没有被认可的,一律不加载,万一它是一个带病毒的驱动呢?万一是被用心不良的人放进来的呢?这都不好说,所以要加上这么一把锁。对于台式机来说也许你可以不要安全启动,因为台式机的位置一般是在家里或者是网吧,而且体积笨重,不太可能被偷;但是如果你用的是笔记本,那么其实是有概率丢失的,并且由于笔记本电脑的可移动性,在不同地点办公会连上不同的WIFI,那么就有可能遇到钓鱼的网络,可以攻击你的UEFI固件,如果没有安全启动,那么你的数据真的是有点危险的。大家按照自己的实际情况去考虑是否要开启这个安全启动。


下面是nvidia driver rpm package的解决方法。

我用过rpm包和run包的驱动,发现rpm包虽然安装更加方便,但是显示效果有时候可能会不如nouveau,这里可能是版本或者显卡的原因,并且使用rpm的驱动会导致GPU占用过高,当然闭源驱动提供的那几个命令还是正常使用的。

以下是完整的解决方案:

dnf groupinstall "Development Tools"
dnf update
dnf install kernel-headers kernel-devel
dnf install kmodtool akmods mokutil openssl dkms

dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

dnf -y install kmod-nvidia
dnf install xorg-x11-drv-nvidia-cuda akmod-nvidia xorg-x11-drv-nvidia-libs

kmodgenca -a #生成签名密钥

mokutil --import /etc/pki/akmods/certs/public_key.der
#同样地,输入一串密码并记住

akmods --force 
dracut --force

grub2-mkconfig -o /boot/grub2/grub.cfg

reboot


重启后进入那个蓝色界面,那串密码也要输入进去,然后就能进入系统了,NVIDIA driver module也能通过UEFI Secure Boot的审核。

如果rpmfusion访问有困难的话请参考以下连接:

RPM Fusion 源使用帮助 — USTC Mirror Help 文档

rpmfusion | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

rpmfusion镜像_rpmfusion下载地址_rpmfusion安装教程-阿里巴巴开源镜像站

使用rpm包的方式会自动匹配显卡驱动的版本号,就不需要自己去搜索和指定了。

如果想卸载通过rpm包的方式安装的NVIDIA驱动也很方便。

dnf history 
#找到安装的那几条命令

dnf history undo num
#撤销这几步

num是一个数字,是命令前面的标号。

或者也可以直接卸载。

dnf remove $(rpm -qa|grep nvidia)
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

April__Zhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值