AMD Radeon com dois monitores no Ubuntu

Depois de muita pesquisa e repetições de tentativa e erro, finalmente, o segundo monitor funcionou em um computador com Ubuntu 20.04 e placa gráfica AMD Radeon RX 560. O que foi feito? Um simples parâmetro de inicialização de kernel do Linux. Mas, o que significa esse parâmetro? Por que ele não é ativado por padrão? Antes de chegar a essas questões, vamos pelo começo.

Depois da instalação

Foi uma vontade simples: quero usar uma distribuição Linux na máquina. Depois de pesquisar algumas distribuições, resolvi utilizar o Pop!_OS 22.04. Após a instalação, verifiquei que o segundo monitor não estava funcionando.

- Será o driver? Mas Pop!_OS num vem com os drivers AMD [1] embutidos?

Sim! E até confirmei esse suporte com o comando dmesg | grep amdgpu. Mas mesmo assim o segundo monitor não funcionou. Por quê? Bem… procurei o caminho mais fácil: fui até o suporte da AMD e verifiquei que as distribuições suportadas são Ubuntu, RHEL/CentOS e SLED/SLES.

- Mas Pop!_OS num é derivado do Ubuntu?

Mais uma vez, sim! Pensei logo em algum problema nos drivers nativos. Então, voltei ao suporte da AMD [2] e segui as instruções de instalação. Para minha surpresa, a instalação emite uma mensagem de erro: o sistema não é suportado.

😒 Ahhhh… tudo bem! Então, fui para o Ubuntu 20.04 LTS! Depois da instalação do sistema e do driver, não é difícil adivinhar o resultado…

Insistência

Quando se entra num ciclo de tentativa e erro, parece não ter fim: entrar em questões parecidas nos fóruns, ver aquelas propostas de solução que convencem e testar. Com o erro, começar tudo outra vez…

Preciso poupar você, leitor ou leitora, da descrição temporal desse caminho. Passado por ele, se chega a fase de reflexão. É quando o pensamento computacional entra em cena: em que momento esse problema acontece? Segue-se direto aos famigerados Logs.

Tudo parece normal, funcionando perfeitamente. Exceto por alguns dois detalhes: no primeiro, o comando xrandr -q demonstra que a porta HDMI está desconectada, apesar do monitor estar conectado a ela e funcionando no normalmente quando uso o sistema Windows.

- Ora, então é só forçar o xrandr a ativar a porta, certo?

Juro que tentei, de várias formas diferentes [3] e não funcionou em nenhuma. Mas ainda restava o segundo detalhe: durante a execução da BIOS/UEFI, do GRUB e do INITRAMFS, a saída de imagem padrão ocorre no HDMI. Quando o kernel começa seu trabalho, a saída de imagem é alterada para a porta DVI.

- Ahhhh… agora sim! É algum parâmetro de inicialização do kernel!

Mas qual? A documentação oficial do kernel [4] não possui um parâmetro específico para GPU da AMD. Até tentei o nomodeset, que só fez desabilitar os recursos de GPU para utilizar apenas o framebuffer do sistema. Como diz a documentação: “útil para plano de contingência, ou para teste e depuração”.

Mas aí surge um terceiro detalhe: programas grandes, como o kernel do Linux, são modulares. Ou seja, possuem extensões, ou plugins, que neste caso são os drivers. Portanto, podem existir (e existem) parâmetros que o kernel recebe e apenas despacha para algum destinatário!

O baú do tesouro, sem o tesouro

Imagine que você é um pirata que encontra um baú de tesouro. Ao abrir e ver que está vazio, mesmo assim, comemora de maneira descontrolada. É esta a sensação na grande maioria dos casos daqueles que vivem no mundo da tecnologia. E está tudo bem assim!

O parâmetro em questão é amdgpu.dc=0, escrito no arquivo de configuração do grub em /etc/default/grub, mais especificamente alterando uma variável da seguinte forma:

GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.dc=0 quiet splash"

Há vários relatos de uso [5] e tutoriais [6]sobre esses parâmetros para resolver problemas de GPU, inclusive na documentação oficial do kernel, mas em uma seção específica [7].

Quero as respostas prometidas

Ok, direto a elas:

O que significa o parâmetro amdgpu.dc=0?
R. Ele habilita (valor 1) ou desabilita (valor 0) a depuração do núcleo do driver. O valor padrão é -1.

Por que ele não é ativado por padrão?
R. A resposta anterior demonstra que ele possui um valor padrão (valor -1). Porém, como efeito, para a placa Radeon RX 560 e algumas outras placas, o efeito prático é o funcionamento incompleto do driver. Inclusive, isso está registrado no acompanhamento de bugs do kernel [8] desde 2018. Portanto, somente correções no código para solucionar o caso. Quem se habilita?

Referências

[1] Difference between Pop!_OS and Ubuntu. System76, 2022. Disponível em: https://support.system76.com/articles/difference-between-pop-ubuntu/. Acesso em: 16 jul. 2022.

[2] Drivers Linux® para placas de vídeo AMD Radeon™ e Radeon PRO™. AMD, 2022. Disponível em: https://www.amd.com/pt/support/linux-drivers. Acesso em: 16 jul. 2022.

[3] xrandr. ArchLinux, 2022. Disponível em: https://wiki.archlinux.org/title/xrandr. Acesso em: 16 jul. 2022.

[4] The kernel’s command-line parameters. The Linux Kernel Archives, 2022. Disponível em: https://docs.kernel.org/admin-guide/kernel-parameters.html. Acesso em: 16 jul. 2022.

[5] The kernel’s command-line parameters. The Linux Kernel Archives, 2022. Disponível em: https://docs.kernel.org/admin-guide/kernel-parameters.html. Acesso em: 16 jul. 2022.

[6] What is Kernel parameter amdgpu.dc=0 doing and why do I suddenly need it? Manjaro Forum, 2022. Disponível em: https://realtechtalk.com/Enable_AMDGPU_Linux_Driver_in_Debian_Ubuntu_mint-2265-articles. Acesso em: 16 jul. 2022.

[7] AMDGPU driver module parameters. Kernel, 2022. Disponível em: https://www.kernel.org/doc/html/latest/gpu/. Acesso em: 16 jul. 2022.

[8] AMDGPU DC: Unable to find connected outputs. Kernel.org Bugzilla, 2022. Disponível https://bugzilla.kernel.org/show_bug.cgi?id=200121

Comentários