Nouveau - Arch Linux 中文维基

跳转到内容

# Nouveau

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Nouveau，最近一次同步于 2024-11-13，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- NVIDIA
- Xorg
- Bumblebee

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

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

## 安装

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

- 为x86_32 提供支持，另外安装 multilib 源中的的 lib32-mesa包 包。
- 对于 DDX 驱动程序（提供 Xorg 中的 2D 加速），安装 xf86-video-nouveau包 包。

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

详见硬件视频加速

### 使用 Mesa NVK Vulkan 驱动程序

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

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

在启用 NVK 之前，必须卸载以下所有包（以及它们的 `lib32` 和 DKMS 版本）：

- nvidia包, nvidia-open包, nvidia-lts包, nvidia-betaAUR
- nvidia-settings包, nvidia-utils包
- egl-wayland包

如果你使用的是多 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.conf` 的 `MODULES` 数组:

    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.conf` 和 Udev 的 `/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包：

- 你可以通过mesa-gitAUR安装最新的Mesa（包含最新的DRI驱动）。
- 你可以通过xf86-video-nouveau-gitAUR 安装最新的DDX驱动。
- 你也可以尝试安装像 linux-mainlineAUR 这样比较新的内核版本，这可能会带来更好的性能。
- 要获得Nouveau最新的更新, 你应该使用AUR中的linux-gitAUR 包，并且编辑PKGBUILD 以使用Nouveau自己的内核库，目前它位于： git://anongit.freedesktop.org/git/nouveau/xf86-video-nouveau.
- libdrm-gitAUR
- lib32-libdrm-gitAUR
- lib32-mesa-gitAUR

你可以在 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"

参考:

- 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(使用两个 GPUs)，请阅读 bumblebee 和 PRIME

### 垂直同步

Xorg 合成器在使用 Nouveau 时容易出现问题。与大多数合成器不同，Picom 提供了许多选项，可以进行调整以获得更流畅、无撕裂的效果。预计能够提供良好效果的配置如下：

    $ picom -b --unredir-if-possible --backend xr_glx_hybrid --vsync --use-damage --glx-no-stencil

提示： 使用其他合成器时，别忘了关闭窗口管理器（如 KWin）的合成功能。

## 故障排除

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

分类：​

- 图形
- X 服务器

Nouveau
添加话题