Subject: USB MIDI controllers don't work before loading snd-seq manually

From: Denys Nykula <[email-masked]>
Date: Thu, 19 Mar 2026 22:03:40 +0200

I have two USB MIDI controllers: 15e4:003c Numark DJ2GO2 Touch and 
09e8:0045 AKAI MPK Mini Mk II - that I use for making beats with free 
software such as Mixxx, LMMS and OpenMPT.

When using Windows or Debian, in order to play, I just plug both 
controllers in and select them in the UI of the software. On Alpine 
without additional configuration, the software doesn't list them.

Earlier I thought Alpine didn't build support for USB MIDI controllers, 
but after installing Alpine again yesterday and reading more about Linux 
MIDI, in particular the article 
https://mclarenlabs.com/blog/2018/07/03/linux-midi-cheatsheet/ and the 
error messages from the commands it mentions, I tried `doas modprobe 
snd-seq`, and my controller started working in Mixxx.

How do I automate loading of snd-seq (it's ALSA Sequencer, right?) when 
I connect any MIDI controller or when the netbook boots with a 
controller already connected? Can Alpine load snd-seq by default, or 
make it work the way other distributions do it if they do it differently?

If it matters, this Alpine installation currently has sway, seatd, eudev 
and pipewire-pulse.

---

From: Konstantin Kulikov <[email-masked]>
Date: Fri, 20 Mar 2026 02:14:04 +0300

You can add snd-seq to /etc/modules to make it autoload at boot. See also
/etc/init.d/modules.

---

From: Denys Nykula <[email-masked]>
Date: Fri, 20 Mar 2026 01:47:50 +0200

Konstantin, thanks for the suggestion. Always loading a module at boot 
is a usable workaround for me personally, and I hope it will help other 
newcomers running into the same issue. I wonder though, what prevents 
the module from loading automatically when the device is connected. I 
see a line about snd/seq in /usr/lib/udev/rules.d/50-udev-default.rules. 
Is there a lazy-loading mechanism for the ALSA sequencer in 
distributions with upstream udev, but not in Alpine with eudev? I'll add 
a note to the ALSA page on the wiki for now.

---

From: Konstantin Kulikov <[email-masked]>
Date: Fri, 20 Mar 2026 12:27:04 +0300

I just looked at void linux and it loads every module that brings static
devnode (/dev/snd/seq is a static devnode) like this:

# cat /etc/runit/core-services/01-static-devnodes.sh
for f in $(kmod static-nodes -f devname 2>/dev/null|cut -d' ' -f1); do
        modprobe -bq $f 2>/dev/null
done

I think the rule you saw in udev only touches permissions, not actual
module loading.