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