Bluetooth
Pareamento de fones e controles, e o que o hardware realmente faz
Você provavelmente vai precisar de um adaptador USB
Entre as placas RK3326 que o ArchR suporta, só o GameForce Chi declara um rádio Bluetooth na device tree, e a própria device tree traz um comentário dizendo que esse rádio não funciona por falta de firmware. O R36S e todas as outras placas suportadas não têm chip Bluetooth nenhum.
Na prática, então, Bluetooth no ArchR significa espetar um adaptador Bluetooth USB. O kernel compila o driver HCI USB junto com os auxiliares Broadcom, Intel e Realtek, então a maioria dos adaptadores comuns é reconhecida sem trabalho extra.
A pilha de software
O ArchR usa BlueZ 5.83 com o PipeWire como backend de áudio. Não há bluealsa. O PipeWire é compilado com SBC, AAC, aptX e LDAC.
Os backends HSP e HFP estão desativados na compilação, o que tem uma consequência que vale saber antes de comprar qualquer coisa: um headset Bluetooth funciona só como saída estéreo. O microfone dele não aparece como dispositivo de entrada.
Pareamento
O Bluetooth vem desligado de fábrica (controllers.bluetooth.enabled=0).
Ligue o Bluetooth
ES → Controller & Bluetooth Settings → Enable Bluetooth. Isso inicia o bluetooth.service e o agente de pareamento, o que leva alguns segundos.
Coloque o dispositivo em modo de pareamento
Isso varia. A maioria dos controles tem um botão pequeno perto da porta USB, a maioria dos fones quer o botão de ligar segurado até o LED piscar rápido.
Procure o dispositivo
No mesmo menu, Pair Bluetooth pads automatically encontra controles sozinho. Pair a Bluetooth device manually mostra tudo o que ele enxerga, inclusive fones, e deixa você escolher.
Direcione o áudio
Para um fone, vá em ES → System Settings → Audio output e selecione ele ali. O áudio não muda sozinho.
Bluetooth device list, no mesmo menu, mostra o que está pareado e permite conectar, desconectar ou esquecer um dispositivo.
Onde os pareamentos ficam guardados
Os dispositivos pareados ficam em /storage/.cache/bluetooth. O ArchR arquiva essa pasta em /storage/roms/backups/bluetooth.tar toda vez que você pareia ou remove um dispositivo, e desempacota o arquivo de novo toda vez que o serviço Bluetooth inicia. Você pode fazer as duas coisas à mão por SSH:
archr-bluetooth save
archr-bluetooth restoreO mesmo comando faz tudo o que o menu faz. archr-bluetooth list imprime os dispositivos pareados, e trust, remove, connect e disconnect recebem um endereço MAC. Executar sem argumento nenhum imprime a lista de comandos.
O que acontece quando você abre um jogo
O runemu.sh mata o agente de pareamento antes de iniciar um emulador e o levanta de novo quando você volta. Dispositivos já conectados continuam conectados, você só não consegue parear nada novo enquanto um jogo está rodando.
Syncthing, Tailscale, ZeroTier e o servidor HTTP simples são parados durante o jogo, o que também libera espectro se você estiver usando um dongle WiFi USB ao mesmo tempo.
Mapeamento de controles
O EmulationStation grava o mapeamento que aprende com você em /storage/.config/emulationstation/es_input.cfg. Esse arquivo é do próprio EmulationStation, e é o que os menus usam.
Jogos e emuladores usam o SDL, e o SDL lê o banco de mapeamentos de /storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt. Esse caminho é um link simbólico para /usr/config, que fica na partição de sistema montada como somente leitura, então não dá para acrescentar linhas nele. Para incluir a sua, apague o link, copie o arquivo real para o lugar dele e edite a cópia:
cd /storage/.config/SDL-GameControllerDB
rm gamecontrollerdb.txt
cp /usr/config/SDL-GameControllerDB/gamecontrollerdb.txt .A partir daí o arquivo é seu e as atualizações do sistema não o renovam mais, então você perde os mapeamentos novos que vierem de cima. O link simbólico só volta se você resetar a configuração, porque o script que o cria roda uma vez, no primeiro boot.
Quando o áudio para de funcionar
Desligar um fone sem desconectar antes às vezes deixa o PipeWire segurando um sink morto, e você fica no silêncio até os serviços reiniciarem. O PipeWire roda como serviço de sistema no ArchR, não de usuário:
systemctl restart pipewire pipewire-pulse wireplumberSe o adaptador em si parar de responder, desligue e ligue o Bluetooth pelo menu, o que equivale a:
archr-bluetooth disable
archr-bluetooth enable