Getting started
Connect a controller over Bluetooth
Pair a game controller to Universal Controller MIDI over Bluetooth on macOS, Windows, and Linux. Per-OS pairing modes and latency notes.
Updated
Bluetooth adds 10–18 ms of latency on top of the 4–7 ms USB baseline — fine for live performance and writing, less great for tight recorded drums. Universal Controller MIDI uses your OS's native Bluetooth stack, no custom drivers, no third-party shims.
Put the controller into pairing mode
Pairing-mode triggers vary by controller. The most common:
- DualSense (PS5): hold
PS+Createuntil the light bar flashes blue. - DualShock 4 (PS4): hold
PS+Shareuntil the light bar flashes white. - Xbox Series X|S: press the small pair button on top until the Xbox button flashes.
- Switch Pro: press the sync button next to the USB-C port for ~2 s.
Pairing UI flow by OS
The Bluetooth panes have wildly different naming conventions across operating systems. Here's the path on each, plus how the controller will appear in the discoverable list.
| OS | Path to pairing UI | Discoverable name | Notes |
|---|---|---|---|
| macOS 14+ | System Settings → Bluetooth | "DualSense Wireless Controller" / "Xbox Wireless Controller" | Auto-reconnects on wake. |
| macOS 12–13 | System Preferences → Bluetooth | Same | Older pane, same flow. |
| Windows 11 | Settings → Bluetooth & devices → Add device → Bluetooth | "Wireless Controller" | May pair as generic HID; re-pair if so. |
| Windows 10 | Settings → Devices → Bluetooth & other devices | "Wireless Controller" | Known polling issue with BT audio active. |
| GNOME 45+ | Settings → Bluetooth | "DualSense Wireless Controller" | Toggle to "Always trust" after first pair. |
| KDE Plasma 6 | System Settings → Bluetooth → Devices | Same as GNOME | Same as GNOME. |
| CLI (any Linux) | bluetoothctl | MAC + name in scan on output | Most reliable on headless systems. |
Pair on macOS
Open System Settings → Bluetooth. The controller appears as "DualSense Wireless Controller", "Xbox Wireless Controller", or similar. Click Connect. The app sees it within ~400 ms of connection.
# Sanity check from the terminal
system_profiler SPBluetoothDataType | grep -A 3 -i controller
# Force-disconnect a stuck pairing without opening the GUI
blueutil --disconnect $(blueutil --paired | grep -i controller | awk '{print $2}' | tr -d ',') Pair on Windows
Open Settings → Bluetooth & devices → Add device → Bluetooth. Pick the controller from the list and confirm. Windows occasionally pairs a controller as a generic HID device — if axes feel wrong, unpair and re-pair after fully powering the controller off.
Pair on Linux
Use bluetoothctl from the terminal:
bluetoothctl
power on
agent on
scan on
# wait for the MAC to appear, then:
pair AA:BB:CC:DD:EE:FF
trust AA:BB:CC:DD:EE:FF
connect AA:BB:CC:DD:EE:FF GNOME and KDE Bluetooth settings work too if you prefer GUI. Either way, the app detects the controller as soon as the kernel's hidraw node appears.
Re-pair after a phone steals the controller
DualSense and DualShock 4 controllers remember exactly one host. Pairing your phone in between blows away the desktop pairing — and silently. The fix is a full reset, then re-pair fresh:
# DualSense / DS4 hardware reset
# 1. Power off the controller (hold PS for ~10s)
# 2. Locate the pinhole reset button on the back, near the L2 trigger
# 3. Press it with a paperclip for 5 seconds
# 4. Re-enter pairing mode (PS + Create on DualSense)
# On the host — remove the stale pairing first
# macOS:
blueutil --unpair AA:BB:CC:DD:EE:FF
# Linux:
bluetoothctl remove AA:BB:CC:DD:EE:FF What if it doesn't work?
Five common failure modes for Bluetooth pairing — these account for most support tickets.
- Controller never appears in the discoverable list — pairing-mode timeout. Hold the pair combo for the full duration (DualSense: 5 s minimum). Light bar must be actively flashing, not solid.
- Pairs successfully but disconnects after 30 s — kernel quirk on Linux. Run
sudo systemctl restart bluetooth, then re-trust the controller withbluetoothctl trust AA:BB:CC:DD:EE:FF. - Axes inverted or stuck on Windows — paired as generic HID. Unpair, power-cycle the controller fully (hold PS 10 s), and re-pair after Windows has had ~10 seconds to clear its cache.
- Adaptive triggers and haptics do nothing over BT on macOS — feature requires macOS 14+. On Sonoma it works; on Ventura, only over USB.
- Two controllers paired, only one appears in the app — Bluetooth host can saturate at 7 active links. Disconnect AirPods or other BT peripherals, then re-launch UCM.
What's next
Wireless misbehaving? See Bluetooth troubleshooting. Otherwise: verify everything works.