Aquele momento que você dá shutdown ele volta a ligar
Este é o relato da investigação de um problema antigo em um Acer Aspire V5-571 rodando Linux.
O sintoma era bastante curioso: ao executar o desligamento, o sistema operacional aparentemente fazia tudo corretamente. Os serviços eram encerrados, o processo de shutdown chegava ao fim e aparecia a mensagem:
Finished System Power Off
Só que, em vez de permanecer desligado, o notebook simplesmente reiniciava.
Ou seja: o Linux dizia "acabou", mas o Acer respondia "beleza, vamos ligar de novo". 😄
A investigação foi realizada com auxílio de ferramentas de inteligência artificial, utilizadas principalmente para organizar hipóteses, interpretar resultados e estruturar a documentação do processo.
Os testes, alterações e validações foram realizados diretamente no equipamento.
O problema
O comando utilizado para testar o desligamento era:
sudo poweroff
O sistema iniciava normalmente o processo de desligamento.
Nada indicava um travamento evidente do Linux. Pelo contrário: a sequência de shutdown chegava ao seu final.
Mesmo assim, o equipamento não permanecia desligado.
Em vez disso:
poweroff → reinício
Quando o comportamento é esse, uma das primeiras suspeitas é que exista algum problema relacionado à forma como o kernel está solicitando o desligamento ao firmware da máquina.
Então começou a investigação.
Primeiras hipóteses
A primeira rodada de testes envolveu algumas possibilidades relacionadas a problemas de reboot e ACPI em máquinas antigas.
Foram consideradas, entre outras coisas, opções de kernel relacionadas ao mecanismo de reboot, como:
reboot=kbd
reboot=acpi
A ideia era verificar se o problema estava relacionado à maneira como o kernel estava conversando com o firmware para realizar a transição de desligamento.
Foram realizados testes com essas possibilidades, mas o comportamento permaneceu.
O notebook continuava reiniciando.
Isso já eliminava algumas hipóteses e indicava que talvez o problema estivesse acontecendo em uma etapa mais específica do processo.
Uma pista: gerenciamento de energia USB
Até aqui, as hipóteses relacionadas ao mecanismo de reboot e ACPI não tinham produzido resultado.
Durante a investigação, uma discussão no fórum do Linux Mint chamou atenção justamente por envolver problemas de desligamento e gerenciamento de energia em máquinas Linux.
Foi uma daquelas situações em que você está procurando uma coisa, encontra uma discussão aparentemente específica demais e pensa: "hmm... isso aqui vale um teste."
A discussão não apresentava uma solução pronta para este Acer Aspire V5-571. Ela serviu como faísca para uma hipótese: talvez o gerenciamento de energia dos dispositivos USB estivesse participando do problema.
A partir daí, passamos a investigar como o Linux estava gerenciando a energia dos dispositivos USB durante a transição para o desligamento.
No Linux, dispositivos USB possuem controles relacionados ao gerenciamento de energia. Um deles pode ser consultado através de:
cat /sys/bus/usb/devices/*/power/control
Em determinadas situações, esses dispositivos podem estar utilizando o estado:
auto
Esse mecanismo normalmente é desejável, pois permite que dispositivos entrem em estados de economia de energia quando não estão sendo utilizados.
Mas estávamos investigando justamente uma máquina antiga apresentando um comportamento anormal durante o desligamento.
Então veio um teste simples.
Referência que serviu como ponto de partida: Linux Mint Forums — discussão sobre o problema
O teste
A ideia foi forçar os dispositivos USB para o estado:
on
O teste poderia ser feito com:
for ctl in /sys/bus/usb/devices/*/power/control
do
[ -w "$ctl" ] && echo on > "$ctl"
done
Depois disso, o comando de desligamento foi executado novamente:
sudo poweroff
E dessa vez aconteceu algo diferente.
O notebook desligou.
Não reiniciou.
Não voltou para a tela de login.
Não ressuscitou misteriosamente.
Simplesmente desligou.
Nesse ponto, tínhamos uma pista concreta.
Os testes apontavam para o gerenciamento de energia dos dispositivos USB durante a transição para o desligamento como parte do problema.
Transformando o teste em solução
O problema do teste anterior é que ele precisava ser executado manualmente.
A ideia então passou a ser executar o mesmo procedimento automaticamente, imediatamente antes do desligamento.
O systemd possui um diretório específico para scripts executados durante essa etapa:
/usr/lib/systemd/system-shutdown/
Foi criado então o arquivo:
/usr/lib/systemd/system-shutdown/acer-powerfix
Com o seguinte conteúdo:
#!/bin/sh
#
# Acer Aspire V5-571
#
# Workaround para bug de desligamento.
#
# Antes do desligamento, força todos os dispositivos USB
# para o estado "on", evitando o comportamento de reboot
# observado neste equipamento.
#
for ctl in /sys/bus/usb/devices/*/power/control
do
[ -w "$ctl" ] && echo on > "$ctl"
done
exit 0
Instalação
Para reproduzir a solução no equipamento:
sudo nano /usr/lib/systemd/system-shutdown/acer-powerfix
Depois de inserir o script e salvar o arquivo:
sudo chmod +x /usr/lib/systemd/system-shutdown/acer-powerfix
O teste pode então ser realizado com:
sudo poweroff
E o GRUB?
Durante a investigação também foi considerada a possibilidade de resolver o problema através de parâmetros passados ao kernel pelo GRUB.
A configuração chegou a ser investigada e alterada durante os testes.
Como essas opções não resolveram o problema, a configuração do GRUB foi posteriormente devolvida para uma configuração mais simples:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
Após a alteração:
sudo update-grub
A solução efetiva acabou sendo o workaround relacionado ao gerenciamento de energia USB.
Resultado
Depois da implementação do script, o comportamento esperado passou a ocorrer:
sudo poweroff
↓
shutdown do sistema
↓
Finished System Power Off
↓
notebook desligado
Em vez de:
sudo poweroff
↓
shutdown do sistema
↓
Finished System Power Off
↓
REBOOT
O objetivo aqui não foi "consertar" o firmware do Acer.
O workaround simplesmente atua antes do desligamento para evitar a condição que estava provocando o comportamento observado.
Conclusão
Esse foi um daqueles problemas que parecem simples até o momento em que você começa a investigar.
O sistema operacional estava aparentemente completando o processo de desligamento. As primeiras hipóteses relacionadas ao mecanismo de reboot não resolveram. A investigação então foi caminhando para o gerenciamento de energia e, nesse ponto, um teste relativamente simples produziu uma diferença concreta no comportamento da máquina.
A partir desse teste foi possível transformar o procedimento em um pequeno script executado automaticamente pelo systemd.
Não afirmo que esse seja o único caminho possível para resolver o problema, nem que todo Acer Aspire V5-571 apresente exatamente o mesmo comportamento.
Mas neste equipamento, o resultado foi reproduzível:
forçar os dispositivos USB para
power/control = on antes do desligamento fez o
notebook desligar em vez de reiniciar.
E talvez essa seja a parte mais interessante desse tipo de problema: às vezes a solução não aparece como uma grande descoberta.
Às vezes ela aparece quando você muda uma única coisa e pensa:
"Espera... dessa vez ele desligou."
Foi daí que saiu a solução.
Ferramentas e ambiente
A investigação foi feita utilizando um equipamento que já estava longe de ser novo, mas que continua firme na bancada.
Hardware
- Acer Aspire V5-571
- Notebook utilizado durante a investigação
Sistema
- Xubuntu 22.04.5 LTS
- Kernel Linux 6.8.x
- systemd
- GRUB
Ferramentas
- Terminal
systemctlpoweroff- acesso ao sistema de arquivos
/sys - editor
nano - shell script
- documentação e pesquisa na internet
- inteligência artificial
Uma observação sobre o uso de IA
A IA não executou os testes nem teve acesso direto ao equipamento.
Ela foi utilizada como uma espécie de parceiro de investigação: ajudando a organizar hipóteses, interpretar saídas do sistema, sugerir caminhos de diagnóstico e, posteriormente, estruturar a documentação.
Os comandos foram executados no equipamento e os resultados foram observados e validados durante a investigação.
A solução apresentada neste artigo é, portanto, resultado da combinação entre investigação prática e assistência por IA.