跳转到内容
来自 Arch Linux 中文维基

本文包含安装和配置NVIDIA显卡开源驱动 Nouveau 的内容. 有关官方闭源驱动的信息请查看NVIDIA.

查找硬件的代号 (Wikipedia 包含更详细的列表), 然后和功能矩阵进行比较,以查看支持的功能。

安装

安装 mesa 包,它提供了用于 3D 加速的 DRI 驱动程序。

注意:有建议指出不安装 xf86-video-nouveau 驱动,而是使用 modesetting 驱动来支持 NV50 (G80) 及更新版本的硬件,可能会更有利。可以参考一篇来自 2021 年的 用户报告

详见硬件视频加速

使用 Mesa NVK Vulkan 驱动程序

警告: 这个驱动仍在开发中,因此可能会出现性能问题。一些在开源和专有驱动上正常运行的内容(主要是游戏)可能在使用 NVK 上表现不佳(甚至完全无法运行)。如果玩游戏是一个重要的使用场景,那么在 NVK 成熟之前,您应该避免使用它。

使用 NVK 需要内核版本在6.7及以上, mesa版本在24.1及以上。

在启用 NVK 之前,必须卸载以下所有包(以及它们的 lib32DKMS 版本):

如果你使用的是多 GPU 设备,请确保没有在 /etc/modprobe.d 中将 Nouveau 列入黑名单。

注意:您可能需要卸载系统上的所有 GPU 管理器,它们大多数会将模块列入黑名单,这可能会干扰 NVK

然后安装 vulkan-nouveau(如果需要,则安装 lib32-vulkan-nouveau)。

使用 nouveau.config=NvGspRm=1 内核参数

最后重启系统

可以使用 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需要内核模式设置。
  • 另外,确保你没有在 modprobe 配置文件 /etc/modprobe.d//usr/lib/modprobe.d/ 中屏蔽 Nouveau。
  • 检查 dmesg 中有没有 opcode 错误,如果有的话,将 nouveau.config=NvBios=PRAMIN 加入内核参数禁止模块卸载[1]
  • 检查 /etc/X11/xorg.conf/etc/X11/xorg.conf.d/ 中是否存在任何文件,并且该文件是否引用了 Template:Nvidia 驱动程序。最好将该文件重命名。

尽早启动 KMS

提示:如果你对这个问题的解决有问题的话,请访问这个页面.

Nouveau 驱动依赖Kernel mode setting (KMS)。当系统启动时,KMS 模块会在其它模块之后启用,所以显示的分辨率发生改变。查看Nouveau KernelModeSetting 页面获取更多细节。

可以设置将 KMS 尽早启动,在 initramfs 加载时就接管功能。

nouveau 加入 /etc/mkinitcpio.confMODULES 数组:

MODULES="... nouveau ..."

如果你使用了一个自定义的EDID文件,你应该像这样把它加入到initramfs 中:

/etc/mkinitcpio.conf
FILES="/lib/firmware/edid/your_edid.bin"

重新生成初始ramdisk映像:

# mkinitcpio -p <kernel preset; e.g. linux>

如果 Nouneau 出问题了,不得不多次重建 nouveau-drm 进行测试,请不要在 initramfs 中添加nouveau。因为这样会容易忘记重建 initramfs 而使测试更加困难。先使用“延迟启动”,直到系统已经稳定。如果需要自定义固件,使用 initrams 可能会有更多问题(一般不建议)

提示与技巧

保留已安装的Nvidia驱动

如果你想保留已经安装的官方驱动但又想要使用Nouveau驱动,像下面注释掉/etc/modprobe.d/nouveau_blacklist.conf /usr/lib/modprobe.d/nvidia-utils.conf中的内容

#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- 为前缀的服务,这些服务可能会调用 nvidia-modprobe 在启动时加载模块。例如:

 $ 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

安装最新的开发包

你可以通过AUR安装最新的git包:

你可以在 Nouveau Source page找到上游驱动源.

注意:#安装中提到, xf86-video-nouveau不再是必需的,也不推荐安装,在大多数情况下,未安装该驱动时,您的 GPU 将表现得更好。

双输出

Nouveau 支持xrandr拓展和多显示器,教程详见RandR12

这是一个完整的例子 /etc/X11/xorg.conf.d/20-nouveau.conf 用来演示在双输出模式下运行两个显示器。当然,你可能更喜欢像GNOME显示控制中心 (gnome-control-center display)这样的图形化配置工具.

# the right one
Section "Monitor"
          Identifier   "NEC"
          Option "PreferredMode" "1280x1024_60.00"
EndSection

# the left one
Section "Monitor"
          Identifier   "FUS"
          Option "PreferredMode" "1280x1024_60.00"
          Option "LeftOf" "NEC"
EndSection

Section "Device"
    Identifier "nvidia card"
    Driver "nouveau"
    Option  "Monitor-DVI-I-1" "NEC"
    Option  "Monitor-DVI-I-2" "FUS"
EndSection

Section "Screen"
    Identifier "screen1"
   Monitor "NEC"
    DefaultDepth 24
      SubSection "Display"
       Depth      24
       Virtual 2560 2048
      EndSubSection
    Device "nvidia card"
EndSection

Section "ServerLayout"
    Identifier "layout1"
    Screen "screen1"
EndSection

设置控制台分辨率

使用fbset工具调整控制台分辨率. 你也可以通过 video= kernel 这样的选项来调整控制台分辨率 (详见 KMS).

电源管理

Nouveau 驱动中缺乏合适的电源管理,大多数显卡在使用过程中会保持在较低的功率状态,频率也较低。对于某些显卡,已有实验性支持的 GPU 重新调频(详见 Nouveau PowerManagement page),并且从内核 4.5 开始,可以通过位于 /sys/kernel/debug/dri/*/pstate 的 debugfs 接口进行控制。

正如 upstream suggested 的那样,这个 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,意思是 NONE, MANUAL 和 AUTO 风扇控制。设置为手动时,可以手动设置 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(使用两个 GPUs),请阅读 bumblebeePRIME

垂直同步

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 加入内核参数.

Source: https://bugs.freedesktop.org/show_bug.cgi?id=78441

虚拟输出问题

Nouveau 驱动可能会检测到“虚拟”输出。例如,VGA-1 和 LVDS-1 都显示为连接状态,但实际上只有 LVDS-1 存在。

这会导致显示问题和/或在关闭笔记本盖时无法进入挂起状态。

内核参数

可以通过在内核参数中禁用虚拟输出(如上述示例中的 VGA-1)来解决此问题:

video=VGA-1:d

此处 d 表示禁用(disable)

Nouveau 内核模块还有一个选项,可以禁用 TV 输出检测 [2]

 tv_disable=1
 

Xorg 配置

可以通过将以下内容添加到 /etc/X11/xorg.conf.d/20-nouveau.conf 来在 Xorg 中禁用虚拟输出:

Section "Monitor"
Identifier "VGA-1"
Option "Ignore" "1"
EndSection

Source: http://gentoo-en.vfose.ru/wiki/Nouveau#Phantom_and_unpopulated_output_connector_issues

Xrandr

Xrandr can disable the output:

 $ xrandr --output VGA-1 --off

This can be added to the xinit configuration.

Random lockups with kernel error messages

Specific Nvidia chips with Nouveau may give random system lockups and more commonly throw many kernel messages, seen with dmesg. Try adding the nouveau.noaccel=1 kernel parameter. See Fedora:Common kernel problems#Systems with nVidia adapters using the nouveau driver lock up randomly for more information.

Note that using nouveau.noaccel=1 kernel parameter might cause ~%100 CPU usage on Wayland when there is no iGPU or disabled iGPU by factory. You can switch to X11 session or prefer adding LIBGL_ALWAYS_SOFTWARE=1 environment variable for wayland to disable OpenGL hardware acceleration completely.

As an alternative, you can also use the QT_XCB_FORCE_SOFTWARE_OPENGL=1 environment variable to disable OpenGL acceleration in Qt applications.

Flat Panel Table Invalid

NVIDIA graphics cards with recent chipsets can cause startup issues - this includes X11 being unable to start and lspci freezing indefinitely[3][4][5][6][7].

This can break live distributions/installation media. This can be detected either by running lspci, or checking the systemd journal for the error:

nouveau E[     DRM]Pointer to flat panel table invalid

The system may start if the Nouveau driver is disabled by passing the following kernel parameters:

modprobe.blacklist=nouveau

The Nouveau driver can then be loaded using

# modprobe nouveau

The system should then function correctly. If you have another Nvidia graphics card, or just want to be safe, you can disable the offending card using:

$ echo 1 > /sys/bus/pci/devices/[card device id]/remove