张火火和西西弗一起推石头

以执念对抗不完美

fedora43 安装 nvidia 驱动以及开启视频编解码硬件加速

fedora43 安装 nvidia 驱动以及开启视频编解码硬件加速

一、安装方法

参考官网文档 Fedora Wiki Howto/NVIDIA,以及 Fedora WIKI 中关于视频编解码驱动安装 Hardware Video Acceleration.

首先安装 nvidia GPU 驱动以及 GPU 检测工具,再按需安装 cuda 驱动以及视频编解码硬件加速驱动。

二、安装驱动过程

1、开启软件源

首先开启 RPM Fusion nonfree 库和 RPM Fusion nonfree 库。NVIDIA 驱动为非开源驱动,因此需要手动允许使用非开源库(nonfree)。而 RPM Fusion 开源仓库中一般默认开启,包含许多多媒体驱动。

若是显卡作为视频图像输出功能连接到显示器,使用命令:

/sbin/lspci | grep -e VGA 

输出如:

01:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1)

根据输出查看到当前 GPU 的型号,可以根据型号查询最新驱动。

如果是将 nvidia GPU 作为计算卡使用,可以使用以下命令查询:

/sbin/lspci | grep -e 3D

2、检测是否为安全启动(Secure Boot)

通过以下命令检查当前是否为安全启动:

# 检测是否使用UEFI启动,输出若为 UEFI mode 则有可能启用了安全启动
[ -d /sys/firmware/efi ] && echo "UEFI mode" || echo "Legacy BIOS mode"
# 安装依赖
sudo dnf install mokutil
# 进行检测
mokutil --sb-state

若输出为 SecureBoot enabled 则需要进行接下来的签名操作。

3、安装签名

首先进行安装依赖:

sudo dnf install kmodtool akmods mokutil openssl

然后生成密钥:

sudo kmodgenca -a

接下来导入和注册密钥到MOK(Machine Owner Key,机器所有者密钥):

sudo mokutil --
import /etc/pki/akmods/certs/public_key.der

如果要求输入密码,请记住输入的密码

重启系统进入 MOK Management 界面(蓝屏界面)进行注册:

systemctl reboot

进入 MOK Management 界面:

  1. 选择 Enroll MOK
  2. 选择 Continue
  3. 确认注册 选择 Yes
  4. 输入重启前 import 导入密钥步骤时的密码
  5. 系统询问是否重启,选择 reboot

4、安装 GPU 驱动

Fedora 的 RPM Fusion 仓库提供 akmod-nvidia 驱动,akmod 指的是 Automatic Kernel Module,基于 DKMS (Dynamic Kernal Module Support) ,能在系统内核升级时自动触发Nvidia内核模块重新编译,自动保证驱动与内核兼容,免去每次更新内核都要手动编译 nvidia 内核模块的麻烦。另外 akmod-nvidia 自动处理相关依赖,不会与系统配置冲突。

首先更新系统:

sudo dnf update -y 

安装驱动:

sudo dnf install akmod-nvidia

若需要使用 cuda:

sudo dnf install xorg-x11-drv-nvidia-cuda 

注意,需要将驱动标记为用户安装,避免在进行 sudo dnf autoremove 处理依赖时意外删除驱动。

gtx960 在安装上述驱动后能够正常驱动

在安装完成之后运行以下命令检测内核模块是否安装:

modinfo -F version nvidia

若正确安装则能够输出版本号。

如果输出错误信息或者没有输出,需要等待编译,根据官方文档需要等待最长5分钟,等模块编译完成再尝试。

还可以使用以下命令查看是否编译完成:

systemctl list-jobs

如果有 akmod.service 驱动还在编译中,等待任务结束消失驱动才可用。

还可以使用工具 nvidia-smi 进行检测驱动是否正常安装。

三、开启 GPU 硬件加速功能

1、安装 NVENC / NVDEC 驱动

使用以下命令进行安装:

sudo dnf install xorg-x11-drv-nvidia-cuda-libs

2、安装 VDPAU / VAAPI 视频编解码驱动

使用以下命令进行安装:

sudo dnf install nvidia-vaapi-driver libva-utils vdpauinfo

四、处理 nvidia-vaapi-driver 问题

1、问题发现

在安装驱动 nvidia-vaapi-driver 时出现以下问题:

❯ sudo dnf install nvidia-vaapi-driver
仓库更新和加载中:
仓库加载完成。
Failed to resolve the transaction:
No match for argument: nvidia-vaapi-driver
你可以尝试添加到命令行中:
  --skip-unavailable 跳过不可用软件包

2、问题检查

在确认已经开启 RPM Fusion Free 和 Nonfree 仓库的情况下,进行刷新缓存再次安装:

# 更新缓存
sudo dnf makecache
# 再次安装
sudo dnf install nvidia-vaapi-driver

安装完成后,可通过以下命令验证 VA-API 是否工作:

vainfo

发现输出为:

Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri-nonfree/nvidia_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/nvidia_drv_video.so
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

出现错误 vaInitialize failed with error code -1 (unknown libva error) 并且 VA-API 尝试加载多个路径下的 nvidia_drv_video.so 都失败了,说明 nvidia-vaapi-driver 仍然无法安装。

使用以下命令检查 nvidia-vaapi-driver 是否在RPM Fusion Free 和 Nonfree 仓库中提供。

sudo dnf list available |  grep -i vaapi

得到输出:

仓库更新和加载中:
仓库加载完成。
没有匹配的软件包可以列出

发现 RPM Fusion 尚未为 Fedora 43 正式打包 nvidia-vaapi-driver 该包通常滞后于新 Fedora 版本几周甚至几个月。

由此,可以自己先手动编译,等 RPM Fusion 适配打包后再删除自己手动编译的驱动,安装统一打包维护的 nvidia-vaapi-driver 驱动。

3、本地自行编译 nvidia-vaapi-driver 驱动

项目仓库地址:github.com/elFarto/nvidia-vaapi-driver.

首先安装编译依赖:

sudo dnf install git gcc make cmake pkg-config libva-devel vulkan-devel

拉取 nvidia-vaapi-driver 源码并进入对应目录:

git clone https://github.com/elFarto/nvidia-vaapi-driver.git
cd nvidia-vaapi-driver

安装编译所需依赖:

sudo dnf install meson libva-devel gstreamer1-plugins-bad-freeworld nv-codec-headers libdrm-devel

使用 Meson 初始化构建环境:

meson setup build

Meson 自动检测到所有依赖(包括 ffnvcodec, libva, libdrm 等)。

输出信息:

Run-time dependency ffnvcodec found: YES 13.0.19.0
Run-time dependency libva found: YES 1.22.0
...
Build targets in project: 1

说明编译环境就绪。

进行编译安装驱动:

sudo meson install -C build

安装完成后,验证是否正确安装:

ls -a /usr/lib64/dri | grep "nvidia_drv_video.so"

得到输出为:nvidia_drv_video.so 说明驱动成功安装。

验证 vainfo:

vainfo

得到输出:

Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri-nonfree/nvidia_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/nvidia_drv_video.so
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointVLD

说明已经正确调用。

4、使用 MPV 验证视频硬解能力

安装 MPV:

sudo dnf install mpv

使用 MPV 播放一个 H.265 视频:

mpv --hwdec=vaapi --vo=gpu your-video.mkv

观察终端是否输出:

[vo/gpu] Trying to use hardware decoding (vaapi).

同时用另一个终端运行 nvidia-smi,观察 GPU-Util 是否上升。

5、驱动后续更新

当前手动编译的 nvidia-vaapi-driver 的安装位置完全符合 RPM Fusion 的安装路径,所以未来最新打包的 RPM 包来了可以直接覆盖,也没问题。

五、卸载驱动

使用以下命令进行卸载:

sudo dnf remove xorg-x11-drv-nvidia\*

六、参考

  1. Fedora 安装 NVIDIA 驱动的方法 (Fedora 42、43)
  2. Fedora Wiki Howto/NVIDIA
  3. Hardware Video Acceleration

版权声明: 本文为博主「张火火isgudi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://www.cnblogs.com/zbyisgudi/p/19418112

posted @ 2025-12-29 22:02  张火火isgudi  阅读(2)  评论(0)    收藏  举报