本文包含安裝和配置NVIDIA顯卡開源驅動 Nouveau 的內容. 有關官方閉源驅動的信息請查看NVIDIA.
查找硬體的代號 (Wikipedia 包含更詳細的列表), 然後和功能矩陣進行比較,以查看支持的功能。
安裝
安裝 mesa包 包,它提供了用於 3D 加速的 DRI 驅動程序。
- 為x86_32 提供支持,另外安裝 multilib 源中的的 lib32-mesa包 包。
- 對於 DDX 驅動程序(提供 Xorg 中的 2D 加速),安裝 xf86-video-nouveau包 包。
詳見硬體視頻加速
使用 Mesa NVK Vulkan 驅動程序
使用 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 列入黑名單。
然後安裝 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找到上游驅動源.
雙輸出
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
故障排除
將 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