Fedora 43 安装 NVIDIA 驱动与 nvidia-smi 问题解决教程

0 阅读6分钟

1. 适用环境

本文适用于以下场景:

  • Fedora 43
  • NVIDIA RTX 30 / RTX 40 系列显卡
  • 需要使用 nvidia-smi
  • 需要安装 NVIDIA 官方驱动
  • 笔记本双显卡环境:Intel 核显 + NVIDIA 独显
  • 安装驱动后遇到 nvidia-smi 报错、Nouveau 冲突、外接显示器不显示等问题

最终成功状态示例:

NVIDIA-SMI 595.71.05
Driver Version: 595.71.05
CUDA Version: 13.2
GPU: NVIDIA GeForce RTX 4060
显存: 8188MiB

2. 安装前准备

2.1 查看 Fedora 版本

cat /etc/fedora-release

如果显示:

Fedora release 43

后面的 NVIDIA 仓库地址使用 fedora43


2.2 安装当前内核对应的开发包

NVIDIA 驱动需要和当前运行的内核匹配,所以先安装:

sudo dnf install kernel-devel-matched kernel-headers

检查当前内核版本:

uname -r

检查是否安装了对应的内核开发包:

rpm -qa | grep kernel-devel

正常情况下,当前内核版本和 kernel-devel 版本应该一致。

示例:

7.0.4-100.fc43.x86_64
kernel-devel-7.0.4-100.fc43.x86_64
kernel-devel-matched-7.0.4-100.fc43.x86_64

3. 添加 NVIDIA 官方仓库

Fedora 43 x86_64 执行:

sudo dnf config-manager addrepo --from-repofile=https://developer.download.nvidia.com/compute/cuda/repos/fedora43/x86_64/cuda-fedora43.repo

清理 DNF 缓存:

sudo dnf clean expire-cache

4. 安装 NVIDIA 驱动

4.1 推荐安装开放内核模块

RTX 30 / RTX 40 系列显卡推荐使用:

sudo dnf install nvidia-open

4.2 安装 nvidia-smi 相关组件

如果需要使用 nvidia-smi,可以安装:

sudo dnf install nvidia-driver-cuda

安装后重启系统:

sudo reboot

5. 禁用 Nouveau 驱动

Fedora 默认可能会加载 Nouveau 开源驱动。Nouveau 和 NVIDIA 官方驱动同时存在时,可能导致 NVIDIA 驱动无法正常工作。

检查 Nouveau 是否正在运行:

lsmod | grep nouveau

如果看到类似输出:

nouveau 4001792 15

说明 Nouveau 正在运行,需要禁用。


5.1 创建 Nouveau 黑名单配置

sudo nano /etc/modprobe.d/blacklist-nouveau.conf

写入:

blacklist nouveau
options nouveau modeset=0

保存退出。


5.2 重新生成 initramfs

sudo dracut --force

5.3 重启系统

sudo reboot

5.4 检查 Nouveau 是否禁用成功

lsmod | grep nouveau

如果没有任何输出,说明 Nouveau 已经没有加载。


6. 检查 Secure Boot

Secure Boot 开启时,NVIDIA 内核模块可能无法正常加载。

检查命令:

mokutil --sb-state

如果显示:

SecureBoot enabled

建议进入 BIOS 关闭 Secure Boot。

如果显示:

SecureBoot disabled

说明 Secure Boot 已关闭。


7. 验证 NVIDIA 驱动

执行:

nvidia-smi

如果正常,会显示:

NVIDIA-SMI
Driver Version
CUDA Version
GPU Name
显存使用情况

如果显示了显卡信息,说明 NVIDIA 驱动安装成功。


8. 常见问题与解决方法

问题一:nvidia-smi 无法和驱动通信

错误信息:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
Make sure that the latest NVIDIA driver is installed and running.

常见原因:

  1. NVIDIA 内核模块没有加载
  2. Nouveau 仍然占用显卡
  3. Secure Boot 拦截 NVIDIA 模块
  4. 当前内核和 kernel-devel 不匹配
  5. /dev/nvidia* 设备节点没有正确创建

排查命令:

mokutil --sb-state
lsmod | grep nouveau
lsmod | grep nvidia
modinfo nvidia
uname -r
rpm -qa | grep -i nvidia
rpm -qa | grep kernel-devel

问题二:NVIDIA 模块已加载,但 nvidia-smi 仍然失败

如果执行:

lsmod | grep nvidia

能看到:

nvidia_uvm
nvidia_drm
nvidia_modeset
nvidia

说明 NVIDIA 内核模块已经加载。

但如果 nvidia-smi 仍然失败,可以执行:

sudo nvidia-modprobe

然后再次执行:

nvidia-smi

如果成功,说明问题大概率是:

NVIDIA 设备节点没有自动创建

可以检查设备节点:

ls -l /dev/nvidia*

正常应该看到:

/dev/nvidia0
/dev/nvidiactl
/dev/nvidia-uvm

如果没有,可以执行:

sudo nvidia-modprobe -u -c=0

然后再测试:

nvidia-smi

问题三:重启后仍然需要手动执行 nvidia-modprobe

如果每次重启后都需要手动执行:

sudo nvidia-modprobe

建议启用 NVIDIA 持久化服务:

sudo systemctl enable --now nvidia-persistenced

查看服务状态:

systemctl status nvidia-persistenced

然后重启测试:

sudo reboot

重启后执行:

nvidia-smi

问题四:命令输错为 udo

错误命令:

udo nvidia-modprobe

会报错:

bash: udo: command not found

正确命令是:

sudo nvidia-modprobe

问题五:nvidia-smi 正常,但外接显示器不显示

nvidia-smi 正常只能说明 NVIDIA 驱动可以被系统识别,不代表外接显示器一定正常。

笔记本常见结构:

内屏:Intel 核显
HDMI / DP 外接屏:NVIDIA 独显

所以外接屏不亮通常是显示输出链路没有配置好。


5.1 开启 NVIDIA DRM modeset

创建配置文件:

sudo nano /etc/modprobe.d/nvidia.conf

写入:

options nvidia_drm modeset=1
options nvidia NVreg_PreserveVideoMemoryAllocations=1

重新生成 initramfs:

sudo dracut --force

重启:

sudo reboot

检查是否开启成功:

cat /sys/module/nvidia_drm/parameters/modeset

如果输出:

Y

说明开启成功。


5.2 查看显示提供者

xrandr --listproviders

如果看到类似:

Provider 0: modesetting
Provider 1: NVIDIA-G0

可以尝试:

xrandr --setprovideroutputsource NVIDIA-G0 modesetting
xrandr --auto

5.3 切换到 X11 会话

Fedora 默认可能使用 Wayland。NVIDIA 外接屏异常时,可以尝试 X11。

GNOME 登录界面:

选择用户
点击右下角齿轮
选择 GNOME on Xorg
登录

KDE 登录界面:

选择 Plasma X11
登录

5.4 检查外接显示器是否被识别

xrandr

查看是否有:

HDMI-1 connected
DP-1 connected

如果显示 disconnected,说明系统没有识别到外接屏。

检查显卡绑定情况:

lspci -k | grep -A 4 -E "VGA|3D|Display"

NVIDIA 那一项正常应该显示:

Kernel driver in use: nvidia

9. 完整安装命令汇总

Fedora 43 从零安装 NVIDIA 驱动,可以按下面顺序执行:

sudo dnf install kernel-devel-matched kernel-headers

sudo dnf config-manager addrepo --from-repofile=https://developer.download.nvidia.com/compute/cuda/repos/fedora43/x86_64/cuda-fedora43.repo

sudo dnf clean expire-cache

sudo dnf install nvidia-open nvidia-driver-cuda

禁用 Nouveau:

sudo nano /etc/modprobe.d/blacklist-nouveau.conf

写入:

blacklist nouveau
options nouveau modeset=0

重新生成 initramfs:

sudo dracut --force

重启:

sudo reboot

重启后测试:

sudo nvidia-modprobe
nvidia-smi

如果成功,启用持久化服务:

sudo systemctl enable --now nvidia-persistenced

10. 完整排查命令汇总

以后 NVIDIA 驱动出问题,可以直接执行:

mokutil --sb-state
lsmod | grep nouveau
lsmod | grep nvidia
modinfo nvidia
uname -r
rpm -qa | grep -i nvidia
rpm -qa | grep kernel-devel
nvidia-smi

如果 nvidia-smi 失败,但是 lsmod | grep nvidia 有输出:

sudo nvidia-modprobe
nvidia-smi

如果 Nouveau 仍然存在:

sudo nano /etc/modprobe.d/blacklist-nouveau.conf

写入:

blacklist nouveau
options nouveau modeset=0

然后:

sudo dracut --force
sudo reboot

如果外接屏不亮:

sudo nano /etc/modprobe.d/nvidia.conf

写入:

options nvidia_drm modeset=1
options nvidia NVreg_PreserveVideoMemoryAllocations=1

然后:

sudo dracut --force
sudo reboot

11. 本次问题总结

本次 Fedora 安装 NVIDIA 驱动过程中遇到的问题包括:

  1. 系统默认加载了 Nouveau 驱动
  2. nvidia-smi 一开始无法和 NVIDIA 驱动通信
  3. Secure Boot 已关闭,不是问题来源
  4. 当前内核和 kernel-devel 匹配
  5. NVIDIA 内核模块已经正确安装并加载
  6. 最终通过 sudo nvidia-modprobe 创建设备节点后,nvidia-smi 成功
  7. 外接显示器不显示属于显示输出配置问题,不是驱动完全安装失败

最终推荐保留以下服务:

sudo systemctl enable --now nvidia-persistenced

如果外接屏不显示,可以额外配置:

options nvidia_drm modeset=1
options nvidia NVreg_PreserveVideoMemoryAllocations=1

12. 最终验证标准

驱动安装成功至少应满足以下条件。

12.1 nvidia-smi 正常

nvidia-smi

可以正常显示显卡信息。


12.2 NVIDIA 模块正常加载

lsmod | grep nvidia

可以看到:

nvidia_uvm
nvidia_drm
nvidia_modeset
nvidia

12.3 Nouveau 没有加载

lsmod | grep nouveau

没有输出。


12.4 Secure Boot 已关闭

mokutil --sb-state

建议显示:

SecureBoot disabled

12.5 当前内核和 kernel-devel 匹配

uname -r
rpm -qa | grep kernel-devel

当前内核版本和 kernel-devel 版本一致。