Nouveau
本文包含安装和配置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