Bluetooth
Pair audio devices and gamepads
ArchR ships BlueZ + PipeWire bluetooth backend. No bluealsa — codec routing happens through PipeWire, which gives a cleaner integration but means some quirky devices behave differently than older docs imply.
Pair an audio headset
Enable Bluetooth
ES → System Settings → Controller & Bluetooth Settings → Enable Bluetooth → ON.
Put your headset in pairing mode
Refer to your headset's manual — usually holding the power button until the LED blinks rapidly.
Pair from the device
Same menu → Pair a Bluetooth Device. Wait for your headset's name to appear, select it.
Route audio
Once paired, ES → System Settings → Audio Device → pick the BT device from the list. ES restarts; output now goes through Bluetooth.
Pair a gamepad
Same menu, Pair a Bluetooth Device, put gamepad in pairing mode (varies — most Xbox/8BitDo gamepads have a tiny pairing button under or next to the USB port).
After pairing, ES auto-detects the gamepad and prompts you to map buttons. Mapping is saved per-device in /storage/.config/SDL2/gamecontrollerdb.txt.
Caveats on RK3326
The RK3326's WiFi/BT chip is on a single shared antenna. Real-world implications:
- Range is ~3 m — Bluetooth headphones across the room will stutter.
- WiFi competes with BT for airtime — heavy network use during gameplay can crackle the audio. Pause Syncthing/Tailscale/ZeroTier during gameplay (ArchR does this automatically via
pause_background_servicesinrunemu.sh). - A2DP latency is ~150 ms — fine for music, noticeable in fast-paced games. ArchR has no aptX-LL hardware.
Codec selection
PipeWire picks the best codec your headset advertises (LDAC > aptX > AAC > SBC). Force a lower codec if you hit dropouts:
# inspect current codec
pactl list sinks | grep -A 1 "Active Port"
# force SBC (universal, lowest bandwidth)
pactl set-sink-port bluez_sink.<MAC>.a2dp-sink "speaker-output-sbc"For LDAC at higher bitrates the A35 CPU load is non-trivial — mobile (330 kbps) and standard (660 kbps) profiles work; high (990 kbps) on top of an emulator is enough to cause crackle.
Disconnect cleanly
Always toggle BT off in ES (or unpair) before powering off. Cold-disconnect (just turning off your headset) sometimes leaves PipeWire holding a stale sink, which means no audio until reboot.
If it happens, over SSH:
systemctl --user restart pipewire pipewire-pulse wireplumberKnown issues
- PCSX-ReARMed core: silent under Bluetooth audio for unknown reasons (carry-over from upstream). Workaround: use
pcsx_rearmed32orswanstationlibretro core, or DuckStation standalone. - Reconnect-on-resume: after a fake-suspend wake-up (when RK3326 supports that some day), BT may not reconnect. Manual reconnect in the Bluetooth menu.