Nouveau
本文介绍了适用于 NVIDIA 显卡的逆向工程开源 Nouveau 驱动程序。有关上游驱动程序的信息,请参阅 NVIDIA。
查找显卡的 代号(维基百科上有更详细的列表),并将其与功能矩阵进行比较以查看支持的功能。
安装
安装 mesa 软件包,它为 3D 加速提供 DRI 驱动程序。
- 为了支持 32 位应用程序,请从 multilib 仓库安装 lib32-mesa 包。
- 对于 DDX 驱动程序(在 Xorg 中提供 2D 加速),请安装 xf86-video-nouveau 软件包。
另请参阅 硬件视频加速。
使用 Mesa NVK Vulkan 驱动程序
NVK 是一个基于 Nouveau 的开源 Vulkan 驱动程序,适用于 Kepler 及更新的 NVIDIA 显卡。
使用 NVK 需要 内核 6.7 或更高版本,以及 mesa 24.1 或更高版本。
在启用 NVK 之前,您必须卸载以下任何软件包(及其 lib32 和 DKMS 变体):
如果您使用的是混合笔记本电脑或双 GPU 系统,请确保 GPU 管理器没有在 /etc/modprobe.d/ 中将 Nouveau 加入黑名单。
然后安装 vulkan-nouveau(如果需要,请安装 lib32-vulkan-nouveau)。
如果需要,请将 nouveau.config=NvGspRm=1 添加为内核参数。在 Ada Lovelace 及更新的显卡上默认启用。请参阅文档中的注释。
最后重启您的系统。
要验证一切是否正常,可以使用 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 需要内核模式设置 (KMS)。 - 此外,请检查您没有在
/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驱动程序。重命名这些文件通常是个好主意。
早期KMS
内核模式设置 (KMS) 受 nouveau 驱动程序支持。自 mkinitcpio v32 起,由于默认包含 kms 钩子,它在早期阶段就会被启用。对于其他设置,请参阅 内核模式设置#早期 KMS 启动 以获取关于如何在启动过程中尽早启用 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,请告知 Xorg 加载 nouveau 而非 NVIDIA
/etc/X11/xorg.conf.d/20-nouveau.conf
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
双显示器 (Dual head)
可以使用 RandR 设置多台显示器,请参阅 Multihead#RandR。
设置控制台分辨率
您可以将分辨率通过 video= 内核命令行选项传递给 nouveau(请参阅 KMS)。
电源 management
Nouveau 驱动程序中缺乏适当的电源管理是性能问题的主要原因之一,因为大多数显卡在使用时会保持在较低的电源状态和较低的时钟频率下。某些显卡可以使用 GPU 重频 (reclocking) 的实验性支持(请参阅 Nouveau 电源管理页面),并且自内核 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 规则设置它
/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 内核模块还有一个禁用 TV-out 检测的选项 [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]。
这可能会破坏实时发行版/安装媒体。这可以通过运行 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