Nouveau
本文介绍了为 NVIDIA 显卡进行逆向工程的开源 Nouveau 驱动程序。有关上游专有 nvidia 和开源 nvidia-open 驱动程序的更多信息,请参阅 NVIDIA。
查找您的显卡的代码名称(更详细的列表可在 维基百科 上找到),并将其与功能矩阵进行比较以了解支持的功能。
安装
安装提供 3D 加速 DRI 驱动程序的 mesa 软件包。
- 为了支持 32 位应用程序,另请从 multilib 仓库安装 lib32-mesa 软件包。
- 对于 DDX 驱动程序(在 Xorg 中提供 2D 加速),安装 xf86-video-nouveau 软件包。
另请参阅 硬件视频加速。
使用 Mesa NVK Vulkan 驱动程序
使用 NVK 需要 Kernel 6.7 或更高版本以及 mesa 24.1 或更高版本。
在启用 NVK 之前,您必须卸载以下任何软件包(和/或它们的 lib32
和 DKMS 变体)
如果您使用的是混合笔记本电脑或双 GPU 系统,请确保您没有在 /etc/modprobe.d
中的 GPU 管理器中将 Nouveau 列入黑名单。
然后安装 vulkan-nouveau(如果需要,则安装 lib32-vulkan-nouveau)。
如果需要,添加 nouveau.config=NvGspRm=1
作为内核参数。在 Ada Lovelace 及更新的显卡上默认启用。请参阅 FreeDeskTop.org 上的注释。
最后,重启您的系统。
要验证一切是否正常工作,可以使用 vulkan-tools 中的 vulkaninfo
。它应该报告您系统中的 NVIDIA GPU 正在使用 NVK 驱动程序。
$ vulkaninfo
... GPU id : 0 (NVIDIA GeForce RTX 3050 Ti Laptop GPU (NVK GA107)): Surface type = VK_KHR_wayland_surface Formats: count = 8 ...
加载
Nouveau 内核模块应在系统启动时自动加载。如果未发生,则
- 确保您没有将
nomodeset
或vga=
作为内核参数,因为 Nouveau 需要内核模式设置。 - 另外,检查您是否没有在
/etc/modprobe.d/
或/usr/lib/modprobe.d/
中使用任何 modprobe 黑名单技术禁用 Nouveau。 - 如果上述所有方法仍然无法加载 nouveau,请检查 dmesg 以查找操作码错误。将
nouveau.config=NvBios=PRAMIN
添加到您的内核参数以防止模块卸载。[1] - 检查
/etc/X11/xorg.conf
或/etc/X11/xorg.conf.d/
中的任何文件是否存在并引用了nvidia
驱动程序。重命名该文件可能是一个好主意。
Early KMS
内核模式设置 (KMS) 由 nouveau
驱动程序支持,并且自 mkinitcpio v32 起已提前启用,因为默认情况下包含 kms
钩子。对于其他设置,请参阅内核模式设置#Early KMS start,以获取有关如何在启动过程中尽快启用 KMS 的说明。
技巧与诀窍
保留 NVIDIA 驱动程序安装
如果您想保留专有 NVIDIA 驱动程序(并且不使用 OpenGL),但想使用 Nouveau 驱动程序,请按照以下步骤操作
注释掉 /etc/modprobe.d/nouveau_blacklist.conf
或 /usr/lib/modprobe.d/nvidia-utils.conf
中的 nouveau 黑名单,并按如下方式修改它
#blacklist nouveau
您可能还需要注释掉其他优先考虑专有驱动程序的配置文件,例如 systemd-modules-load 的 /usr/lib/modules-load.d/nvidia-utils.conf
和 Udev 的 /usr/lib/udev/rules.d/60-nvidia.rules
。使用以下命令检查驱动程序安装了哪些文件
# pacman -Ql nvidia-utils | grep conf
然后,确保您已禁用可能调用 nvidia-modprobe
以在启动时加载模块的 nvidia-
前缀服务。例如
$ systemctl status nvidia-persistenced.service
如果您正在使用 Xorg,请通过创建文件 /etc/X11/xorg.conf.d/20-nouveau.conf
并包含以下内容来告诉 Xorg 加载 nouveau 而不是 NVIDIA
Section "Device" Identifier "Nvidia card" Driver "nouveau" EndSection
重启以使效果生效。并通过查看内核消息来检查它是否加载正常
# dmesg
安装最新的开发包
要获取最新的 Nouveau 改进
- linux-gitAUR
- libdrm-gitAUR
- lib32-libdrm-gitAUR
- lib32-mesa-gitAUR
- mesa-gitAUR
- xf86-video-nouveau-gitAUR
双显示器
请参阅 Multihead#RandR 了解如何使用 RandR 设置多个显示器。
设置控制台分辨率
您可以使用 video=
内核行选项将分辨率传递给 nouveau(请参阅 KMS)。
电源管理
nouveau 驱动程序中缺乏适当的电源管理是导致性能问题最重要的原因之一,因为大多数显卡在使用过程中将保持较低的功率状态和较低的时钟频率。某些显卡可以使用 GPU 重新clocking 的实验性支持(请参阅 Nouveau PowerManagement 页面),并且自内核 4.5 起可以通过位于 /sys/kernel/debug/dri/*/pstate
的 debugfs 接口进行控制。
例如,要检查系统中第一张显卡的可用电源状态和当前设置,请运行
# cat /sys/kernel/debug/dri/0/pstate
也可以通过写入上述接口来手动设置/强制特定电源状态
# echo pstate > /sys/kernel/debug/dri/0/pstate
风扇控制
如果您的显卡实现了风扇控制,您可以通过 /sys
配置风扇控制。
$ find /sys -name pwm1_enable /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon1/pwm1_enable $ readlink /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/driver ../../../../bus/pci/drivers/nouveau
pwm1_enable
可以设置为 0、1 或 2,分别表示无、手动和自动风扇控制。如果设置为手动风扇控制,您可以手动设置 pwm1
,例如设置为 40 表示 40%。
您还可以通过 udev 规则进行设置
$ cat /etc/udev/rules.d/50-nouveau-hwmon.rules ACTION=="add", SUBSYSTEM=="hwmon", DRIVERS=="nouveau", ATTR{pwm1_enable}="2"
来源
- https://floppym.blogspot.de/2013/07/fan-control-with-nouveau.html
- https://web.archive.org/web/20141031191559/https://kalgan.cc/blog/posts/Controlling_nVidia_cards_fans_with_nouveau_in_Debian/
Optimus
您有两种解决方案可以在笔记本电脑上使用 Optimus(又名混合显卡,当您的笔记本电脑上有两个 GPU 时):bumblebee 和 PRIME
垂直同步
Xorg 合成器容易出现 Nouveau 问题。与大多数合成器不同,Picom 提供了许多选项进行调整,以获得更平滑和无撕裂的结果。 预期提供良好结果的配置如下
$ picom -b --unredir-if-possible --backend xr_glx_hybrid --vsync --use-damage --glx-no-stencil
故障排除
将 drm.debug=14
和 log_buf_len=16M
添加到您的内核参数以启用视频调试
创建详细的 Xorg 日志
$ startx -- -logverbose 9 -verbose 9
查看已加载的视频模块参数和值
$ modinfo -p video
禁用 MSI
如果您仍然在加载模块或启动 X 服务器时遇到问题,请将 nouveau.config=NvMSI=0
附加到您的内核参数。
来源:https://bugs.freedesktop.org/show_bug.cgi?id=78441
幻像输出问题
nouveau 驱动程序可能会检测到“幻像”输出。例如,VGA-1 和 LVDS-1 都显示为已连接,但仅 LVDS-1 存在。
这会导致显示问题和/或阻止在合上盖子时挂起。
内核参数
可以通过使用内核参数禁用幻像输出(在给定的示例中为 VGA-1)来克服此问题
video=VGA-1:d
其中 d = 禁用。
nouveau 内核模块还具有禁用电视输出检测的选项 [2]
tv_disable=1
Xorg 配置
可以通过将以下内容添加到 /etc/X11/xorg.conf.d/20-nouveau.conf
来在 Xorg 中禁用幻像输出
Section "Monitor" Identifier "VGA-1" Option "Ignore" "1" EndSection
Xrandr
Xrandr 可以禁用输出
$ xrandr --output VGA-1 --off
可以将其添加到 xinit 配置中。
内核错误消息导致的随机卡顿
特定的 Nvidia 芯片与 Nouveau 可能会导致随机系统卡顿,并且更常见的是抛出许多内核消息,使用 dmesg 可以看到。尝试添加 nouveau.noaccel=1
内核参数。有关更多信息,请参阅 Fedora:Common kernel problems#Systems with nVidia adapters using the nouveau driver lock up randomly。
请注意,当没有 iGPU 或 工厂禁用 iGPU 时,使用 nouveau.noaccel=1
内核参数可能会导致 Wayland 上 ~%100 的 CPU 使用率。您可以切换到 X11 会话,或者首选为 wayland 添加 LIBGL_ALWAYS_SOFTWARE=1
环境变量 以完全禁用 OpenGL 硬件加速。
作为替代方案,您还可以使用 QT_XCB_FORCE_SOFTWARE_OPENGL=1
环境变量 在 Qt 应用程序中禁用 OpenGL 加速。
平板显示器表无效
具有最新芯片组的 NVIDIA 显卡可能会导致启动问题 - 这包括 X11 无法启动和 lspci 无限期冻结[3][4][5][6][7]。
这可能会破坏 live 发行版/安装介质。可以通过运行 lspci 或检查 systemd 日志中是否存在以下错误来检测到这一点
nouveau E[ DRM]Pointer to flat panel table invalid
如果通过传递以下内核参数禁用 Nouveau 驱动程序,系统可能会启动
modprobe.blacklist=nouveau
然后可以使用以下命令加载 Nouveau 驱动程序
# modprobe nouveau
然后系统应该可以正常运行。如果您有另一张 Nvidia 显卡,或者只是为了安全起见,您可以禁用有问题的显卡,方法是
$ echo 1 > /sys/bus/pci/devices/[card device id]/remove