跳至內容

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