Como trabalhar com 2 placas gráficas no Linux

É comum alguns notebooks terem 2 placas gráficas, em um sistema híbrido, há vários anos.

Este sistema permite trabalhar com restrições de recursos para economizar energia ou obter o máximo desempenho do sistema.

Usualmente, a segunda placa gráfica é chamada de “discreta” (discrete graphic card) e já foi mais difícil lidar com ela, no GNU/Linux, do que é hoje.

Para contextualizar, este post é baseado em um laptop Dell Inspiron 5448, com 2 placas gráficas:

  • a principal: Intel Graphics 5500.
  • a secundária: AMD Radeon R7 M260.

É um equipamento de 2016, mas… os princípios ainda são válidos.

No lado do software, estamos rodando o Ubuntu 22.04 LTS, com o GNOME Shell 42.2.

Como escolher a placa gráfica a ser usada no GNOME

Atualmente, é possível escolher a placa gráfica que você deseja destinar a um determinado programa, com 2 cliques.

Basta clicar no ícone, com o botão direito do mouse/touchpad e escolher a opção Launch using Discrete Graphics Card (se o seu sistema estiver em inglês).

Escolha da placa gráfica secundária pelo Ubuntu dash
Se tudo estiver bem instalado no seu sistema, a escolha da placa gráfica a ser usada para um determinado aplicativo, pode ser feita direto no dash do Ubuntu.

O sistema operacional System76, permite fazer a escolha nas opções do menu de inicialização — que, infelizmente, não está disponível para mim. Veja a imagem, abaixo.

Escolha da placa gráfica secundária, para uso durante a sessão, no System76.

No caso do System76, a escolha feita irá valer para toda a sessão e todos os aplicativos disparados depois de ter feito a opção. Em muitos casos, esta abordagem pode ser mais confortável.

Se quiser experimentar a opção do System76, instale o gestor de extensões do GNOME Shell:

sudo apt install gnome-shell-extension-manager

Em seguida, pressione a tecla Super e procure pelo “extension manager”…

Depois de instalado, encontre e execute o aplicativo Extension Manager (gerenciador de extensões do GNOME).

Dentro do Extension Manager, selecione o botão Browse, no topo do painel. Depois, faça uma pesquisa por “prime”, para encontrar as extensões disponíveis para a sua distro.

Para mim, infelizmente, as extensões não são suportadas.

Como você pode ver, na imagem acima, todas são “Não suportado” para mim — mas não tem problema, por que o Ubuntu 22.04 já resolveu o problema de outra forma.

Veja o significado de cada opção:

  • Prime Indicator — é a solução adotada no System76, para direcionar todas as tarefas para a placa da sua escolha.
  • GNOME Run With PRIME — vai dar opção de escolher a placa, ao clicar sobre o ícone de um programa.
  • PRIMElaunch-gnome — é a solução adotada no Ubuntu 22.04 LTS, conforme uma das imagens acima, que coloca as alternativas sobre os ícones do dash.

Como obter informações sobre os dispositivos gráficos instalados no sistema, pelo terminal

Para obter mais informações sobre os dispositivos gráficos instalados no seu sistema, use o comando lshw:

lshw -c display

Abaixo, segue o meu resultado, com as informações sobre os nomes dos dispositivos em destaque:

WARNING: you should run this program as super-user.
  *-display                 
       description: VGA compatible controller
       product: HD Graphics 5500
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       logical name: /dev/fb0
       version: 09
       width: 64 bits
       clock: 33MHz
       capabilities: vga_controller bus_master cap_list rom fb
       configuration: depth=32 driver=i915 latency=0 resolution=1366,768
       resources: irq:49 memory:c1000000-c1ffffff memory:d0000000-dfffffff ioport:5000(size=64) memory:c0000-dffff
  *-display
       description: Display controller
       product: Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:04:00.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: bus_master cap_list rom
       configuration: driver=amdgpu latency=0
       resources: irq:50 memory:b0000000-bfffffff memory:c0000000-c01fffff ioport:3000(size=256) memory:c2000000-c203ffff memory:c2040000-c205ffff
WARNING: output may be incomplete or inaccurate, you should run this program as super-user.

Observação: Em alguns sistemas pode ser necessário instalar o lshw. O pacote de instalação está disponível nos repositórios oficiais. E você poderá obter informações mais detalhadas se executar o lshw como root.

Outra forma de obter detalhes sobre os dispositivos gráficos instalados é com o lspci. No exemplo, abaixo, ele mostra se os módulos e drivers das minhas placas estão instalados e rodando:

lspci -knn | grep -A 2 -i "display\|vga"

00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 5500 [8086:1616] (rev 09)
	Subsystem: Dell HD Graphics 5500 [1028:0643]
	Kernel driver in use: i915
--
04:00.0 Display controller [0380]: Advanced Micro Devices, Inc. [AMD/ATI] Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] [10...
	Subsystem: Dell Radeon R7 M260/M265 [1028:0643]
	Kernel driver in use: amdgpu

Outra forma de obter informações sobre as placas gráficas é usar o glxinfo. Se ele não estiver instalado, use o seu gerenciador de instalação para encontrar e instalar o pacote “mesa-utils”:

sudo apt install mesa-utils

Como escolher a placa gráfica secundária no terminal

Se você quer rodar um programa a partir do console (TUI) ou do terminal, use o DRI_PRIME.

Em um sistema de placas gráficas híbridas, com 2 opções, uma delas será a placa gráfica 0 e a outra a 1.

Usualmente, 0 se refere à placa gráfica embutida ou integrada ao sistema a opção 1, se refere à segunda placa.

Se quiser ter certeza, use o glxinfo em conjunto com o DRI_PRIME:

DRI_PRIME=0 glxinfo | grep -i device
DRI_PRIME=1 glxinfo | grep -i device
O meu resultado ao rodar o DRI_PRME, com os comandos glxinfo e grep. A placa principal (embutida) é a Intel HD Graphics 5500. Já o meu dispositivo secundário, é AMD Radeon R7 M260 Iceland.

Este mesmo princípio pode ser usado para rodar qualquer programa a partir do terminal, direcionando a sua saída a uma placa gráfica ou outra.

Por exemplo, se quiser rodar o darktable do terminal, usando a placa secundária, use DRI_PRIME=1:

DRI_PRIME=1 darktable

Simples, assim.

Elias Praciano

— fã de séries, como "Love, Death & Robots", "Rick and Morty" e "Russian Doll". Gosta de criar imagens, direto da câmera, com o mínimo de pós-produção. Há vários anos o seu livro favorito é Neuromancer, de William Gibson.

Deixe um comentário

O seu endereço de e-mail não será publicado.

Post comment

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

%d blogueiros gostam disto: