跳转至内容

Nouveau

来自 ArchWiki

本文介绍了适用于 NVIDIA 显卡的逆向工程开源 Nouveau 驱动程序。有关上游驱动程序的信息,请参阅 NVIDIA

查找显卡的 代号维基百科上有更详细的列表),并将其与功能矩阵进行比较以查看支持的功能。

安装

本文或本章节已过时。

原因: 近期显卡(GTX 16xx 及所有 RTX 卡)也需要 vulkan-nouveau 软件包。(在 Talk:Nouveau 中讨论)

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

注意:建议称,对于 NV50 (G80) 及更新的硬件,不安装 xf86-video-nouveau 驱动程序并改用 modesetting 驱动程序是有益的。例如,参见 2021 年的一份用户报告

另请参阅 硬件视频加速

使用 Mesa NVK Vulkan 驱动程序

警告: 该驱动程序仍处于开发阶段,因此可能会出现回归问题。在开源和专有驱动程序上能运行的部分内容(主要是游戏)在使用 NVK 时可能无法正常运行(甚至根本无法运行)。如果玩游戏是您的重要工作负载,那么在 NVK 成熟之前,您可能应该避免使用它。

NVK 是一个基于 Nouveau 的开源 Vulkan 驱动程序,适用于 Kepler 及更新的 NVIDIA 显卡。

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

在启用 NVK 之前,您必须卸载以下任何软件包(及其 lib32DKMS 变体):

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

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

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

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

提示: 如果您遇到分辨率问题,请查看 内核模式设置#强制模式和 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,请告知 Xorg 加载 nouveau 而非 NVIDIA

/etc/X11/xorg.conf.d/20-nouveau.conf
Section "Device"
    Identifier "Nvidia card"
    Driver "nouveau"
EndSection

重启以生效。并通过查看内核消息检查其是否已正确加载

# dmesg

安装最新的开发包

要获取最新的 Nouveau 改进

注意:#安装 中所述,不再需要也不建议安装 xf86-video-nouveau,在大多数情况下,不安装它的 GPU 性能会更好。

双显示器 (Dual head)

可以使用 RandR 设置多台显示器,请参阅 Multihead#RandR

设置控制台分辨率

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

电源 management

Nouveau 驱动程序中缺乏适当的电源管理是性能问题的主要原因之一,因为大多数显卡在使用时会保持在较低的电源状态和较低的时钟频率下。某些显卡可以使用 GPU 重频 (reclocking) 的实验性支持(请参阅 Nouveau 电源管理页面),并且自内核 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
警告: 重频支持处于高度实验阶段。手动设置电源状态可能会导致系统挂起、数据损坏或导致显卡过热。

风扇控制

如果您的显卡已实现此功能,则可以通过 /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"

Optimus

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

垂直同步

本文或本章节已过时。

原因: xr_glx_hybrid 是一个遗留后端(且似乎已损坏)。(在 Talk:Nouveau 中讨论)

Xorg 合成器在使用 Nouveau 时容易出现问题。与其他合成器不同,Picom 提供了许多选项可供调整,以获得更平滑且无撕裂的结果。预期能产生良好效果的配置如下

$ picom -b --unredir-if-possible --backend xr_glx_hybrid --vsync --use-damage --glx-no-stencil
提示: 使用其他合成器时,请不要忘记关闭桌面环境窗口管理器(如 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 内核模块还有一个禁用 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

来源: 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]

这可能会破坏实时发行版/安装媒体。这可以通过运行 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

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.