Nouveau

来自 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