Mantendo o bluetooth ativado em modo suspensão do Fedora
Introdução
Recentemente comprei um novo teclado bluetooth para utilizar no meu setup, após alguns meses utilizando o Logitech MX Mechanical Mini optei pelo Keychron K3 Pro K3X-H3, e estou curtindo bastante o teclado por todas as suas funcionalidades.
Mas depois que comecei a utilizar ele junto ao Fedora (sistema operacional que utilizo na minha máquina pessoal), sempre que o sistema operacional entrava em modo de suspensão o teclado perdia a conexão com o notebook. Para utilizar o mesmo novamente era necessário desligar o bluetooth do notebook e ativar o mesmo novamente, assim o teclado conseguia se conectar novamente.
Imaginei que poderia ser devido a alguma configuração específica pois utilizo um adaptador bluetooth via USB (Orico Blueooth 4.0 USB Adapter).
Solução
Pesquisando um pouco sobre o problema acabei encontrando nesse site as configurações para manter essa conexão ativa mesmo após o notebook entrar em modo de suspensão. Como era uma postagem um pouco antiga, resolvi dar uma chance a solução e experimentar na versão mais recente do Fedora.
Estou deixando documentado aqui os passos que realizei para realizar essa configuração, relembrando que atualmente estou utilizando a última versão do Fedora 44 Workstation Edition.
Utilizando o editor de preferência, vamos editar o arquivo /etc/default/grub, definindo o valor da variável GRUB_ENABLE_BLSCFG para true:
> sudo vim /etc/default/grub
...
GRUB_ENABLE_BLSCFG=true
...
Após isso é necessário reiniciar o sistema para que a configuração seja aplicada.
Na minha situação tenho apenas um kernel sendo utilizado então realizei o passo para aplicar para em todos os kernels disponíveis, e assim evitar algum problema caso eu venha a utilizar mais de um no futuro (mas também é possível aplicar essa configuração apenas para um kernel específico):
> sudo grubby --update-kernel=ALL --args="btusb.enable_autosuspend=0"
Reinicie o sistema novamente.
Para checar se a configuração foi aplicada com sucesso, execute os comandos abaixo, a saída esperada será algo semelhante:
> cat /etc/default/grub
...
GRUB_CMDLINE_LINUX="rhgb quiet btusb.enable_autosuspend=0"
...
> cat /proc/cmdline | grep btusb
BOOT_IMAGE=(hd0,gpt2)/vmlinuz-7.0.8-200.fc44.x86_64 root=UUID=<redacted> ro rootflags=subvol=root rhgb quiet btusb.enable_autosuspend=0
Depois de aplicar as configurações acima, foi possível utilizar o teclado sem ligar/desligar o bluetooth mesmo após o notebook ter entrado em modo de suspensão.
Créditos ao site: communicode.io
Atualização: Dongle Orico 4.0 entrando em suspensão
Após alguns dias de teste e mesmo após aplicar a configuração do btusb.enable_autosuspend=0 via grubby, o adaptador continuava sendo suspenso pelo gerenciamento de energia do USB, causando a perda de conexão com o teclado Keychron.
A solução definitiva exigiu dois ajustes adicionais: uma regra udev específica para o dongle e algumas configurações no BlueZ.
Regra udev para o dongle
Crie o arquivo /etc/udev/rules.d/50-bluetooth-dongle.rules com o seguinte conteúdo:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0a12", ATTRS{idProduct}=="0001", TEST=="power/autosuspend", ATTR{power/autosuspend}="-1"
Essa regra identifica o dongle Orico (vendor 0a12, product 0001) no momento em que ele é reconhecido pelo sistema e define o valor de autosuspend como -1, desabilitando completamente a suspensão para esse dispositivo específico.
Para aplicar a regra sem reiniciar:
> sudo udevadm control --reload-rules && sudo udevadm trigger
Configurações do BlueZ
Edite o arquivo /etc/bluetooth/main.conf e adicione/altere as seguintes opções:
[General]
FastConnectable = true
JustWorksRepairing = always
[Policy]
ReconnectAttempts=7
ReconnectIntervals=1,2,4,8,16,32,64
AutoEnable=true
| Configuração | Valor | Motivo |
|---|---|---|
FastConnectable |
true |
Permite reconexão mais rápida ao ligar o teclado |
JustWorksRepairing |
always |
Aceita repareamento automático sem confirmação manual |
ReconnectAttempts |
7 |
Tenta reconectar até 7 vezes após queda de link |
ReconnectIntervals |
1,2,4,8,16,32,64 |
Backoff progressivo entre tentativas (em segundos) |
AutoEnable |
true |
Garante que o adaptador seja reativado automaticamente |
Após salvar, reinicie o serviço do bluetooth:
> sudo systemctl restart bluetooth
Com essas três camadas de configuração: parâmetro do kernel, regra udev e BlueZ, o teclado Keychron mantém a conexão estável mesmo após ciclos de suspensão.