Getting started
Install on Linux
Install Universal Controller MIDI on Linux using AppImage, .deb, or tarball. Covers udev rules, ALSA MIDI, and PipeWire/JACK routing.
Updated
On Linux, Universal Controller MIDI ships three ways — AppImage, .deb, and a generic tarball — each targeting glibc 2.31+ (Ubuntu 20.04, Debian 11, Fedora 34, or newer). The AppImage is the fastest path: ~600 ms cold start, zero package-manager state, runs identically on X11 and Wayland.
Which format for which distro?
If you're not sure which to grab, here's the cheat sheet. All three contain identical app binaries — only the packaging differs.
| Distro | Recommended | Udev rule | Notes |
|---|---|---|---|
| Ubuntu 22.04 / 24.04 | .deb | auto | Cleanest desktop integration. |
| Debian 12 | .deb | auto | Same as Ubuntu. |
| Pop!_OS, Mint | .deb | auto | Works as-is. |
| Fedora 39+ | AppImage | manual | RPM coming in v1.5. |
| Arch / Manjaro | AppImage or AUR | manual | AUR package ucm-bin handles udev. |
| NixOS | tarball | via flake | Flake at github:aidxn/ucm-nix. |
| SteamOS 3 / Bazzite | AppImage | manual | Read-only root — install to ~/Apps. |
AppImage — the easy path
Download UniversalControllerMIDI-x86_64.AppImage, mark it executable, and run it. No package manager, no root.
chmod +x UniversalControllerMIDI-x86_64.AppImage
./UniversalControllerMIDI-x86_64.AppImage The AppImage self-contains Python, Qt, and the MIDI bridge. It runs on X11 and Wayland (Qt 6 native). Average cold start: ~600 ms.
.deb package
Debian, Ubuntu, Pop!_OS, Mint — grab the .deb and install with apt:
sudo apt install ./universal-controller-midi_X.Y.Z_amd64.deb The package writes a desktop entry, a launcher icon, and a udev rule for unprivileged HID access at /etc/udev/rules.d/70-universal-controller.rules. Reload udev after install:
sudo udevadm control --reload-rules && sudo udevadm trigger Hand-write the udev rule
If you're on AppImage or tarball you need to drop the rule yourself. Same content the .deb ships — copy-paste this verbatim.
sudo tee /etc/udev/rules.d/70-universal-controller.rules <<'EOF'
# Sony DualSense (PS5)
KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0660", TAG+="uaccess"
# Sony DualShock 4 (PS4) — both revisions
KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", MODE="0660", TAG+="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", MODE="0660", TAG+="uaccess"
# Xbox Wireless Controller (BT)
KERNEL=="hidraw*", ATTRS{idVendor}=="045e", MODE="0660", TAG+="uaccess"
# Nintendo Switch Pro
KERNEL=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="2009", MODE="0660", TAG+="uaccess"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger Tarball — for Arch, Fedora, NixOS, anything else
Extract anywhere and symlink the binary:
tar -xzf universal-controller-midi-X.Y.Z.tar.gz -C ~/.local/share/
ln -sf ~/.local/share/universal-controller-midi/bin/ucm ~/.local/bin/ucm ALSA, PipeWire, JACK
The bridge exposes itself as a standard ALSA MIDI sequencer client. PipeWire bridges it to JACK automatically — Bitwig, Reaper, Ardour all just see it. List clients with:
# List ALSA seq clients
aconnect -l
# Send a test note to the bridge's input port
aplaymidi -p "Universal Controller:0" /usr/share/sounds/sf2/test.mid
# PipeWire view — see UCM as a JACK-side node
pw-cli list-objects | grep -i "universal" What if it doesn't work?
Linux installs fail in predictable ways. Five usual suspects:
- "Permission denied" opening hidraw — udev rule missing or not reloaded. Run the
udevadmcommands above, then unplug + replug the controller. - AppImage exits with "libfuse.so.2 not found" — Ubuntu 24.04 dropped libfuse2 by default. Install with
sudo apt install libfuse2t64. - App launches, no ALSA client appears — kernel built without
CONFIG_SND_SEQUENCER. Rare, but checklsmod | grep snd_seq. Load withsudo modprobe snd_seq. - PipeWire shows the client but Bitwig doesn't see it — Bitwig's MIDI scan runs once at startup. Restart Bitwig after launching UCM, or use the "Rescan MIDI" button under Settings → Controllers.
- Wayland: app window invisible on second monitor — Qt 6 fractional scaling bug on KDE 5.27. Either upgrade to KDE 6.0+, or launch with
QT_SCALE_FACTOR=1 ./UniversalControllerMIDI.AppImage.
What's next
Go to first launch + onboarding, then connect a controller over USB.