Nouveau

来自 ArchWiki

本文介绍了为 NVIDIA 显卡进行逆向工程的开源 Nouveau 驱动程序。有关上游专有 nvidia 和开源 nvidia-open 驱动程序的更多信息,请参阅 NVIDIA

查找您的显卡的代码名称(更详细的列表可在 维基百科 上找到),并将其与功能矩阵进行比较以了解支持的功能。

安装

安装提供 3D 加速 DRI 驱动程序的 mesa 软件包。

注意:建议 对于 NV50 (G80) 及更新的硬件,不安装 xf86-video-nouveau 驱动程序,而是回退到 modesetting 驱动程序是有益的。例如,请参阅 2021 年的用户报告

另请参阅 硬件视频加速

使用 Mesa NVK Vulkan 驱动程序

警告: 此驱动程序仍在开发中,因此,应该预料到会出现回归。某些在开源和专有驱动程序上可以正常工作的东西(主要是游戏)在使用 NVK 时可能无法正常工作(甚至根本无法工作)。如果玩游戏是一项重要的工作负载,那么您可能应该避免使用 NVK,直到它成熟一些。

使用 NVK 需要 Kernel 6.7 或更高版本以及 mesa 24.1 或更高版本。

在启用 NVK 之前,您必须卸载以下任何软件包(和/或它们的 lib32DKMS 变体)

如果您使用的是混合笔记本电脑或双 GPU 系统,请确保您没有在 /etc/modprobe.d 中的 GPU 管理器中将 Nouveau 列入黑名单。

注意: 您可能还应该卸载系统上的任何 GPU 管理器,因为它们中的大多数都通过将模块列入黑名单来工作,这可能会干扰 NVK。

然后安装 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 内核模块应在系统启动时自动加载。如果未发生,则

  • 确保您没有nomodesetvga= 作为内核参数,因为 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 的说明。

提示: 如果您的分辨率有问题,请检查内核模式设置#Forcing modes and EDID

技巧与诀窍

保留 NVIDIA 驱动程序安装

本文或本章节的事实准确性存在争议。

原因: 编辑 /usr/lib/ 中的文件不是持久性的,当软件包升级时,它们将被覆盖。(在 Talk:Nouveau 中讨论)

如果您想保留专有 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.confUdev/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 改进

注意:#安装 中所述,安装 xf86-video-nouveau 已不再需要或推荐,并且在大多数情况下,不安装它您的 GPU 会运行得更好。

双显示器

请参阅 Multihead#RandR 了解如何使用 RandR 设置多个显示器。

设置控制台分辨率

您可以使用 video= 内核行选项将分辨率传递给 nouveau(请参阅 KMS)。

电源管理

nouveau 驱动程序中缺乏适当的电源管理是导致性能问题最重要的原因之一,因为大多数显卡在使用过程中将保持较低的功率状态和较低的时钟频率。某些显卡可以使用 GPU 重新clocking 的实验性支持(请参阅 Nouveau PowerManagement 页面),并且自内核 4.5 起可以通过位于 /sys/kernel/debug/dri/*/pstate 的 debugfs 接口进行控制。

注意: 正如上游解释的那样,此 debugfs 接口不适用于 Turing 及更新的显卡,而仅适用于 kepler 及更早的显卡。

例如,要检查系统中第一张显卡的可用电源状态和当前设置,请运行

# cat /sys/kernel/debug/dri/0/pstate

也可以通过写入上述接口来手动设置/强制特定电源状态

# echo pstate > /sys/kernel/debug/dri/0/pstate
警告: 重新clocking 的支持是高度实验性的。手动设置电源状态可能会使您的系统挂起、导致损坏或使显卡过热。

风扇控制

如果您的显卡实现了风扇控制,您可以通过 /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"

来源

Optimus

您有两种解决方案可以在笔记本电脑上使用 Optimus(又名混合显卡,当您的笔记本电脑上有两个 GPU 时):bumblebeePRIME

垂直同步

Xorg 合成器容易出现 Nouveau 问题。与大多数合成器不同,Picom 提供了许多选项进行调整,以获得更平滑和无撕裂的结果。 预期提供良好结果的配置如下

$ picom -b --unredir-if-possible --backend xr_glx_hybrid --vsync --use-damage --glx-no-stencil
提示: 使用不同的合成器时,不要忘记关闭您的 DE 窗口管理器(如 KWin)的合成。

故障排除

drm.debug=14log_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

来源:https://web.archive.org/web/20170118202740/http://gentoo-en.vfose.ru/wiki/Nouveau#Phantom_and_unpopulated_output_connector_issues

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