One-script, unofficial ALSA MIDI workaround by Altmido Labs.
Start here: https://altmido.com/labs/davinci-resolve-linux-midi/ GitHub is the source repository and issue tracker.
Some Linux builds of DaVinci Resolve contain the Fairlight MCU/HUI control
surface code but ship RtMidi with only its non-functional dummy backend. This
project provides a narrow compatibility library and starts DaVinci Resolve
with that library through LD_PRELOAD.
Our tests indicate that MIDI control-surface support has not simply been removed from DaVinci Resolve on Linux: the MCU/HUI implementation is present, but the examined builds request RtMidi's non-functional dummy backend instead of its ALSA Sequencer backend. As a result, Resolve normally reports no usable MIDI ports even though Linux and ALSA can see them.
This script makes Resolve select the functional ALSA backend at launch. It is
designed to work with any DaVinci Resolve installation that has the same RtMidi
ABI and backend-selection issue; it is not tied to one distribution or one
Resolve release. However, it has currently been tested only on Ubuntu 24.04
with the exact Resolve builds listed under Compatibility status.
Other Linux distributions and Resolve versions are expected to work, but are
not yet validated. If your configuration does not work, please
open a MIDI connection issue
and include your Linux distribution, exact Resolve version, and the output of
the script's check command.
This project is not affiliated with, endorsed by, or supported by Blackmagic Design, Mackie, or Behringer. Product names and trademarks belong to their respective owners.
-
Clone or extract this repository.
-
Open a terminal in the project directory and check the environment:
./davinci-resolve-midi-linux.sh check- Start DaVinci Resolve with MIDI enabled:
./davinci-resolve-midi-linux.sh runThe run command verifies and uses the standard precompiled compatibility
library. It does not require a compiler or development headers. The script does
not install or replace any file under /opt/resolve, /usr, or /etc and
never invokes sudo.
To return to the original behavior, close Resolve and start it normally.
davinci-resolve-linux-midi/
├── davinci-resolve-midi-linux.sh # the only command to run
├── README.md # beginner instructions
├── LICENSE
├── NOTICE
├── prebuilt/
│ └── linux-x86_64/
│ ├── BUILD-INFO # build provenance and binary properties
│ ├── librtmidi-davinci-resolve-alsa.so
│ └── SHA256SUMS # integrity check used by the launcher
├── THIRD_PARTY_NOTICES.md
└── src/ # source required to build the workaround
├── RtMidi.cpp
├── RtMidi.h
└── resolve-shim.exports
The optional locally compiled library is stored in build/, which Git ignores.
- DaVinci Resolve with its bundled
libc++.so.1andlibc++abi.so.1; - ALSA Sequencer available through
/dev/snd/seq; sha256sum, normally provided by the distribution's base system.
The standard shim was built in a Rocky Linux 8 container, has no embedded
RPATH or installation path, and requires no glibc symbol newer than
GLIBC_2.14. Its complete provenance is recorded in prebuilt/linux-x86_64/BUILD-INFO.
These are sufficient for the standard precompiled mode. To rebuild the shim from source, development components are also required:
- ALSA development headers;
- Clang with libc++ development headers;
nm,c++filt,readelf, andstringsfrom standard development tools.
The script detects these components instead of assuming a distribution or package manager. Typical package names contain:
| Distribution family | Components usually required |
|---|---|
| Debian/Ubuntu | clang, libc++-dev, libc++abi-dev, libasound2-dev, binutils |
| Fedora/RHEL/Rocky | clang, libcxx-devel, libcxxabi-devel, alsa-lib-devel, binutils |
| Arch Linux | clang, libc++, alsa-lib, binutils |
| openSUSE | clang, libc++-devel, alsa-devel, binutils |
Package names can vary with distribution release. These packages are needed
only for check-source, build, and run-source. The script reports the exact
missing component and never modifies the system automatically.
Users who prefer to compile the compatibility library locally can first check the additional requirements:
./davinci-resolve-midi-linux.sh check-sourceThen compile and run with the local result:
./davinci-resolve-midi-linux.sh run-sourceThe local build is checked for the exact two-symbol ABI boundary, Resolve's bundled libc++ dependencies, and the ALSA backend before Resolve starts.
Start every MIDI device before Resolve, then open:
Preferences -> Control Panels -> MIDI Audio Console
Select MCU or HUI and choose the surface's real MIDI input and output. Do not
select Midi Through in both directions unless the routing is deliberately
designed to prevent a feedback loop.
The examined Resolve 19 build can crash if the ALSA port count changes while it is running. Keep the MIDI topology stable and restart Resolve after connecting or disconnecting a device.
./davinci-resolve-midi-linux.sh check check the standard prebuilt mode
./davinci-resolve-midi-linux.sh run run with the standard prebuilt shim
./davinci-resolve-midi-linux.sh check-source check source-build requirements
./davinci-resolve-midi-linux.sh build build and verify a local shim
./davinci-resolve-midi-linux.sh run-source build and run with the local shim
./davinci-resolve-midi-linux.sh help show usage
Optional environment variables:
RESOLVE_BIN: DaVinci Resolve executable;RESOLVE_LIB_DIR: directory containing Resolve's bundled libc++ libraries;LIBCXX_INCLUDE_DIR: libc++ header directory ending inc++/v1for source builds;CXX: Clang C++ compiler command for source builds;BUILD_DIR: local source-build output directory.
| DaVinci Resolve build | Runtime result |
|---|---|
| Studio 19.0.0b.0025, Ubuntu 24.04 | ALSA MIDI port enumeration and bidirectional MIDI connection validated |
| Studio 21.0.4.0005, Ubuntu 24.04 | ALSA MIDI port enumeration and bidirectional MIDI connection validated |
The script is distribution-neutral, but no project can truthfully guarantee untested DaVinci Resolve builds, libc versions, or unusual packaging environments. Compatibility reports must always name the exact Resolve build and Linux distribution.
The precompiled and locally generated preload libraries export only:
RtMidiIn::openMidiApi(...);RtMidiOut::openMidiApi(...).
It translates Resolve's RTMIDI_DUMMY request to RtMidi's ALSA Sequencer
backend and hides only Resolve's own private RtMidi clients during enumeration.
Resolve retains its own RtMidi wrappers, constructors, destructors, and vtables.
The launcher script is Copyright 2026 Altmido. The Altmido script and documentation remain open source under Apache-2.0. Vendored RtMidi 2.1.1 files retain their upstream permissive license; see THIRD_PARTY_NOTICES.md.