NVIDIA (Portuguê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
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:
- Visitando o site de download de driver da NVIDIA e use as listas suspensas.
- Encontre o codinome (ex. NV50, NVC0, etc.) na página de codinomes do wiki da nouveau ou no GitLab do nouveau, em seguida buscando o nome na lista de placas legadas da NVIDIA: se sua placa não estiver lá, você pode usar o driver mais recente.
3. Instale o driver apropriado para a sua placa:
- Ao instalar dkms, consulte Dynamic Kernel Module Support (Português)#Instalação
- nvidia não inicializa no Linux 5.18 em sistemas com CPUs Intel devido a FS#74886/FS#74891. Até que isso seja corrigido, uma solução alternativa é desabilitar a função de segurança indirect branch tracking da CPU, setando
ibt=off
Kernel parameters (Português) no gerenciador de boot. Esta função de segurança é responsável por mitigar uma classe de técnicas de exploração, mas é considerado seguro como uma solução temporária. Alternativamente você pode tentar nvidia-open e continuar usando IBT. - nvidia-open não funciona em sistemas que possuem GPUs integradas da AMD devido a questão nvidia-open #282.
- Para a família Maxwell (NV110/GMXXX) ou mais recente, install o pacote nvidia (para uso com o kernel linux) ou nvidia-lts (para usar com o kernel linux-lts).
- Se estes pacotes não funcionarem, nvidia-betaAUR pode oferecer suporte a novas versões de driver.
- Alternativamente para a família Turing (NV160/TUXXX) ou mais recente, o pacote nvidia-open pode ser instalado para módulos de kernel de código aberto no linux linux (em outros kernels, nvidia-open-dkms deve ser usado).
- No momento estamos na qualidade alfa em placas de desktop, portanto, poderá haver problemas.
- Para a família Kepler (NVE0/GKXXX), install o pacote nvidia-470xx-dkmsAUR.
- Para a família Fermi (NVC0/GF1XX), install o pacote nvidia-390xx-dkmsAUR.
- Para placas mais antigas, dê uma olhada em #Drivers não suportados.
- Para a família Maxwell (NV110/GMXXX) ou mais recente, install o pacote nvidia (para uso com o kernel linux) ou nvidia-lts (para usar com o kernel linux-lts).
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ções 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.
- Para a família Tesla (NV50/G80-90-GT2XX), install o pacote nvidia-340xx-dkmsAUR package.
- Para a família Curie (NV40/G70) e mais antigas, os drivers não são mais empacotados para o Arch Linux.
Kernel customizado
Se 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).
- O driver NVIDIA não fornece um driver
fbdev
para o console de alta resolução para o modulovesafb
compilado no kernel. No entanto, o móduloefifb
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
).
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.
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.
- O Xorg poderá não iniciar ou travar na inicialização após salvar as alterações na
nvidia-settings
. Ajustar ou apagar o arquivo~/.nvidia-settings-rc
e/ou os arquivos do Xorg deve recuperar a inicialização normal. - O desktop Cinnamon pode sobrescrever mudanção feitas através do
nvidia-settings
. Você pode ajustar o comportamento de inicialização do Cinnamon para evitar isso.
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"
Habilitando o controle de brilho
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.
/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
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"
"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.
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"
.
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
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"
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.