The Fix isn't One-and-Done:
If you're on Zorin OS (or any Ubuntu-based distro running PipeWire) and REAPER won't receive MIDI from your USB controller — even though it shows up in Preferences — here's the fix:
- Install REAPER natively from reaper.fm (not Flatpak).
- Install
pipewire-jackanda2jmidid. - Create a launch script that starts
a2jmidid -ebefore REAPER, and launches REAPER withpw-jackin JACK audio mode. - Put that script in your
.desktopfile so the start menu does it automatically.
That's it. The rest of this article is the story of how we got there — because the "why" matters more than the "what" when the same problem comes back on your next install.
The Setup
I'm running Zorin OS 18.1 on an HP EliteDesk with a Ryzen 5 PRO, 32 GB RAM, PipeWire 1.0.5, and Wayland. My audio interface is a TI PCM2900C USB codec (M-Audio class — the kind that just works). My MIDI controller is an Akai MPK Mini Mk II. Nothing exotic. Nothing that should require a PhD in Linux audio routing to get working.
I had REAPER installed via Flatpak because that's the path of least resistance on Zorin — open the Software store, click install, done. The plugins scanned fine. The audio interface worked. The MPK showed up in REAPER's MIDI hardware preferences.
But no amount of pressing keys on the MPK triggered anything.
What Didn't Work (And Why)
The MPK transmitted MIDI correctly at the ALSA layer. The failure was downstream — in REAPER's MIDI input path.
This is the part that takes forever to diagnose, so let me save you the time.
The Flatpak REAPER
The Flatpak version of REAPER enumerated the MPK in its MIDI hardware list — the device was right there in reaper-midihw-linux.ini, labeled Midi-Bridge:AKAI MPK Mini Mk II at usb-0000:07:00-4-2- full speed:(capture_0) MPK Mini Mk II MIDI 1. It looked like it should work.
It didn't. The Midi-Bridge: prefix is the tell. That's PipeWire's built-in MIDI bridge, and on this host it advertises MIDI devices to REAPER but does not deliver events to track inputs. The device appears in the menu, you can select it, you can arm the track, you can press keys until your fingers bleed — nothing.
I verified the MPK was actually transmitting by running aseqdump -p 28:0 in a terminal. Note events poured out in real time. The hardware was fine. The ALSA layer was fine. The failure was between PipeWire's Midi-Bridge and REAPER's track input routing.
A pro-audio Linux specialist at Interfacing Linux put it bluntly:
"For the love of the Flying Spaghetti Monster, don't install Reaper from Flathub. It's not official, and the overwhelming number of issues people come to me with about their Reaper install have been solved with, 'Did you install Reaper using Flatpak?' Don't do that."
Meanwhile, a user on the Zorin Forum reported the identical symptom in November 2025 — on Zorin, with the same setup. That thread was auto-closed without a resolution.
The Native Install (ALSA Mode)
I uninstalled the Flatpak and installed REAPER natively from the reaper.fm tarball. Ran ./install-reaper.sh, pointed it at ~/REAPER. Clean install, no sandbox.
By default, REAPER's reaper.ini had linux_audio_mode=1 (ALSA mode) with alsa_indev=hw:CODEC and alsa_outdev=hw:CODEC. Audio worked. The PCM2900C was the default PipeWire sink and source. I could hear everything.
The MPK didn't even show up in REAPER's MIDI preferences consistently.
I tried switching the ALSA device from hw:CODEC to default (routing through pipewire-alsa instead of direct hardware access) — a fix I'd found on a blog post where someone got MIDI working in REAPER on Linux that way.
It didn't work here. The Midi-Bridge: prefix persisted in the MIDI cache no matter what audio backend I chose. REAPER-Linux always enumerates MIDI through PipeWire's bridge on this host.
Waveform Worked. That Was Both a Relief And A Clue.
Tracktion Waveform 13 (native deb install) saw the MPK immediately and routed MIDI correctly — no bridge, no wrapper, no fuss. Its log showed:
Found MIDI in: midiin_179269 ("MPK Mini Mk II MIDI 1") (enabled)
Waveform uses the ALSA sequencer directly and opens its own client port. It doesn't go through PipeWire's Midi-Bridge at all. That's why it works and REAPER doesn't.
I switched to Waveform as my primary DAW. It worked. But I'd already paid for REAPER, and I prefer its workflow — so I kept digging.
The Fix: a2jmidid + pw-jack + JACK Mode
PipeWire's built-in Midi-Bridge advertises devices but doesn't deliver events to REAPER's track inputs.
a2jmididcreates proper JACK-MIDI ports from ALSA sequencer devices — and REAPER's JACK MIDI engine can receive from those.
The solution is three components working together:
1. a2jmidid with hardware export
a2jmidid is an ALSA-to-JACK-MIDI bridge daemon. It's different from PipeWire's built-in Midi-Bridge. The critical flag is -e (or --export-hw), which exports hardware ports as JACK-MIDI ports. Without it, only software ports get bridged.
sudo apt-get install -y a2jmidid
When launched with pw-jack a2jmidid -e, the log confirms the MPK is exported:
Hardware ports will be exported.
port created: MPK Mini Mk II [28] (capture): [0] MPK Mini Mk II MIDI 1
port created: MPK Mini Mk II [28] (playback): [0] MPK Mini Mk II MIDI 1
Those are real JACK-MIDI ports. Not PipeWire Midi-Bridge phantom entries.
2. REAPER in JACK audio mode
Change linux_audio_mode in ~/.config/REAPER/reaper.ini from 1 (ALSA) to 0 (JACK):
linux_audio_mode=0
REAPER needs to be in JACK mode for its MIDI engine to use JACK-MIDI ports — which is what a2jmidid creates.
3. pw-jack as the launch wrapper
pw-jack wraps REAPER so it connects to PipeWire's JACK compatibility server instead of looking for a real JACK daemon. You need pipewire-jack installed:
sudo apt-get install -y pipewire-jack
The launch script
a2jmidid must be running before REAPER starts. I put it all in a wrapper script at ~/REAPER/launch-reaper.sh:
#!/bin/bash
pw-jack a2jmidid -e &
sleep 2
pw-jack /home/zorin/REAPER/reaper
Make it executable:
chmod +x ~/REAPER/launch-reaper.sh
The .desktop file
So the start menu launches the wrapper instead of the bare binary. At ~/.local/share/applications/reaper.desktop:
[Desktop Entry]
Name=REAPER
Comment=Digital Audio Workstation
Exec=/home/zorin/REAPER/launch-reaper.sh
Icon=reaper
Terminal=false
Type=Application
Categories=AudioVideo;Audio;AudioVideoEditing;
Launch REAPER from the menu. The MPK appears as a JACK-MIDI port. Select it on your track's MIDI input. Arm the track. Play.
It works.
Answers to Questions No One Has Asked (Yet)
Why does Waveform work and REAPER doesn't?
Waveform opens its own ALSA sequencer client port and reads MIDI directly from the kernel. REAPER-Linux, on the other hand, enumerates MIDI through whatever JACK/MIDI bridge is available. On PipeWire, that's PipeWire's Midi-Bridge — which advertises devices but doesn't deliver events to REAPER's track inputs. a2jmidid replaces that broken path with a working one.
Why not just use Waveform and forget REAPER?
You can. Waveform works out of the box. But if you prefer REAPER — and plenty of us do — this fix gets you there. There's no reason to compromise on your DAW because of a MIDI routing quirk.
Do I need qpwgraph?
Not for this fix. qpwgraph is a graphical patchbay for PipeWire — useful for routing audio between JACK applications, but a2jmidid handles the MIDI bridge automatically. Install it if you want to visualize the graph, but it's not required.
What about the Flatpak version?
Uninstall it. The Flatpak sandbox adds an additional layer of isolation that compounds the Midi-Bridge problem. Even if you could get a2jmidid running inside the sandbox (you can't, easily), the sandbox's Midi-Bridge path is fundamentally broken for REAPER on PipeWire. Go native.
Will this break my desktop audio?
No. pw-jack connects REAPER to PipeWire's JACK server, which coexists with PulseAudio/PipeWire desktop audio. Your browser, system sounds, and other apps continue to work. You don't need to kill PipeWire or start a real JACK server.
Does the audio interface matter?
No. This fix is about MIDI routing, not audio. Your audio interface works through whatever backend REAPER is using (JACK via PipeWire in this case). The PCM2900C, a Focusrite Scarlett, a Behringer UMC — whatever you have, the audio side is unaffected.
Troubleshooting Quicklist
- MPK doesn't appear in REAPER at all: Make sure
a2jmidid -eis running before REAPER launches. Check withpgrep -af a2jmidid. - MPK appears but still no sound: Confirm REAPER is in JACK mode (
linux_audio_mode=0inreaper.ini). If it's in ALSA mode, the JACK-MIDI ports won't be used. a2jmididfails with "Cannot create jack client": It needs to be launched withpw-jackwrapping it, so it connects to PipeWire's JACK server. Runpw-jack a2jmidid -e, not barea2jmidid -e.- REAPER launches but no audio: Check that
pipewire-jackis installed and PipeWire is running (pw-cli info 0should return a version string). - Phantom MIDI devices with weird names: A Cockos forum user noted that when REAPER is set to JACK with
pipewire-jack, you may see a ton of strangely-named MIDI devices. The fix: set the last MIDI input and output to 0 in REAPER's MIDI preferences to suppress the phantom ports. a2jmididlog says "Hardware ports will not be exported": You forgot the-eflag. Usea2jmidid -eora2jmidid --export-hw.
The Launch Script (Copy-Paste Ready)
If you just want the whole thing in one block:
# Install prerequisites
sudo apt-get install -y pipewire-jack a2jmidid
# Install REAPER natively (download from reaper.fm)
tar xJf reaper777_linux_x86_64.tar.xz
cd reaper_linux_x86_64
./install-reaper.sh --quiet --install ~/REAPER
# Flatten the double-nested install (optional but satisfying)
cd ~/REAPER && mv REAPER/* . && rmdir REAPER
# Switch to JACK mode
sed -i 's/linux_audio_mode=1/linux_audio_mode=0/' ~/.config/REAPER/reaper.ini
# Create the launch wrapper
cat > ~/REAPER/launch-reaper.sh << 'SCRIPT'
#!/bin/bash
pw-jack a2jmidid -e &
sleep 2
pw-jack ~/REAPER/reaper
SCRIPT
chmod +x ~/REAPER/launch-reaper.sh
# Create the .desktop entry
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/reaper.desktop << 'DESKTOP'
[Desktop Entry]
Name=REAPER
Comment=Digital Audio Workstation
Exec=/home/zorin/REAPER/launch-reaper.sh
Icon=reaper
Terminal=false
Type=Application
Categories=AudioVideo;Audio;AudioVideoEditing;
DESKTOP
update-desktop-database ~/.local/share/applications/
Launch from your start menu. Play your controller. It works.
Why This Article Exists
There's a Zorin Forum thread from November 2025 where someone reported this exact problem. It was auto-closed after 90 days with no resolution. There's an Interfacing Linux article that says "don't use the Flatpak" but doesn't provide the full fix for the native install. There are Cockos forum threads about PipeWire MIDI quirks that are fragmented across years and don't converge on a single answer.
This is that single answer. For Zorin OS, for PipeWire, for REAPER, for a USB MIDI controller that works perfectly at the ALSA level but somehow doesn't reach the DAW.
If you landed here from a search engine and it saved you three hours of aseqdump and aconnect and deleting MIDI cache files and relaunching REAPER in four different configurations — good. That was the point.
You got the UFO's too, Johnny Law? I reckon be some strange days, these.
Comments
Share your thoughts on this post. All comments are moderated before publication.
Leave a comment