[Fedora 31/32] - Instalação do driver NVIDIA em notebook com placa HÍBRIDA - PRIME Render Offload

editado julho 14 em Tutoriais

Instalação do driver NVIDIA em NOTEBOOK com placa HÍBRIDA

[Atualização 04-07-2020] Este procedimento também foi testado no Fedora 32 e também é válido para esta versão do Fedora.

Sumário

  • 1 Introdução
  • 2 Hardware
  • 3 Verificando a Modelo da placa de vídeo e a Compatibilidade com o driver Nvidia
  • 4 Preparando o sistema
  • 5 Instalação do Driver Nvidia

    • 5.1 Configuração do Optimus
    • 5.2 Detecção de Monitor Externo
  • 6 Utilização do PRIME Render Offload

    • 6.1 Configurar aplicativos gráficos para renderizar usando a tela GPU
    • 6.2 Controle mais refinado de Vulkan
    • 6.3 Controle mais refinado do GLX + OpenGL
  • 7 Pós Instalação

  • 8 Vídeo Complementar
  • 9 Dica Extra

    • 9.1 Configuração
    • 9.2 Utilização
      • 9.2.1 Atalho de Aplicações
      • 9.2.2 Steam
  • Referências

1 Introdução

Recentemente retornei para o Fedora, e como utilizo notebook que possui placa de vídeo Nvidia com tecnologia Optimus (Prime/multi-GPU - Prime Render Offload), Primeiramente, procurei no poste A Bíblia do Fedora 31 onde achei apenas um tutorial para instalação do driver Nvidia em computadores que não utilizam placa híbrida. Então pesquisei no fórum por tutorial de instalação de driver Nvidia com Prime render offload e localizei apenas o tutorial para Fedora 30 do membro VGomes. Contudo, como estou utilizando o Fedora 31, verifiquei a referência do RPMFusion (Howto/Optimus), disponibilizada no tutorial, onde houve atualização do procedimento. Sendo assim, estou postando esta atualização visando o Fedora 31 e posteriores estáveis.

Fragmento do HOWTO/Optimus do site RPMFusion:

“Com o Fedora 30 e posterior, os pacotes oficiais do fedora xorg-x11-server possuem os patches necessários (portanto, não há necessidade de usar o repositório copr). O uso do NVIDIA 440.31+ anunciará o suporte otimizado completo (GL / EGL) usando uma versão estável do driver. Não é necessário usar o repositório copr anterior...” [HOWTO-Optimus-RPMFusion]

Deste modo, caso tenha atualizado o sistema a partir do Fedora 30 ou anterior e esteja reinstalando o driver NVIDIA, ou tenha adicionado o repositório: “copr.fedorainfracloud.org:kwizart:xorg-x11-server_nvidia”, desative este repositório conforme comando abaixo:

sudo dnf config-manager --set-disable copr:copr.fedorainfracloud.org:kwizart:xorg-x11-server_nvidia

A partir do driver NVIDIA 435.17, a Nvidia adicionou o recurso GLX+OpenGL e Vulkan para Prime Render Offload.

O que é o Prime Render Offload?
Segundo o leia-me da Nvidia:

O Prime Render Offload é a capacidade de ter uma tela X renderizada por uma GPU, mas escolha certos aplicativos nessa tela X para serem renderizados em uma GPU diferente. Isso é particularmente útil em combinação com o gerenciamento dinâmico de energia para deixar uma GPU NVIDIA desligada, exceto quando é necessário para processar aplicativos sensíveis ao desempenho.

A GPU que processa a maioria da tela X é conhecida como "coletor" (GPU Integrada - iGPU), e a GPU para a qual certa renderização de aplicativo é "descarregada" é conhecida como "fonte" (GPU Discreta - dGPU). A fonte de transferência de renderização produz o conteúdo apresentado no coletor de transferência de renderização. O driver NVIDIA pode funcionar como uma fonte de descarregamento de renderização PRIME, para descarregar a renderização do GLX + OpenGL ou Vulkan, apresentando-se em uma tela X conduzida pelo driver Xf xf86-video-modesetting. [NVIDIA-Chapter-35-Prime-Render-Offload]

2 Hardware

3 Verificando a Modelo da placa de vídeo e a Compatibilidade com o driver Nvidia

Para utilizar o Prime Render Offload a placa Nvidia deve ser suportada pela versão 435.21 ou superior do driver. No link www.nvidia.com/en-us/drivers/unix/ pode-se verificar as placas suportadas pelos drivers da Nvidia.

Para verificar o modelo da placa Nvidia do notebook, abra um Terminal e digite:

lspci |  grep -e VGA

Você provavelmente está no caso Optimus se sua placa NVIDIA for encontrada com o próximo comando:

lspci |  grep -e 3D

Abaixo está a saída dos comandos lspci:

╰─➤  lspci | grep -e VGA
00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
╰─➤  lspci | grep -e 3D 
01:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 840M] (rev a2)

4 Preparando o sistema

O primeiro passo será atualizar o sistema:

sudo dnf update

O pré-requisito para a instalação do driver Nvidia é ter pelo menos o repositório não livre (nonfree) do RPM Fusion disponível.

O comando para instalar o repositório RPM Fusion nonfree:

sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Para desabilitar o driver nouveau, o mesmo deve ser adicionado a blacklist:

echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf

Normalmente, adicionar o driver nouveau a blacklist, conforme comando acima, resolve. Entretanto, caso o driver nvidia não seja carregado após finalizar o processo de instalação e reinicialização do sistema, tente os passos a seguir:

Informar ao GRUB que o driver nouveau está na blacklist, editando o arquivo /etc/sysconfig/grub e adicionar o parâmetro: “rd.driver.blacklist=nouveau” no final da linha: “GRUB_CMDLINE_LINUX=". . .”.

Abrir o arquivo de configuração do grub com permissão de root, nesse caso abri com o editor de texto nano:

Fedora 31

sudo nano /etc/sysconfig/grub

Fedora 32

sudo nano /etc/default/grub

Exemplo:

GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet rd.driver.blacklist=nouveau"

Agora deve-se aplicar as alterações do GRUB

Se o sistema estiver em BIOS:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Se o sistema estiver em UEFI:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

OPCIONAL (Caso queira remover o driver nouveau):

Para removido o driver xorg-x11-drv-nouveau:

sudo dnf remove xorg-x11-drv-nouveau

Backup initramfs nouveau image:

sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img

Criar uma nova imagem do initramfs:

sudo dracut /boot/initramfs-$(uname -r).img $(uname -r)

Antes de continuar, deve-se reiniciar o sistema.

5 Instalação do Driver Nvidia

Para instalar o driver Nvidia será utilizado o comando abaixo:

sudo dnf install xorg-x11-drv-nvidia akmod-nvidia

5.1 Configuração do Optimus

Com o comando abaixo será criado o arquivo ativando o gerenciamento dinâmico de energia da Nvidia:

sudo cat > /etc/modprobe.d/nvidia.conf <<EOF
#Enable DynamicPwerManagement
#https://download.nvidia.com/XFree86/Linux-x86_64/440.59/README/dynamicpowermanagement.html
options nvidia NVreg_DynamicPowerManagement=0x02
EOF

Todas as linhas do comando acima devem ser copiadas e coladas no terminal ao mesmo tempo, pois são um comando só.

==> Ao finalizar o procedimento, REINICIE o sistema e DESATIVE o SECURE BOOT na BIOS do seu notebook para que as configurações entrem em vigor.**

5.2 Detecção de Monitor Externo

No momento, os monitores externos conectados à NVIDIA GPU exigem que a opção PrimaryGPU esteja configurada.

O uso da PrimaryGPU permite usar o driver NVIDIA por padrão, em vez da iGPU. Isso também é necessário para usar o monitor externo quando conectado internamente a partir do hardware NVIDIA. Infelizmente, a configuração automática desta opção quando um monitor externo está conectado não é suportada pela NVIDIA no momento. Para recuperar esse comportamento anterior, você pode usar:

OBS: Esperimente esta opção caso o monitor externo não esteja funcionando após a instalação do driver nvidia.

cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf

E edite o arquivo para usar:

Opção "PrimaryGPU" "yes"

6 Utilização do PRIME Render Offload

6.1 Configurar aplicativos gráficos para renderizar usando a tela GPU

Para configurar um aplicativo gráfico para ser descarregado na tela da GPU NVIDIA, defina a variável de ambiente NV_PRIME_RENDER_OFFLOAD como 1. Se o aplicativo gráfico usar o Vulkan, isso será tudo o que é necessário. Se o aplicativo gráfico usar GLX, defina também a variável de ambiente GLX_VENDOR_LIBRARY_NAME como nvidia, para que o GLVND carregue o driver NVIDIA GLX. A implementação EGL da NVIDIA ainda não suporta a transferência de renderização PRIME.

Exemplos:

__NV_PRIME_RENDER_OFFLOAD=1 vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep vendor

6.2 Controle mais refinado de Vulkan

A variável de ambiente NV_PRIME_RENDER_OFFLOAD faz com que a camada Vulkan especial VK_LAYER_NV_optimus seja carregada. Os aplicativos Vulkan usam a API Vulkan para enumerar as GPUs no sistema e selecionar qual GPU usar; a maioria dos aplicativos Vulkan usará a primeira GPU relatada pela Vulkan. A camada VK_LAYER_NV_optimus faz com que as GPUs sejam classificadas de modo que as GPUs NVIDIA sejam enumeradas primeiro. Para um controle mais refinado, a camada VK_LAYER_NV_optimus examina a variável de ambiente VK_LAYER_NV_optimus. O valor NVIDIA_only faz com que o VK_LAYER_NV_optimus relate apenas as GPUs NVIDIA no aplicativo Vulkan. O valor non_NVIDIA_only faz com que o VK_LAYER_NV_optimus relate apenas GPUs que não sejam da NVIDIA no aplicativo Vulkan.

Exemplos:

__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=non_NVIDIA_only vkcube

6.3 Controle mais refinado do GLX + OpenGL

Para o GLX + OpenGL, a variável de ambiente NV_PRIME_RENDER_OFFLOAD_PROVIDER fornece controle mais refinado. Enquanto NV_PRIME_RENDER_OFFLOAD = 1 diz ao GLX para usar a primeira tela NVIDIA GPU, NV_PRIME_RENDER_OFFLOAD_PROVIDER pode usar um nome de provedor RandR para escolher uma tela NVIDIA GPU específica, usando os nomes de tela NVIDIA GPU relatados por xrandr --listproviders .

Exemplos:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia  glxgears
__NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears

7 Pós Instalação


8 Vídeo Complementar

** [ATUALIZAÇÃO 09/05/2020] **

9 Dica Extra

Para facilitar a utilização do comando que força com que a renderização dos aplicativos seja realizado pela placa gráfica da Nvidia (dGPU), estou adicionando esta dica.

Primeiramente, logo após realizar o processo de instalação e configuração descritos neste tutorial, para abrir uma aplicação como o gimp, por exemplo, deve-se utilizar o comando a seguir:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia gimp

Executando aplicativos desta forma, fica muito complicado para ficar utilizando comandos como este. Sendo assim, estou sugerindo aqui a forma como eu uso e recomendo, onde será utilizado apenas o comando fedora-dgpu (ex.: fedora-dgpu gimp) para abrir aplicações e jogos.

9.1 Configuração

Para isso, crie uma pasta bin em $HOME/.local/. A partir deste ponto, todos os comando serão usados com seu usuário sem a nacessidade de usar sudo.

mkdir -p $HOME/.local/bin

Criada a pasta, entre na pasta e crie o arquivo fedora-dgpu e abra-o com o editor de texto de sua preferencia (ex.: gedit, vi, vim, nano, kate, kwriter, pluma...).

cd $HOME/.local/bin

touch fedora-dgpu

nano fedora-dgpu

Copie o código abaixo e cole-o no arquivo fedora-dgpu que está aberto em seu editor de texto, salve e feche (no caso do nano: CTRL+SHIFT+V (cola), CTRL+S (salvar) e CTRL+X (fechar)).

#!/usr/bin/env bash
    env __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia "$@"

Com o comando salvo no arquivo, será necessário dar permissão de execução para o arquivo.

chmod +x fedora-dgpu

Agora chegou o momento importante, informar ao shell do Linux o caminho para o arquivo executável fedora-dgpu, deste modo, o arquivo poderá ser executado como um comando no shell. Para isso, deve-se definir o caminho ~/.local/bin à variável PATH.

Entretanto, para que essa definição entre em vigor automaticamente sempre que houver reinicialização do sistema, os parâmetros devem ser adicionados no final de um dos aquivos apropriados do shell que estiver setado como padrão do sistema (bash, zsh, fish, etc). Se o padrão do sistema não foi mudado pelo usuário, no caso do Fedora, o shell padrão é o Bash.

Para verificar qual shell está utilizando, execute o comando:

echo $0 (echo cifrão zero)

No caso do Bash, os parâmetros podem ser adicionados ou no ~/.bash_profile, ou no ~/.profile, ou ainda, no ~/.bashrc. Se não houver familiaridade quanto a estes aquivos, sugiro adicionar o parâmetro no aquivo ~/.bashrc. Caso esteja utilizando o shell zsh, adicione os parâmetros no arquivo ~/.zshrc.

Agora que já se sabe qual shell está sendo utilizado, abra o arquivo correspondente com seu editor de texto. Para o exemplo foi aberto o arquivo ~/.zshrc.

nano ~/.zshrc

E adicione no final do mesmo os seguintes parâmetros:

if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
     PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH

Salve o arquivo e reinicie o computador para que as alterações entrem em vigor.

9.2 Utilização

9.2.1 Atalho de Aplicações

Agora será possível utilizar o fedora-dgpu como um comando de terminal, onde pode-se inclusive autocompletar o comando usando a tecla TAB. Também é possivel adicionar este comando em atalhos de programas como o gimp.desktop.

cp /usr/share/applications/gimp.desktop ~/.local/share/applications

nano ~/.local/share/applications/gimp.desktop

9.2.2 Steam

Já para a Steam, entre nas Propriedades do jogo e em DEFINIR OPÇÕES DE INICIALIZAÇÃO.... Na caixa de diálogo que aparecer, adicione o comendo: fedora-dgpu %command%, conforme imagem a baixo.

==> OBS: Esta dica não funciona, exclusivamente, na steam via Flatpak. Para este, continue utilizando os comandos longos. Via Snap não foi testado.

Referências

[TUTORIAL-Placas-Hibridas-Nvidia-Fedora-30]
[HOWTO-Nvidia-RPMFusion]
[HOWTO-Optimus-RPMFusion]
[NVIDIA-Chapter-35-Prime-Render-Offload]
[Linux-Nvidia-Driver-435.17-Beta-Release]
[Set-Path-Linux]

Comentários

  • editado março 3

    Após as ultimas atualizações e com mudança de kernel, na inicialização começou a aparecer a seguinte mensagem:

    NVIDIA kernel module missing. Falling back to nouveau

    Resolvi o problema utilizando o tutorial que consta no link.

    https://fedorabr.org/index.php?p=/discussion/comment/1116#Comment_1116

  • editado março 3

    Digite seu comentário> @tiagomartins disse:

    Após as ultimas atualizações e com mudança de kernel, na inicialização começou a aparecer a seguinte mensagem:

    NVIDIA kernel module missing. Falling back to nouveau

    Resolvi o problema utilizando o tutorial que consta no link.

    https://fedorabr.org/index.php?p=/discussion/comment/1116#Comment_1116

    Olá Tiago, vc seguiu o meu tutorial no Fedora 31 ou no beta 32? Qual a versão do kernel que estava instalada? Pergunto para que eu poça atualizar o tutorial.

    Como vc pode ver na imagem abaixo, meu fedora está com o ultimo kernel disponível para a versão estável.

    Aguardo seu retorno, e obrigado feedback.

  • Muito bom! Parabéns pelo tuto!

    Só uma dica:
    Ou vc adiciona um driver na blacklist em /etc/modprobe.d/blacklist.conf ou vc usa o parâmetro no GRUB, não precisa usar os dois métodos simultaneamente.

  • Obrigado pelo feedback @tallescg .

    Removi o procedimento de alteração no grub do tutorial. Se possível, revise para verificar se faltou alguma coisa e me dê um novo feedback.

    Desde já agradeço!

  • Digite seu comentário> @Gideon disse:

    Obrigado pelo feedback @tallescg .

    Removi o procedimento de alteração no grub do tutorial. Se possível, revise para verificar se faltou alguma coisa e me dê um novo feedback.

    Desde já agradeço!

    Opa! vc poderia informar os dois procedimentos e deixar que fique a escolha do usuário, qual ele irá usar.

  • Digite seu comentário> @tallescg disse:

    Opa! vc poderia informar os dois procedimentos e deixar que fique a escolha do usuário, qual ele irá usar.

    Boa dica Talles, eu estava pensando nisso. Por enquanto vou deixar assim, mas assim que tiver um tempinho adicionarei a outra opção.

    Obrigado pelas observações!

  • Funcionou! Muito obrigada

  • Digite seu comentário> @fehtorres disse:

    Funcionou! Muito obrigada

    Fico feliz por ter ajudado. E obrigado por ter validado o tutorial. :)

  • Bom dia, instalei ontem o fedora em minha máquina e fiz a instalação padrão dos drivers Nvidia pelo gnome-software através das guias de complemento. Também fiz a checagem de alguns parâmetros confrontando com seu tutorial e segui o passo a passo dos que não estavam iguais e mesmo assim não consigo fazer rodar o jogo da steam (flatpak) com bons FPS. no windows roda com 60 FPS cravado então não há problemas de desempenho com o game. Será que alguém poderia me ajudar com essa situação?

  • editado abril 26

    @jlrs19833 disse:
    Bom dia, instalei ontem o fedora em minha máquina e fiz a instalação padrão dos drivers Nvidia pelo gnome-software através das guias de complemento. Também fiz a checagem de alguns parâmetros confrontando com seu tutorial e segui o passo a passo dos que não estavam iguais e mesmo assim não consigo fazer rodar o jogo da steam (flatpak) com bons FPS. no windows roda com 60 FPS cravado então não há problemas de desempenho com o game. Será que alguém poderia me ajudar com essa situação?

    Boa tarde, o jogo que vc está testando é um jogo rodando via steamPlay (proton)? Se for, é normal uma pequena perda de fps em comparação com o Windows, visto que o proton é uma API que faz a tradução das bibliotecas do windows para o sistema linux. Neste caso, aconselho acessar o site ProntonDB e fazer a busca por esse jogo e verificar o depoimento dos usuários, pois há dicas de parâmetros para rodas o jogo com melhor desempenho possível. Esses parâmetros devem ser concatenados aos parâmetros do prime render offload.

    Entretanto, se estiver testando um jogo nativo para linux, o desempenho deveria ser igual ou até mesmo superior ao do windows. Para este caso, informe qual o jogo que está rodando, assim como a descrição do hardware do seu notebook e os parâmetros que está utilizando para executar o jogo.

  • Olá amigo, fiz uma postagem no dia de ontem que está neste link. lá tem todas as informações.

    https://fedorabr.org/index.php?p=/discussion/487/notebook-nvidia-gtx960m-steam

  • @jlrs19833 disse:
    Olá amigo, fiz uma postagem no dia de ontem que está neste link. lá tem todas as informações.

    https://fedorabr.org/index.php?p=/discussion/487/notebook-nvidia-gtx960m-steam

    Lí sua postagem. Segundo o que vc informou, o jogo não está renderizando pela nvidia e sim pela intel. Se vc instalou o driver da nvidia corretamente, siga os passos que indicarei aqui.

    Abra a steam, vá na biblioteca e clique com o botão direito do mouse no jogo que vc quer renderizar pela nvidia, e no menu clique em Propriedades. Conforme a imagem abaixo:
    Imagem 1

    Na janela de propriedades que irá abrir, clique em DEFINIR OPÇÕES DE INICIALIZAÇÃO.., como indica a imagem abaixo:
    Imagem 2

    Irá abrir a janela para inserir os comandos adicionais de inicialização do jogo. Nessa janela cole o comando abaixo exatamente como está e clique em Ok:

     __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia %command%
    

    Imagem 3

    Após finalizar os passos acima, tente executar o jogo e relate aqui o resultado.

  • Grande, deu super certo... Muito obrigado pela dica.. eu havia visto na postagem original a dica para colocar alguns comandos parecidos mas achei que era no shell do linux... Agora que você me ajudou ficou tudo 100%... muito muito obrigado mesmo.

  • @jlrs19833 disse:
    Grande, deu super certo... Muito obrigado pela dica.. eu havia visto na postagem original a dica para colocar alguns comandos parecidos mas achei que era no shell do linux... Agora que você me ajudou ficou tudo 100%... muito muito obrigado mesmo.

    Bom que deu certo. Obrigado pelo retorno. :)

  • editado julho 11

    Olá, boa noite.

    Sou novo na comunidade. Entrei nesse artigo pois tenho um Dell XPS 15 com placa hibrida Intell/Nvidia e estou encontrando problemas em utiliza-las pelo Ubuntu. Alguém poderia me indicar um tutorial para me auxiliar na instalação correta dos Drivers?

    Estou usando o KDE neon

    Gostaria de utilizar o GPU nvidia para renderizar, alguns programas mais pesados e jogos,

    Obrigado

  • @CaioPriori, no ubuntu e derivados vc deve instalar os drivers da nvidia normalmente via apt install. Com isso, vc poderá utilizar com o nvidia-prime, ou com o método de utilização descrito aqui neste tutorial.

    Para instalar o driver nvidia no ubuntu, posso indicar o blog do diolinux e o youtube do diolinux, busque pela instalação do driver no ubuntu. O que achar para o ubuntu funcionará para o kde neon tbm.

Entre ou Registre-se para fazer um comentário.