NVIDIA (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de NVIDIA. Data da última tradução: 2022-07-29. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Este artigo cobre o driver de placa gráfica proprietário da NVIDIA. Para o driver de código aberto, consulte Nouveau. Se você têm um laptop com gráficos hiblidos intel/NVIIDA, consulte NVIDIA Optimus.

Instalação

Atenção: Evite instalar o driver NVIDIA através do pacote disponibilizado no site da NVIDIA. Instlação utilizando o pacman (Português) permite atualizar o driver junto com o restante do sistema.

Estas instruções são para aqueles que usam o pacote linux ou linux-lts. Para configurar um kernel customizado, pule para a próxima subseassão.

1. Se você não sabe qual placa gráfica possui, descubre com o comando:

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

2. Determine a versão do driver necessária para a sua placa:

3. Instale o driver apropriado para a sua placa:

Nota:

4. Para suportar aplicativos de 32-bits, tambem instale o pacote lib32 correspondente através do repositório multilib (ex. lib32-nvidia-utils).

5. Reinicie. O pacote nvidia possui um arquivo que adiciona o módulo nouveau na lista negra, então a reinicializaçãao se faz necessária.

Uma vez que o driver foi instalado, continue para #Configuração do Xorg ou #Wayland.

Drivers não suportados

Se você têm uma placa antiga, a NVIDIA não suporta mais ativamente o driver para a sua placa. Isso significa que estes driver não suportam oficialmente o a verão atual do Xorg. Assim pode ser mais fácil usar o driver nouveau, que suporta placas antigas com o XOrg atual.

No entanto, os drivers legados da NVIDIA ainda estão disponíveis e podem fornecer melhor desempenho 3D e estabilidade.

Kernel customizado

If estiver usando um kernel customizado, a compila¸~ao dos modulos de kernel da NVIDIA podem ser automatizados com DKMS. Instale o pacote nvidia-dkms (ou uma branch específica).

Certifique-se que seu kernel tenha CONFIG_DRM_SIMPLEDRM=y e, se está usando CONFIG_DEBUG_INFO_BTF isso é necessário no PKGBUILD (desde o kernel 5.16):

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

O módulo NVIDIA irá ser reconstruido após cada atualização do pacote NVIDIA ou do kernel, graças ao pacman hook do DKMS.

Configuração do modo DRM no kernel

Para habilitar o DRM (Direct Rendering Manager) kernel mode setting, adicione o nvidia-drm.modeset=1 Kernel parameters (Português).

Nota:
  • O driver NVIDIA não fornece um driver fbdev para o console de alta resolução para o modulo vesafb compilado no kernel. No entanto, o módulo efifb compilado pelo kernel suporta um console de alta resolução em sistemas EFI. Este método requer o GRUB ou rEFInd e está descrito em NVIDIA/Tips and tricks#Fixing terminal resolution.[1][2][3].
  • Drivers NVIDIA anteriores a versão 470 (ex. nvidia-390xx-dkmsAUR) não suportam aceleração de hardware XWayland, fazendo com que aplicativos não nativos do Wayland sofram de baixo desempenho em sessões Wayland.

Carregamento antecipado

Para um funcionamento básico, somente adicionando o parametro no kernel deve ser o suficiente. Se você quiser garantir que ele seja carregado o mais antecipado possível, ou estiver percebendo problemas de inicialização (Como o modulo nvidia do kernel sendo carregado após o display manager) você pode adicionar nvidia, nvidia_modeset, nvidia_uvm e nvidia_drm no initramfs.

mkinitcpio

Se você usa mkinitcpio initramfs, siga mkinitcpio#MODULES para adicionar os módulos.

Se adicionado ao initramfs, não esqueça de executar mkinitcpio toda vez que um driver nvidia for atualizado. Consulte #pacman hook para automatizar esses passos.

Booster

Se você usa Booster, Siga Booster#Early module loading.

pacman hook

Para evitar a possibilidade de esquecer de atualizar o initramfs após uma atualização do driver NVIDIA, você talvés queira usar um pacman hook:

/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

[Action]
Description=Update 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'

Tenha certeza que o pacote setado no Target neste hook é o que você instalou no passo anterior (ex. nvidia, nvidia-dkms, nvidia-lts ou nvidia-ck-something).

Nota: A complicação na linha Exec acima é para evitar executar mkinitcpio várias vezes se nvidia e linux forem atualizados. Caso isso não o incomode, as linhas Target=linux e NeedsTargets podem ser descartadas, e a linha Exec pode ser reduzida a simplesmente Exec=/usr/bin/mkinitcpio -P.

Decodificação de vídeo acelerada por hardware

A decodificação de vídeo acelerada com VDPAU é compatível com placas da família GeForce 8 e mais recentes. A decodificação de vídeo acelerada com NVDEC é suportada em placas Fermi (família ~400) e mais recentes. Consulte Hardware video acceleration para obter detalhes.

Codificação de vídeo acelerada por hardware com NVENC

NVENC requer o modulo nvidia_uvm e a criação de nós de dispositivos relacionados em /dev.

O pacote de driver mais recente fornece uma udev rule que cria nós de dispositivo automaticamente, portanto, nenhuma ação adicional é necessária.

Se você está usando um driver antigo (ex. nvidia-340xx-dkmsAUR), você precisa criar nós de dispositivo. Invocando o utilitário nvidia-modprobe os cria automaticamente. Você pode criar /etc/udev/rules.d/70-nvidia.rules para executá-lo automaticamente:

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

Configurações do Xorg

O driver gráfico proprietário da NVIDIA não precisa qualquer arquivo de configuração do servidor Xorg. Você pode start X para ver se o servidor do Xorg irá funcionar coretamente sem o arquivo de configuração . No entanto, se faz necessário criar um arquivo de configuração (preferencialmente /etc/X11/xorg.conf.d/20-nvidia.conf do que /etc/X11/xorg.conf) para ajustar várias configurações. Estas configurações podem ser geradas pela ferramenta de configuração do Xorg da NVIDIA, ou isso pode ser criado manualmente. Se criadomanualmente, pode ser uma configuração mínima (no sentido de que passará apenas as opções básicas para o servidor Xorg), ou pode incluir várias configurações que podem ignorar as opções auto-descobertas ou pré-configuradas do Xorg.

Dica: Para mais opções de configuração , consulte NVIDIA/Troubleshooting.

Configuração automática

O pacote NVIDIA uma ferramenta de configuração automática para criar um arquivo de configuração do servidor Xorg (xorg.conf) e pode ser executado pelo comando:

# nvidia-xconfig

Este comando irá auto detectar e criar (ou editar, se já existente) o arquivo /etc/X11/xorg.conf de configuração levando em considera¸~ao o hardware atual.

Se houver instâncias de DRI, certifique-se de que sejam comentadas:

#    Load        "dri"

Verifique novamente o arquivo /etc/X11/xorg.conf para garantir que sua profundidade padrão, sincronização horizontal, atualização vertical e resoluções sejam aceitáveis.

nvidia-settings

o ferramenta nvidia-settings permite que você configure muitas opções usando CLI ou GUI. A execução de nvidia-settings sem nenhuma opção inicia a GUI, para opções de CLI, consulte nvidia-settings(1).

Você pode executar a CLI/GUI como um usuário sem permissões de root e salvar as configurações em ~/.nvidia-settings-rc usando a opção Save Current Configuration na guia nvidia-settings Configuration.

Para carregar o ~/.nvidia-settings-rc para o usuário padrão:

$ nvidia-settings --load-config-only

Consulte Autostarting para iniciar esse comando em cada boot.

Nota:

Configuração manual

Vários ajustes (que não podem ser ativados automaticamente ou com nvidia-settings) podem ser executados editando o arquivo de configuração. O servidor Xorg precisará ser reiniciado antes que qualquer alteração seja aplicada.

Consulte NVIDIA Accelerated Linux Graphics Driver README and Installation Guide para detalhes adicionais e opções.

Configurações mínimas

Um bloco de configurações básicas existe em 20-nvidia.conf (ou depreciado em xorg.conf) deve se parecer com isso:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
        Identifier "NVIDIA Card"
        Driver "nvidia"
        VendorName "NVIDIA Corporation"
        BoardName "GeForce GTX 1050 Ti"
EndSection

Desabilitar o log na inicialização

Adicione a opção "NoLogo" na seção Device:

Option "NoLogo" "1"

Sobrescrever a detecçãodo monitor

A opção "ConnectedMonitor" na sessão Device permite sobrescrever a detecção do monitorenquanto o servidor X inicializa, o que pode economizar uma quantidade significativa de tempo na inicialização. As opções disponíveis são: "CRT" para conexões analógicas, "DFP" para monitores digitais e "TV" para televisores.

A declaração a seguir força o driver NVIDIA a ignorar as verificações de inicialização e reconhecer o monitor como DFP:

Option "ConnectedMonitor" "DFP"
Nota: Use "CRT" para todas as conexões analógicas VGA de 15 pinos, mesmo se o monitor for de tela plana. "DFP" destina-se apenas a conexões digitais DVI, HDMI ou DisplayPort.

Habilitando o controle de brilho

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: Desatualizado (Discuss in [[Potencialmente obsoleto[4], pacote upstream também parece ser antigo.]])

Adicione os parametros do kernel:

nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1

Alternativamente, adicione o seguinte na seção Device:

Option "RegistryDwords" "EnableBrightnessControl=1"

Se o controle de brilho continua sem funcionar mesmo com essas opções, tente instalar o pacote nvidia-bl-dkmsAUR.

Nota: Instalando o pacote nvidia-bl-dkmsAUR irá fornecer a interface /sys/class/backlight/nvidia_backlight/ para controle de brilho da luz de fundo, mas seu sistema pode continuar a emitir alterações de controle de luz de fundo em /sys/class/backlight/acpi_video0/. Uma solução neste caso case é observar as alterações, ex. acpi_video0/brightness com inotifywait traduzir e escrever em nvidia_backlight/brightness adequadamente. Consulte Backlight#sysfs modified but no brightness change.

Habilitando o SLI

Atenção: desde a família GTX 10xx (1080, 1070, 1060, etc), apenas SLI de 2 vias é suportado. SLI de 3 e 4 vias pode funcionar para aplicativos CUDA/OpenCL, mas provavelmente quebrará todos os aplicativos OpenGL.

Taken from the NVIDIA driver's README Appendix B: This option controls the configuration of SLI rendering in supported configurations. A "supported configuration" is a computer equipped with an SLI-Certified Motherboard and 2 or 3 SLI-Certified GeForce GPUs.

Find the first GPU's PCI Bus ID using lspci:

# 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)

Add the BusID (3 in the previous example) under section Device:

BusID "PCI:3:0:0"
Note: The format is important. The BusID value must be specified as "PCI:<BusID>:0:0"

Add the desired SLI rendering mode value under section Screen:

Option "SLI" "AA"

The following table presents the available rendering modes.

Value Behavior
0, no, off, false, Single Use only a single GPU when rendering.
1, yes, on, true, Auto Enable SLI and allow the driver to automatically select the appropriate rendering mode.
AFR Enable SLI and use the alternate frame rendering mode.
SFR Enable SLI and use the split frame rendering mode.
AA Enable SLI and use SLI antialiasing. Use this in conjunction with full scene antialiasing to improve visual quality.

Alternatively, you can use the nvidia-xconfig utility to insert these changes into xorg.conf with a single command:

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

To verify that SLI mode is enabled from a shell:

$ 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.
Warning: After enabling SLI, your system may become frozen/non-responsive upon starting xorg. It is advisable that you disable your display manager before restarting.

If this configuration does not work, you may need to use the PCI Bus ID provided by nvidia-settings,

$ 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.

and comment out the PrimaryGPU option in your xorg.d configuration,

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

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

Using this configuration may also solve any graphical boot issues.

Multiple monitors

See Multihead for more general information.

Using nvidia-settings

The nvidia-settings tool can configure multiple monitors.

For CLI configuration, first get the CurrentMetaMode by running:

$ 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}

Save everything after the :: to the end of the attribute (in this case: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}) and use to reconfigure your displays with nvidia-settings --assign "CurrentMetaMode=your_meta_mode".

Tip: You can create shell aliases for the different monitor and resolution configurations you use.

ConnectedMonitor

If the driver does not properly detect a second monitor, you can force it to do so with 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

The duplicated device with Screen is how you get X to use two monitors on one card without TwinView. Note that nvidia-settings will strip out any ConnectedMonitor options you have added.

TwinView

You want only one big screen instead of two. Set the TwinView argument to 1. This option should be used if you desire compositing. TwinView only works on a per card basis, when all participating monitors are connected to the same card.

Option "TwinView" "1"

Example configuration:

/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

Device option information.

If you have multiple cards that are SLI capable, it is possible to run more than one monitor attached to separate cards (for example: two cards in SLI with one monitor attached to each). The "MetaModes" option in conjunction with SLI Mosaic mode enables this. Below is a configuration which works for the aforementioned example and runs GNOME flawlessly.

/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
Vertical sync using TwinView

If you are using TwinView and vertical sync (the "Sync to VBlank" option in nvidia-settings), you will notice that only one screen is being properly synced, unless you have two identical monitors. Although nvidia-settings does offer an option to change which screen is being synced (the "Sync to this display device" option), this does not always work. A solution is to add the following environment variables at startup, for example append in /etc/profile:

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

You can change DFP-0 with your preferred screen (DFP-0 is the DVI port and CRT-0 is the VGA port). You can find the identifier for your display from nvidia-settings in the "X Server XVideoSettings" section.

Gaming using TwinView

In case you want to play fullscreen games when using TwinView, you will notice that games recognize the two screens as being one big screen. While this is technically correct (the virtual X screen really is the size of your screens combined), you probably do not want to play on both screens at the same time.

To correct this behavior for SDL, try:

export SDL_VIDEO_FULLSCREEN_HEAD=1

For OpenGL, add the appropriate Metamodes to your xorg.conf in section Device and restart X:

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

Another method that may either work alone or in conjunction with those mentioned above is starting games in a separate X server.

Mosaic mode

Mosaic mode is the only way to use more than 2 monitors across multiple graphics cards with compositing. Your window manager may or may not recognize the distinction between each monitor. Mosaic mode requires a valid SLI configuration. Even if using Base mode without SLI, the GPUs must still be SLI capable/compatible.

Base Mosaic

Base Mosaic mode works on any set of Geforce 8000 series or higher GPUs. It cannot be enabled from within the nvidia-setting GUI. You must either use the nvidia-xconfig command line program or edit xorg.conf by hand. Metamodes must be specified. The following is an example for four DFPs in a 2x2 configuration, each running at 1920x1024, with two DFPs connected to two cards:

$ 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"
Note: While the documentation lists a 2x2 configuration of monitors, GeForce cards are artificially limited to 3 monitors in Base Mosaic mode. Quadro cards support more than 3 monitors. As of September 2014, the Windows driver has dropped this artificial restriction, but it remains in the Linux driver.
SLI Mosaic

If you have an SLI configuration and each GPU is a Quadro FX 5800, Quadro Fermi or newer then you can use SLI Mosaic mode. It can be enabled from within the nvidia-settings GUI or from the command line with:

$ 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

See Wayland#Requirements for more information.

For further configuration options, take a look at the wiki pages or documentation of the respective compositor.

Regarding XWayland take a look at Wayland#XWayland.

Tips and tricks

See NVIDIA/Tips and tricks.

Troubleshooting

See NVIDIA/Troubleshooting.

See also