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
新增話題