NVIDIA

来自 Arch Linux 中文维基

本文包含安装和配置 NVIDIA 官方显卡驱动的信息。想要了解社区开源驱动的信息,参见 Nouveau。如果你使用具有 Intel 和 NVIDIA 双显卡的笔记本, 请参考 NVIDIA Optimus 页面。

安装[编辑 | 编辑源代码]

警告: 请避免从 NVIDIA 官网下载驱动包进行安装。通过使用 Arch Linux 的 pacman 来安装,NVIDIA 驱动能够在更新系统时与其他组件一同更新。
注意: 在具有混合图形技术的机型上双重启动时,启用Windows或第三方应用中的 集显模式/节能模式 可能会完全禁用NVIDIA独立显卡(例如ASUS节能模式),导致其无法被检测到。

首先,从nouveau 英伟达代号查询页中查找您的显卡系列代号(例如:NV110, NVC0)。您也可以运行以下命令获知显卡型号/名称:

$ lspci -k | grep -A 2 -E "(VGA|3D)"

随后为您的显卡安装合适的驱动:

注意: 使用 dkms 安装时, 请参阅 DKMS#安装 部分
GPU 家族 驱动 支持状态
Turing (NV160/TUXXX)系列或更新版本 nvidia-open (适用于linux)
nvidia-open-dkms (适用于其他内核)
上游推荐使用,支持中1
Maxwell (NV110/GMXXX)系列到
Ada Lovelace (NV190/ADXXX)系列
nvidia (适用于linux)
nvidia-lts (适用于linux-lts)
nvidia-dkms (适用于其他内核)
支持中1
Kepler (NVE0/GKXXX)系列 nvidia-470xx-dkmsAUR 过时,不再支持2,3
Fermi (NVC0/GF1XX)系列 nvidia-390xx-dkmsAUR
Tesla (NV50/G80-90-GT2XX)系列 nvidia-340xx-dkmsAUR
Curie (NV40/G70) 以及更老的系列 Arch Linux没有相应的驱动包
  1. 如果以上驱动安装后都不能正常工作,您也许需要使用 nvidia-open-betaAUR 以获得更新版本的驱动。
  2. 在安装了 Intel CPU 11 代或更新版本的处理器 以及Linux 5.18 (或更高版本)的系统上可能无法正常工作,原因是与其与 Indirect Branch Tracking 这个安全功能不兼容。您可以在 Arch_的启动流程 中设置 ibt=off 内核参数 来禁用它。请注意,这项安全功能负责 缓解一些攻击技术的影响
  3. Nvidia不再积极为这些显卡提供驱动。这意味着这些驱动不正式支持现在的Xorg版本。因此使用 Nouveau 驱动可能会更方便,因为它依然为这些老显卡提供对当前Xorg的支持。但是,Nvidia 提供的 legacy 驱动依旧可用,并且或许拥有更好的 3D 性能(稳定性)。

对于 32 位应用程序支持,请安装 multilib 仓库中对应的 lib32 nvidia 软件包(例如 lib32-nvidia-utils)。

kms/etc/mkinitcpio.conf 里的HOOKS 数组中移除,并重新生成 initramfs。 这能防止 initramfs 包含 nouveau 模块,以确保内核在早启动阶段不会加载它。nvidia-utils 软件包包含一个文件,其将会在重启后屏蔽 nouveau 内核模块。

注意: 如果您正在使用 Wayland ,您需要首先配置 #DRM 内核级显示模式设置 后重启,否则您可能会遇到黑屏。

一旦驱动安装完毕,就可以进入下一步了:#Xorg配置#Wayland 配置

定制内核[编辑 | 编辑源代码]

安装 nvidia-dkms 软件包以及你内核对应的头文件。

确保您的内核设置了 CONFIG_DRM_SIMPLEDRM=y 选项,如果使用 CONFIG_DEBUG_INFO_BTF,则 PKGBUILD 中需要以下选项(从内核 5.16 开始):

install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids

DRM 内核级显示模式设置[编辑 | 编辑源代码]

由于NVIDIA不支持自动 KMS 晚加载, 要正常运行Wayland 合成器或 没有 root 权限的 Xorg,您必须启用 DRM (直接渲染管理器)内核级显示模式设置

nvidia-utils 560.35.03-5 版本后默认启用 DRM (Direct Rendering Manager) 内核级显示模式设置。对于更旧的版本,请为nvidia_drm模块设置内核模块参数 modeset=1

使用以下命令验证DRM是否自动启用:

# cat /sys/module/nvidia_drm/parameters/modeset

其应当返回 Y

警告: 官方支持的内核 默认启用 simpledrm, 如您使用545或更旧版本的NVIDIA驱动,您需要设置内核模块参数 nvidia_drm.fbdev。因为当其不被启用时,NVIDIA 驱动程序尝试使用 efifbvesafb 进行帧缓冲(其无法在simpledrm下工作)。
注意: 版本 470 之前的 NVIDIA 驱动程序 ( 例如 nvidia-390xx-dkmsAUR) 不支持对 XWayland 进行硬件加速,导致非 Wayland 原生应用程序在 Wayland 会话中性能不佳。

早启动[编辑 | 编辑源代码]

对于基本功能,只需添加内核参数就足够了。如果您希望确保驱动能被最早加载,或者遇到了启动问题(例如 nvidia 内核模块在显示管理器启动后才被加载),可以将 nvidianvidia_modesetnvidia_uvmnvidia_drm 添加到 initramfs 中。

mkinitcpio[编辑 | 编辑源代码]

如果使用 mkinitcpio initramfs,请按照 mkinitcpio#MODULES 添加模块。

如果你将驱动添加到了 initramfs 中,记得每次更新 nvidia 驱动程序后都要运行 mkinitcpio。请参见 #pacman hook 来自动执行这些步骤。

Booster[编辑 | 编辑源代码]

如果使用 Booster,请参考 Booster#Early module loading

dracut[编辑 | 编辑源代码]

如果使用 dracut,请参考dracut#Early kernel module loading

Pacman 钩子[编辑 | 编辑源代码]

为了避免更新 NVIDIA 驱动之后忘了更新 initramfs,你可以使用 Pacman Hooks

/etc/pacman.d/hooks/nvidia.hook
[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia
Target=linux
# Change the linux part above and in the Exec line if a different kernel is used
# 如果使用不同的内核,请更改上面的 linux 部分和 Exec 行中的内容,例如更改为Target=nvidia-open

[Action]
Description=Updating Nvidia module in initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -P'

务必保证 Target 项所设置的软件包与你在前面的安装过程中所使用的相符(例如nvidianvidia-dkmsnvidia-ltsnvidia-ck-something等)。

注意: Exec 那一行看起来非常复杂,是为了避免在 nvidialinux 软件包都发生更新的时候重复运行 mkinitcpio。如果你觉得无所谓,可以删掉 Target=linux 以及 NeedsTargets,然后 Exec 就可以简化为 Exec=/usr/bin/mkinitcpio -P.

硬件加速视频解码[编辑 | 编辑源代码]

GeForce 8 系列及更新的显卡通过 VDPAU 进行视频硬件解码。费米架构(400、500系列)及更新的显卡支持通过 NVDEC 进行硬件加速解码。参见硬件视频加速

基于 NVENC 的硬件加速视频编码[编辑 | 编辑源代码]

想要使用 NVENC,则需要安装 nvidia_uvm 模块,并在 /dev 下创建相关设备节点。

最新的驱动程序包提供了一个 udev规则,它可以自动创建设备节点,因此不需要进一步的操作。

如果您使用旧的驱动程序 ( 例如 nvidia-340xx-dkmsAUR) ,则需要另外创建设备节点。调用 nvidia-modprobe 实用程序会自动创建它们。您可以自己创建 /etc/udev/rules.d/70-nvidia.rules 规则来自动运行它 :

/etc/udev/rules.d/70-nvidia.rules
ACTION=="add", DEVPATH=="/bus/pci/drivers/nvidia", RUN+="/usr/bin/nvidia-modprobe -c 0 -u"

Xorg 配置[编辑 | 编辑源代码]

NVIDIA专有驱动不需要任何 Xorg 服务器配置文件。您可以启动 X 来检验没有配置文件的 Xorg 能否正确运行。但是,您可能需要创建配置文件(优先创建/etc/X11/xorg.conf.d/20-nvidia.conf而不是/etc/X11/xorg.conf)来调整 Xorg 运行时的一些设置。您可以用NVIDIA Xorg 配置工具来生成配置,也可以手动创建它。假如是手动创建的话,它可以是一个最小配置文件(也就是意味着它仅仅把一些基础的选项传给 Xorg 服务器),也可以是包含大量的绕开Xorg 自动发现与预配置选项的设置的文件。

提示:更多配置项相关内容参见 NVIDIA/故障排除

自动配置[编辑 | 编辑源代码]

英伟达的软件包已经包含一个自动配置的工具来帮助您创建Xorg服务器配置文件(xorg.conf)。您可以通过运行下面的命令来实现自动配置:

# nvidia-xconfig

该命令会自动检测并根据现有硬件的情况创建(或修改)/etc/X11/xorg.conf。如果配置文件中存在DRI的话,请把它们注释掉:

#    Load        "dri"

再一次检查您的配置文件/etc/X11/xorg.conf中的默认色深、水平同步、垂直刷新和分辨率是否正确。

nvidia-settings[编辑 | 编辑源代码]

nvidia-settings工具可以让你通过 CLI 或者图形界面配置很多选项。无参数运行nvidia-settings会启动图形界面版本的配置工具,而 CLI 选项参见nvidia-settings(1)

你可以以非 root 用户身份使用 CLI/图形界面配置工具,并把设置保存到~/.nvidia-settings-rc或使用Save to X configuration File按钮来保存到xorg.conf(用于多用户环境)。

通过以下命令来为当前用户加载 ~/.nvidia-settings-rc

$ nvidia-settings --load-config-only

参见 Autostarting 来在每次开机的时候自动执行此命令。

注意:

手动配置[编辑 | 编辑源代码]

有些调整项无法通过#自动配置#nvidia-settings自动启用,但可以通过修改你的配置文件来进行配置。Xorg服务器需要重新启动以应用这些配置。

参见NVIDIA Accelerated Linux Graphics Driver README and Installation Guide来了解更多细节及选项。

最简配置[编辑 | 编辑源代码]

用 root 用户创建一个配置文件20-nvidia.conf(或 /etc/X11/xorg.conf):

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
   Identifier     "Device0"
   Driver         "nvidia"
   VendorName     "NVIDIA Corporation"
EndSection

[编辑 | 编辑源代码]

如果您使用的是旧版驱动(nvidia-340xx-dkmsAUR),您可能希望禁用在 X 启动时显示的 NVIDIA 徽标启动画面。添加"NoLogo"选项到Device节里:

Option "NoLogo" "1"

覆盖显示器侦测[编辑 | 编辑源代码]

Device节下面的"ConnectedMonitor"选项允许您覆盖X服务器在启动时的显示器侦测过程,这可能有助于在启动时节约大量时间。可用的选项包括:"CRT"用于模拟信号连接,"DFP"用于数字显示器,"TV"用于电视。

下面的例子是强制英伟达的驱动绕开启动检测并且强制把显示器识别为DFP:

Option "ConnectedMonitor" "DFP"
注意: "CRT"适用于所有传输模拟信号的15 pin VGA连接器,包括平板显示器上的VGA接口。"DFP"仅适用于DVI、HDMI和DisplayPort等数字信号连接器。

启用亮度控制[编辑 | 编辑源代码]

本文内容或本节内容已经过期。

原因: 可能已过时[1], 上游软件包看起来也很久没更新了 (在Talk:NVIDIA讨论)

添加内核参数:

nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1

或者,在Device节下添加:

Option "RegistryDwords" "EnableBrightnessControl=1"

如果亮度控制依旧无法生效,请尝试安装nvidia-bl-dkmsAUR

注意: 安装 nvidia-bl-dkmsAUR 会提供 /sys/class/backlight/nvidia_backlight/ 接口以用于背光亮度控制,但是你的系统可能会继续发送亮度调整信号到 /sys/class/backlight/acpi_video0/。 解决方案之一是监视文件变化,例如为 acpi_video0/brightness 添加 inotifywait 并将变化翻译并写入 nvidia_backlight/brightness。 参见 Backlight#sysfs modified but no brightness change.

启用 SLI[编辑 | 编辑源代码]

警告: 自 GTX 10xx系列(1080、1070、1060等等)开始,仅 2 路 SLI 是受支持的。3 路或 4 路 SLI 或许能够在 CUDA/OpenCL 应用上使用,但是会让几乎所有 OpenGL 应用崩溃。

根据英伟达驱动的 README 附录 B: 这个选项可以在支持的配置中控制 SLI 渲染的相关配置。一个支持的配置是指有一块 SLI 认证的主板以及 2 或者 3 个 SLI认 证的 GeForce GPU 的计算机。

您可以用lspci查找第一个 GPU 的 PCI 总线 ID:

# lspci | grep "VGA|3D controller"
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
03:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)

Device节下添加 BusID(例如前面例子里的那 3 个):

BusID "PCI:3:0:0"
注意: 这个格式很重要。BusID的值必须指定为"PCI:<BusID>:0:0"的格式。

根据需要的 SLI 渲染模式来添加值到Screen节下面:

Option "SLI" "AA"

下表列出了可用的渲染模式。

Value Behavior
0, no, off, false, Single 渲染时仅使用单GPU。
1, yes, on, true, Auto 启用SLI并让驱动自动选择合适的渲染模式。
AFR 启用SLI并使用交替帧渲染模式。
SFR 启用SLI并使用分割帧渲染模式。
AA 启用SLI和使用SLI抗锯齿。与全场景反锯齿结合使用以改善视觉效果。

另外,您可以使用 nvidia-xconfig 实用工具来将这些变动写入xorg.conf

# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA

从shell来验证一下SLI是否被启用:

$ nvidia-settings -q all | grep SLIMode
   Attribute 'SLIMode' (arch:0.0): AA
    'SLIMode' is a string attribute.
    'SLIMode' is a read-only attribute.
    'SLIMode' can use the following target types: X Screen.
警告: 启用 SLI 之后,你的系统可能会在启动 xorg 的时候假死、没有反应。建议你在重启之前禁用你的显示管理器。

如果这个配置没有效果,你可能需要使用 nvidia-settings 提供的PCI总线ID:

$ nvidia-settings -q all | grep -i pcibus
Attribute 'PCIBus' (host:0[gpu:0]): 101.
  'PCIBus' is an integer attribute.
  'PCIBus' is a read-only attribute.
  'PCIBus' can use the following target types: GPU, SDI Input Device.
Attribute 'PCIBus' (host:0[gpu:1]): 23.
  'PCIBus' is an integer attribute.
  'PCIBus' is a read-only attribute.
  'PCIBus' can use the following target types: GPU, SDI Input Device.

并将 xorg.d 配置中的 PrimaryGPU 选项注释掉:

/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
...

Section "OutputClass"
...
    # Option "PrimaryGPU" "yes"
...

使用后面这个配置或许会顺便解决任何图形界面启动问题。

多台显示器[编辑 | 编辑源代码]

参见Multihead以获取更多信息。

使用 nvidia-settings[编辑 | 编辑源代码]

nvidia-settings 工具可以配置多个监视器。

对于 CLI 配置,首先运行以下命令获取 CurrentMetaMode:

$ nvidia-settings -q CurrentMetaMode
Attribute 'CurrentMetaMode' (hostnmae:0.0): id=50, switchable=no, source=nv-control :: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}

:: 之后的所有内容保存到属性末尾(在本例中为:{{ic|1=DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}}}),并使用 {{ic|1=nvidia-settings --assign "CurrentMetaMode=''your_meta_mode''"}} 重新配置显示器。

提示:您可以为所使用的不同监视器和分辨率配置创建 shell alias。

ConnectedMonitor[编辑 | 编辑源代码]

如果驱动程序没有正确检测到第二个监视器,则可以使用 ConnectedMonitor 强制设置。

/etc/X11/xorg.conf

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Panasonic"
    ModelName      "Panasonic MICRON 2100Ex"
    HorizSync       30.0 - 121.0 # this monitor has incorrect EDID, hence Option "UseEDIDFreqs" "false"
    VertRefresh     50.0 - 160.0
    Option         "DPMS"
EndSection

Section "Monitor"
    Identifier     "Monitor2"
    VendorName     "Gateway"
    ModelName      "GatewayVX1120"
    HorizSync       30.0 - 121.0
    VertRefresh     50.0 - 160.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    Option         "NoLogo"
    Option         "UseEDIDFreqs" "false"
    Option         "ConnectedMonitor" "CRT,CRT"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 6200 LE"
    BusID          "PCI:3:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device2"
    Driver         "nvidia"
    Option         "NoLogo"
    Option         "UseEDIDFreqs" "false"
    Option         "ConnectedMonitor" "CRT,CRT"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 6200 LE"
    BusID          "PCI:3:0:0"
    Screen          1
EndSection

通过添加带有 Screen 选项的重复设备配置,能让 X 在一张显卡上使用两台显示器而不需要 TwinView。注意,nvidia-settings 将去掉您添加的任何 ConnectedMonitor 选项。


TwinView[编辑 | 编辑源代码]

若你想用一个大屏幕,而不是两个屏幕.将TwinView设为1。只有所有显示器都接到同一张显卡上时,TwinView 才能工作。

Option "TwinView" "1"

示例配置:

/etc/X11/xorg.conf.d/10-monitor.conf
Section "ServerLayout"
    Identifier     "TwinLayout"
    Screen         0 "metaScreen" 0 0
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    Option         "Enable" "true"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    Option         "Enable" "true"
EndSection

Section "Device"
    Identifier     "Card0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"

    #refer to the link below for more information on each of the following options.
    Option         "HorizSync"          "DFP-0: 28-33; DFP-1: 28-33"
    Option         "VertRefresh"        "DFP-0: 43-73; DFP-1: 43-73"
    Option         "MetaModes"          "1920x1080, 1920x1080"
    Option         "ConnectedMonitor"   "DFP-0, DFP-1"
    Option         "MetaModeOrientation" "DFP-1 LeftOf DFP-0"
EndSection

Section "Screen"
    Identifier     "metaScreen"
    Device         "Card0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "True"
    SubSection "Display"
        Modes          "1920x1080"
    EndSubSection
EndSection

另请参考设备选项信息

如果您有多个支持 SLI 的显卡,则可以把多个显示器接到不同的显卡上。“MetaModes”选项与 SLI Mosaic 模式配合使用可实现此功能。下面是一个适用于上述情况的配置,它可以完美运行 GNOME


/etc/X11/xorg.conf.d/10-monitor.conf
Section "Device"
        Identifier      "Card A"
        Driver          "nvidia"
        BusID           "PCI:1:00:0"
EndSection

Section "Device"
        Identifier      "Card B"
        Driver          "nvidia"
        BusID           "PCI:2:00:0"
EndSection

Section "Monitor"
        Identifier      "Right Monitor"
EndSection

Section "Monitor"
        Identifier      "Left Monitor"
EndSection

Section "Screen"
        Identifier      "Right Screen"
        Device          "Card A"
        Monitor         "Right Monitor"
        DefaultDepth    24
        Option          "SLI" "Mosaic"
        Option          "Stereo" "0"
        Option          "BaseMosaic" "True"
        Option          "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"
        SubSection      "Display"
                        Depth           24
        EndSubSection
EndSection

Section "Screen"
        Identifier      "Left Screen"
        Device          "Card B"
        Monitor         "Left Monitor"
        DefaultDepth    24
        Option          "SLI" "Mosaic"
        Option          "Stereo" "0"
        Option          "BaseMosaic" "True"
        Option          "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"
        SubSection      "Display"
                        Depth           24
        EndSubSection
EndSection

Section "ServerLayout"
        Identifier      "Default"
        Screen 0        "Right Screen" 0 0
        Option          "Xinerama" "0"
EndSection

对于同时拥有amd核显和nvidia独立显卡的用户[编辑 | 编辑源代码]

由于NVIDIA自动生成的xorg.conf配置默认不包含AMDGPU这会导致双屏用户其中一个屏幕不能显示 需要先进行自动配置,然后在/etc/X11/xorg.conf.d/下新建20-amdgpu.conf

Section "Device"
     Identifier "AMD"
     Driver "amdgpu"
EndSection 
TwinView 和垂直同步[编辑 | 编辑源代码]

如果您正在使用 TwinView 和垂直同步 (nvidia-settings 中的 Sync to VBlank 选项 ) ,您将注意到只有一个屏幕能正常同步,除非您有两个相同的显示器。虽然 nvidia-settings 确实提供了一个选项来更改垂直同步的屏幕 (Sync to this display device 选项 ) ,但这并不总是有效。一个解决方案是在启动时添加以下环境变量,例如在 /etc/profile 中附加 :

export __GL_SYNC_TO_VBLANK=1
export __GL_SYNC_DISPLAY_DEVICE=DFP-0
export VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=DFP-0

你可以把 DFP-0 改为你首选要同步的屏幕 (DFP-0 是DVI接口, CRT-0 是VGA接口). 您可以从 "X Server XVideoSettings" 部分的 nvidia-settings 中找到显示器的标识符。

用 TwinView 玩游戏[编辑 | 编辑源代码]

如果你想在使用 TwinView 时玩全屏游戏,你会注意到游戏将两个屏幕识别为一个大屏幕。虽然这理论上没问题(因为虚拟 X 屏幕实际上是屏幕大小的总和),但您可能不希望同时在两个屏幕上显示。

要纠正 SDL 的这种行为,请尝试 :

export SDL_VIDEO_FULLSCREEN_HEAD=1

对于 OpenGL,向 xorg.conf 中添加适当的 Metamode 并重新启动 X:

Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"

另一种可以单独使用或与上述方法结合使用的方法是在单独的 X 服务器中启动游戏

马赛克拼接模式[编辑 | 编辑源代码]

马赛克模式是使用多个显示器进行跨显卡合成的唯一方式。您的窗口管理器不一定能区分不同的显示器。马赛克模式需要一个有效的 SLI 配置。即使使用基本模式而不使用 SLI,GPU 仍然必须支持 / 兼容 SLI。

基本马赛克拼接模式[编辑 | 编辑源代码]

Base Mosaic 模式适用于任何 Geforce 8000 系列或更高版本的 GPU。无法从 nvidia-setting GUI 中启用它。您必须使用 nvidia-xconfig 命令行程序或手动编辑 xorg.conf。必须指定元模式。以下是 2x2 配置中四个 DFP 的示例,每个 DFP 以 1920x1024 运行,两个 DFP 连接到两个显卡:

$ nvidia-xconfig --base-mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
注意: 虽然文档列出了 2x2 的监视器配置,在基础马赛克模式下 GeForce 显卡被人为限制了只能使用3个显示器。Quadro 卡支持 3 个以上的显示器。截至 2014 年 9 月,Windows 驱动程序已取消了这一人为限制,但仍保留在 Linux 驱动程序中。
SLI 马赛克拼接模式[编辑 | 编辑源代码]

如果您有 SLI 配置,并且每个 GPU 都是 Quadro FX 5800、Quadro Fermi 或更新型号,那么您可以使用 SLI 马赛克模式。可以从 nvidia-settings GUI 内或从命令行通过以下方式启用:

$ nvidia-xconfig --sli=Mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"

Wayland配置[编辑 | 编辑源代码]

关于 XWayland,请查看 XWayland

有关进一步的配置选项,请查看相应混成器的 wiki 页面或文档。

注意: 在驱动程序版本 555.xx 之前,或者在使用不支持通过linux-drm-syncobj-v1协议进行显式同步的混成器时,NVIDIA 驱动程序可能会出现严重问题,表现为闪烁、帧顺序错乱等,这在原生 Wayland 或 Xwayland 应用程序中均会发生。


配置[编辑 | 编辑源代码]

你可能需要调整nvidia_drm 模块的以下两个内核参数。

modeset[编辑 | 编辑源代码]

使用Wayland时,modeset必须被启用。在使用受支持的驱动程序(nvidia-utils 560.35.03-5以后)时默认启用,未来它也将成为上游的默认设置。

对于不支持的驱动程序,需手动启用 modeset,请参见 #DRM 内核级显示模式设置Wayland系统需求

fbdev[编辑 | 编辑源代码]

启用fbdev对于某些 Wayland 配置是必要的。其在使用受支持的驱动程序时默认启用,未来它也将成为上游的默认设置。

在Linux6.11以及更高版本上这是一个硬性需求,但目前尚不清楚这是预期行为还是一个错误[2]

您可以参考 #DRM 内核级显示模式设置 中的方法进行设置。其区别在于验证其是否打开时,您需要执行:

# cat /sys/module/nvidia_drm/parameters/fbdev

如果没有成功设置,其将返回缺少文件错误,而不是N

休眠支持[编辑 | 编辑源代码]

Wayland 的休眠可能比 X 更容易受到默认设置的影响,详细信息请参见 Tips and tricks#Preserve video memory after suspend

如您使用 GDM,请参考 GDM#Wayland and the proprietary NVIDIA driver

NVswitch[编辑 | 编辑源代码]

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:需要多个语法改进,以及关于 fabric manager 的部分应当只作为一个 AUR 包。(在Talk:NVIDIA讨论)

对于具有 NVswitch 的系统,例如 AWS 上的 H100x8:

  • 安装 nvidia-fabricmanager
  • 安装所有fabric manager所需要的内核模块

使用 fabricmanager 时,pytorch 会报告未找到 GPU。

安装 fabric manager:

  1. 此处下载tarball。
  1. 版本 555.42.02 运作良好
  1. 修改 sbin/fm_run_package_installer.sh 中的安装脚本以修复安装文件路径

要获取匹配的内核驱动程序:

  1. 克隆 nvidia-beta-dkms 和 nvidia-utils-beta 的 AUR
  1. 将 PKGBUILD 更改为使用版本 555.42.02
  1. 构建安装并重启

随后运行systemctl enable nvidia-fabricmanager 以及 systemctl start nvidia-fabricmanager,现在 pytorch 应当能正确识别到GPU。

提示和技巧[编辑 | 编辑源代码]

参考 NVIDIA/Tips and tricks.

故障排除[编辑 | 编辑源代码]

参考 NVIDIA/故障排除.

另请参见[编辑 | 编辑源代码]