ARCH R

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 SettingsController & Bluetooth SettingsEnable 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 SettingsAudio 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_services in runemu.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 wireplumber

Known issues

  • PCSX-ReARMed core: silent under Bluetooth audio for unknown reasons (carry-over from upstream). Workaround: use pcsx_rearmed32 or swanstation libretro 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.

On this page