Seven lines of code and it surprisingly works fine
So here’s the deal. I have severe vision loss and, because doing anything visual can be frustratingly tiring for me at times, I decided to learn to play the keyboard. I wanted to learn how to make my own music for my upcoming hacking game, Socially Distant. To make matters worse, I use Linux.
A word on Linux audio production
It’s hell, unless you know your way around PipeWire and can troubleshoot ALSA. If you’re like me and your DAW of choice happens to be FL Studio because you’ve developed muscle memory, be prepared to mess with Wine as well.
This is my way of saying: I don’t want to be told “just use Windows” or “just use a Mac” because “the experience is better.” I know, but I don’t enjoy using either operating system because of my vision loss. The reality is I use KDE Plasma, I rely on Plasma, and I work on Plasma as a living - so I’m required to use Linux. So we’ll make it work, and we’ll be happy, okay?
My hardware
I use a Novation MiniNova synthesizer and an ART Project Series USB II audio interface. I chose the Novation synth because it allows me to play the keyboard without having to interact with a blurry DAW. To an extent I can also create custom sounds, but it’s limited. The audio interface is there because my motherboard has a really shitty sound chip and a line-in jack with a noise floor so high it might give some people sensory overload. It’s rough.
Both the synth and the audio interface have quirks.
MIDI on Linux
MIDI through PipeWire works. You can use it.
Wine will even work with it, and your MIDI devices will show up in FL Studio (and other Windows DAWs) just fine. They’ll even work.
Unfortunately this banks on the specific MIDI device in question being compatible with the kernel. My audio interface is, and the MiniNova is not.
What limits me
I could use my synthesizer totally fine over oldschool 5-pin DIN cables, and that’s what I’ve been doing since the day I got the audio interface. I can play/record notes, send control commands, and all the basic MIDI stuff that you’d expect to work, works.
But that gosh darned LCD. If you want to do anything super advanced with the MiniNova, you need to be able to read it. The alternative is having access to Novation’s software, which won’t run on Linux. Even though it will launch under Wine if you download an older version of it, I was unable to get it to actually talk to the synth.
There is however a cross-platform tool I decided to use called NovaEditor that does indeed run natively on Linux, and I did ultimately decide to use it as a substitute for not being able to read the LCD screen. It however can’t communicate with the MiniNova correctly over my audio interface.
If I were on Windows then NovaEditor would be able to see the MiniNova perfectly fine as a MIDI device, assuming I’d installed Novation’s driver and connected the synth to my PC over USB. But that’s not going to happen on Linux natively, there is no driver, and the kernel won’t talk to the synth out of the box.
In this article we’ll fix that. By the end of it you’ll be able to use the MiniNova’s USB MIDI interface on Linux without needing an external audio interface. If you so choose, you will even be able to use NovaEditor with it.
SysEx
The reason I can’t use my audio interface with NovaEditor, but can use it with FL Studio, is because of a part of MIDI called system-exclusive messages, or SysEx.
It turns out that some audio interfaces just don’t speak SysEx well. Mine in particular seems to let some SysEx messages through, but only if the data is under a certain size. I’m sure that if I had a different audio interface, its internal hardware may be able to handle large SysEx messages better, but I have what I have.
The MiniNova uses SysEx for everything from firmware updates, to backing up instrument data, to changing the waveform used by an oscillator. Without it, you can only do basic MIDI operations like playing notes or switching to a new instrument patch.
MiniNova over USB
There is conflicting information online as to whether the MiniNova’s USB interface is class-compliant. I’ll set the record straight: it isn’t. It does not support USB MIDI. Instead, the MiniNova (and some other Novation synths) accepts raw MIDI data over USB. This article from the Focusrite development team goes over the spotty Linux support for many of their devices, including the MiniNova and UltraNova.
That quite literally is what I meant earlier by the MiniNova having quirks. In fact, what solved my issue is patching the kernel with an entry in its quirks table. But before we do that, here’s some stuff you should know about the MiniNova that I learned.
In normal operation (just turning the synth on normally), if connected via USB, it shows up like this:
~/P/W/p/s/c/blog ❯❯❯ lsusb | grep ovation master ✭
Bus 005 Device 006: ID 1235:001e Focusrite-Novation MiniNova
~/P/W/p/s/c/blog ❯❯❯ master ✭
It has a vendor/product ID of 1235:001e.
If you shut off the synth, then hold “PAGE <” + “PAGE >” + “OK” at the same time, then power on the synth in USB mode while continuing to hold it down, it’ll boot into firmware update mode.
If you’re blind like me and can’t read the LCD, you’ll know it’s in firmware update mode because only the LCD lights up. None of the pads or wheels light up, nor the effects/arp switch indicator. It also shows up with a different product ID:
~/P/W/p/s/c/blog ❯❯❯ lsusb | grep ovation master ✭
Bus 005 Device 006: ID 1235:001e Focusrite-Novation MiniNova
~/P/W/p/s/c/blog ❯❯❯ master ✭
Note the 011e instead of 001e. If you list out the MIDI devices ALSA can see, you’ll see it in there.
~/P/W/p/s/c/blog ❯❯❯ lsusb | grep ovation master ✭
Bus 005 Device 006: ID 1235:001e Focusrite-Novation MiniNova
~/P/W/p/s/c/blog ❯❯❯ master ✭
This suggests to me you could theoretically do a manual firmware update using Linux natively without needing to patch the kernel. I’m not willing to try that and risk bricking an $800 musical instrument though.
What you may notice though is that, when booted normally, it’ll show up as a USB device under lsusb but ALSA won’t see it as a MIDI device. That’s because ALSA is unaware it can just rawdog MIDI instead of having to wrap it in USB packets.
So let’s fix that.
Patching the kernel
First, clone the kernel.
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
You’ll need to make sure you have the kernel’s build dependencies installed through your distro’s package manager. I trust that if you’re comfortable compiling the Linux kernel just to get a synthesizer to work over USB, and somehow stunbled upon this article trying to figure out how, that you can work out how to do that. But for Fedora:
sudo dnf install bc make gcc flex bison openssl-devel elfutils-libelf-devel ncurses-devel pahole rpm-build
You’ll then want to navigate into the cloned kernel sources. Then, you’re looking for sound/usb/quirks-table.h. We’re going to edit that. Insert the following code where it makes sense:
{
USB_DEVICE(0x1235, 0x001e),
QUIRK_DRIVER_INFO {
/* .vendor_name = "Novation", */
/* .product_name = "Mininova", */
QUIRK_DATA_RAW_BYTES(0)
}
},
I found this quirk entry from this AskUbuntu thread where one commenter claims they have submitted the patch and that it will likely be released in kernel 7.1. I however didn’t see any evidence that the code was already there.
Anyway, save and close that file. In the repository root, run:
make menuconfig
When the menu loads, tab over to Save and hit Enter. Generally if you don’t know what you’re doing, you probably don’t need to change any of the default settings. But if you feel like it, you can add some personal flair to the version string under General options. I decided to do that for my kernel build since I can’t read GRUB. You may also want to compile the kernel as a real-time kernel if you’re serious about low-latency audio, but keep in mind you may impact performance for non-audio-prod tasks. Whatever you fuck with in the menu though, don’t forget to save your changes.
Then run:
make -j$(nproc)
That’s going to take a while. I recommend having a CPU made within the current century.
When it’s done, install the kernel and its modules:
sudo make modules_install
sudo make install
Assuming it all went well, you should now have a new option in your boot loader. Make sure to reboot.
In my case I use GRUB and the new kernel didn’t appear at the top of the list. I had to change the default boot entry, and how you do that depends on what your bootloader is, so is an exercise to the reader. But once you’ve booted, you can verify which kernel you’re on with uname -a.
~/P/f/linux ❯❯❯ uname -a master ✱
Linux red-crown 7.1.0-rc6-vicious-delicious-00063-gba3e43a9e601-dirty #2 SMP PREEMPT_RT Wed Jun 3 19:41:37 EDT 2026 x86_64 GNU/Linux
~/P/f/linux ❯❯❯ master ✱
I added “vicious-delicious” to my kernel version string as a reference to Infected Mushroom (my favorite artist), their Vicious Delicious album
~/P/f/linux ❯❯❯ amidi -l master ✱
Dir Device Name
IO hw:0,0,0 MiniNova MIDI 1
IO hw:5,0,0 USB II Audio Interface 2in/2out
~/P/f/linux ❯❯❯ lsusb | grep ovation master ✱
Bus 005 Device 008: ID 1235:001e Focusrite-Novation MiniNova
~/P/f/linux ❯❯❯
So yeah.
After a quick kernel patch, I can now completely ignore that evil blurry blue rectangle I haven’t been able to read.
If you are in the same situation I’m in, particularly with respect to vision impairment, then I can’t recommend NovaEditor enough. I’m not sponsored by them and have no obligation to say that. I haven’t assessed its support for screen readers yet, but it is worth noting the synthesizer itself doesn’t exactly have text-to-speech either. I found the user interface relatively easy to read and navigate compared to FL Studio and especially compared to any VST instrument I’ve ever tried to use. Although I wish there was a FOSS tool for editing MiniNova patches and backing the device up, NovaEditor is at least worth its price for what it does for me. So I’m glad that it exists.
Dear Focusrite though, blue backlights… No. Gotta gime that crisp amber text on a black background. My eyes will thank you. Oh well…