Mantendo o bluetooth ativado em modo suspensão do Fedora

· 4 minutes

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.