You are not logged in.
So, I've been having one heck of a time trying to get a control surface for a DAW fully working under Arch. Specifically:
Bus 003 Device 012: ID 1397:00b1 BEHRINGER International GmbH X-Touch
It only partially works, in that many button presses work and are reflected properly in the DAW (Reaper). However, there is no feedback, so if I move a fader, it will move it in the DAW, but then it will reset because it didn't get confirmation from the DAW. It makes it pretty useless.
I tested it with Fedora 41 on another box and it works right away, I just set it up in Reaper and it gets recognized, lights up, and the dials and faders work perfectly. For reference, this is the journal output from Fedora when it's connected, I included the kernel version at the top.
Linux dragonbreath 6.12.10-200.fc41.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jan 17 18:05:24 UTC 2025 x86_64 GNU/Linux
Mar 12 18:39:42 dragonbreath kernel: usb 1-1.2: new high-speed USB device number 15 using ehci-pci
Mar 12 18:39:42 dragonbreath kernel: usb 1-1.2: New USB device found, idVendor=1a40, idProduct=0101, bcdDevice= 1.00
Mar 12 18:39:42 dragonbreath kernel: usb 1-1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
Mar 12 18:39:42 dragonbreath kernel: usb 1-1.2: Product: USB 2.0 Hub [MTT]
Mar 12 18:39:42 dragonbreath kernel: hub 1-1.2:1.0: USB hub found
Mar 12 18:39:42 dragonbreath kernel: hub 1-1.2:1.0: 4 ports detected
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: new full-speed USB device number 16 using ehci-pci
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: New USB device found, idVendor=1397, idProduct=00b1, bcdDevice= 1.22
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: Product: X-Touch
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: Manufacturer: BEHRINGER
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: SerialNumber: 0A-BF-9E
Mar 12 18:39:44 dragonbreath kernel: usb 1-1.2.3: Quirk or no altset; falling back to MIDI 1.0
Mar 12 18:39:44 dragonbreath mtp-probe[5494]: checking bus 1, device 16: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.3"
Mar 12 18:39:44 dragonbreath mtp-probe[5494]: bus: 1, device: 16 was not an MTP device
Mar 12 18:39:44 dragonbreath mtp-probe[5501]: checking bus 1, device 16: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.3"
Mar 12 18:39:44 dragonbreath mtp-probe[5501]: bus: 1, device: 16 was not an MTP device
For comparison, this was the initial journal output from Arch:
Linux toothless 6.13.6-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 07 Mar 2025 20:19:00 +0000 x86_64 GNU/Linux
Mar 12 19:22:42 toothless kernel: usb 3-6: USB disconnect, device number 9
Mar 12 19:22:42 toothless kernel: usb 3-6.3: USB disconnect, device number 10
Mar 12 19:22:44 toothless kernel: usb 3-6: new high-speed USB device number 11 using xhci_hcd
Mar 12 19:22:44 toothless kernel: usb 3-6: New USB device found, idVendor=1a40, idProduct=0101, bcdDevice= 1.00
Mar 12 19:22:44 toothless kernel: usb 3-6: New USB device strings: Mfr=0, Product=1, SerialNumber=0
Mar 12 19:22:44 toothless kernel: usb 3-6: Product: USB 2.0 Hub [MTT]
Mar 12 19:22:44 toothless kernel: hub 3-6:1.0: USB hub found
Mar 12 19:22:44 toothless kernel: hub 3-6:1.0: 4 ports detected
Mar 12 19:22:46 toothless kernel: usb 3-6.3: new full-speed USB device number 12 using xhci_hcd
Mar 12 19:22:46 toothless kernel: usb 3-6.3: New USB device found, idVendor=1397, idProduct=00b1, bcdDevice= 1.22
Mar 12 19:22:46 toothless kernel: usb 3-6.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 12 19:22:46 toothless kernel: usb 3-6.3: Product: X-Touch
Mar 12 19:22:46 toothless kernel: usb 3-6.3: Manufacturer: BEHRINGER
Mar 12 19:22:46 toothless kernel: usb 3-6.3: SerialNumber: 0A-BF-9E
Mar 12 19:22:46 toothless kernel: usb 3-6.3: Quirk or no altset; falling back to MIDI 1.0
Mar 12 19:22:46 toothless mtp-probe[1806]: checking bus 3, device 12: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.3"
Mar 12 19:22:46 toothless mtp-probe[1806]: bus: 3, device: 12 was not an MTP device
Mar 12 19:22:46 toothless (udev-worker)[1805]: controlC1: Process '/usr/bin/alsactl restore 1' failed with exit code 99.
Mar 12 19:22:46 toothless mtp-probe[1808]: checking bus 3, device 12: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.3"
Mar 12 19:22:46 toothless mtp-probe[1808]: bus: 3, device: 12 was not an MTP device
alsactl failing with 99 seems to mean the hardware wasn't recognized, but I'm guessing it still gets initialized to a default, which is why the MIDI over USB ports can be seen, even if they don't function properly.
I did make sure I had the proper pro-audio packages installed for hardware support, like alsa-firmware, sof-firmware, portmidi, and a2jmidid, and of course all the relevant pipewire packages. I did a comparison best I could between Fedora and Arch to see if it was a package difference, but as far as I can tell, they've got the same general packages installed for audio.
What I found interestering is that in Fedora 41, their udev rule has a bit of a diff:
Fedora 41:/lib/udev/rules.d/90-alsa-restore.rules lines 27-28
TEST!="/etc/alsa/state-daemon.conf", RUN+="/usr/sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main restore $env{ALSA_CARD_NUMBER}"
TEST=="/etc/alsa/state-daemon.conf", RUN+="/usr/sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main nrestore $env{ALSA_CARD_NUMBER}"
Arch:/lib/udev/rules.d/90-alsa-restore.rules lines 27-28
TEST!="/etc/alsa/state-daemon.conf", RUN+="/usr/bin/alsactl restore $env{ALSA_CARD_NUMBER}"
TEST=="/etc/alsa/state-daemon.conf", RUN+="/usr/bin/alsactl nrestore $env{ALSA_CARD_NUMBER}"
/etc/alsactl.conf is just a simple check:
#
# ALSA library configuration file for alsactl tool
# (/usr/share/alsa tree is not necessary for alsactl)
#
ctl.hw {
@args [ CARD ]
@args.CARD {
type string
default "0"
}
type hw
card $CARD
}
Fedora also has /etc/alsa/state-daemon.conf so alsactl runs in daemon mode. Also /usr/share/alsa on both are nearly identical, with the extra firmware directory in Arch.
/lib/alsa/init/ contains the following (also not on Arch):
drwxr-xr-x. 1 root root 68 Jan 24 12:10 .
drwxr-xr-x. 1 root root 8 Nov 13 16:00 ..
-rw-r--r--. 1 root root 1808 Nov 13 16:00 00main
-rw-r--r--. 1 root root 1341 Nov 13 16:00 ca0106
-rw-r--r--. 1 root root 10866 Nov 13 16:00 default
-rw-r--r--. 1 root root 1494 Nov 13 16:00 hda
-rw-r--r--. 1 root root 391 Nov 13 16:00 help
-rw-r--r--. 1 root root 932 Nov 13 16:00 info
-rw-r--r--. 1 root root 10699 Nov 13 16:00 test
These are mainly just definitions to set up ALSA.
On a lark, I copied the config files over to arch and temporarily changed the udev to Fedora's, and Arch didn't error when the control surface was turned on:
Mar 12 18:59:28 toothless kernel: usb 3-9: reset full-speed USB device number 5 using xhci_hcd
Mar 12 18:59:29 toothless kernel: usb 3-9: reset full-speed USB device number 5 using xhci_hcd
Mar 12 18:59:46 toothless kernel: usb 3-6: new high-speed USB device number 11 using xhci_hcd
Mar 12 18:59:46 toothless kernel: usb 3-6: New USB device found, idVendor=1a40, idProduct=0101, bcdDevice= 1.00
Mar 12 18:59:46 toothless kernel: usb 3-6: New USB device strings: Mfr=0, Product=1, SerialNumber=0
Mar 12 18:59:46 toothless kernel: usb 3-6: Product: USB 2.0 Hub [MTT]
Mar 12 18:59:46 toothless kernel: hub 3-6:1.0: USB hub found
Mar 12 18:59:46 toothless kernel: hub 3-6:1.0: 4 ports detected
Mar 12 18:59:48 toothless kernel: usb 3-6.3: new full-speed USB device number 12 using xhci_hcd
Mar 12 18:59:48 toothless kernel: usb 3-6.3: New USB device found, idVendor=1397, idProduct=00b1, bcdDevice= 1.22
Mar 12 18:59:48 toothless kernel: usb 3-6.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 12 18:59:48 toothless kernel: usb 3-6.3: Product: X-Touch
Mar 12 18:59:48 toothless kernel: usb 3-6.3: Manufacturer: BEHRINGER
Mar 12 18:59:48 toothless kernel: usb 3-6.3: SerialNumber: 0A-BF-9E
Mar 12 18:59:48 toothless kernel: usb 3-6.3: Quirk or no altset; falling back to MIDI 1.0
Mar 12 18:59:48 toothless mtp-probe[1925]: checking bus 3, device 12: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.3"
Mar 12 18:59:48 toothless mtp-probe[1925]: bus: 3, device: 12 was not an MTP device
Mar 12 18:59:48 toothless mtp-probe[1932]: checking bus 3, device 12: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.3"
Mar 12 18:59:48 toothless mtp-probe[1932]: bus: 3, device: 12 was not an MTP device
Pretty much identical to Fedora, but same problem as before, it doesn't really work on Arch.
I did all the sanity checks, added myself to the audio group then I gave /dev/midi1 full read/write permissions, but it wasn't a permission issue. Both Fedora and Arch have it set as such:
crw-rw----+ 1 root audio 14, 18 Mar 12 19:22 /dev/midi1
Tried different cables, different ports, no hubs, Reaper wasn't showing any errors on either machine.
Just for good measure, here's the output of a couple relevant commands:
[higgins@toothless ~]$ aconnect -i
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
client 20: 'X-Touch' [type=kernel,card=1]
0 'X-Touch X-TOUCH_INT'
1 'X-Touch X-TOUCH_EXT'
[higgins@toothless ~]$ lsmod | grep usb
snd_usb_audio 557056 4
snd_usbmidi_lib 49152 1 snd_usb_audio
snd_ump 40960 1 snd_usb_audio
snd_rawmidi 57344 3 snd_seq_midi,snd_usbmidi_lib,snd_ump
cros_usbpd_charger 24576 0
cros_usbpd_logger 16384 0
cros_usbpd_notify 20480 1 cros_usbpd_charger
btusb 81920 0
btrtl 32768 1 btusb
btintel 69632 1 btusb
btbcm 24576 1 btusb
btmtk 32768 1 btusb
snd_hwdep 20480 2 snd_usb_audio,snd_hda_codec
bluetooth 1097728 38 btrtl,btmtk,btintel,btbcm,bnep,btusb,rfcomm
snd_pcm 200704 16 snd_soc_avs,snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,soundwire_intel,snd_sof,snd_sof_intel_hda_common,snd_compress,snd_sof_intel_hda_generic,snd_soc_core,snd_sof_utils,snd_hda_core,snd_pcm_dmaengine
snd 155648 25 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_sof,snd_timer,snd_compress,snd_soc_core,snd_ump,snd_pcm,snd_hda_codec_idt,snd_rawmidi
usbnet 61440 3 cdc_mbim,cdc_ncm,cdc_ether
mc 90112 5 videodev,snd_usb_audio,videobuf2_v4l2,uvcvideo,videobuf2_common
mii 16384 1 usbnet
usbhid 86016 1 hid_logitech_hidpp
usb_storage 90112 1 uas
For reference, this is the same under Fedora:
higgins@dragonbreath:/etc/alsa$ aconnect -i
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
client 32: 'X-Touch' [type=kernel,card=4]
0 'X-Touch X-TOUCH_INT'
1 'X-Touch X-TOUCH_EXT'
higgins@dragonbreath:/etc/alsa$ lsmod | grep usb
snd_usb_audio 614400 3
snd_usbmidi_lib 57344 1 snd_usb_audio
snd_ump 49152 1 snd_usb_audio
snd_hwdep 20480 2 snd_usb_audio,snd_hda_codec
snd_rawmidi 57344 3 snd_seq_midi,snd_usbmidi_lib,snd_ump
mc 90112 1 snd_usb_audio
snd_pcm 196608 5 snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,snd_hda_core
snd 159744 34 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_ump,snd_pcm,snd_rawmidi
I don't know if I'm missing something obvious, but I've tried a lot of digging trying to find a solution. The relevant Arch Wiki pages on MIDI focuses mainly on MIDI files, and other audio pages don't have a lot about pipewire, instead referencing JACK or even PulseAudio more often. There might've been one I missed, I dunno.
At this point I'm just searching for a hint on where to look next. If I need to grab more info from a specific place, would be happy to do it. Really would like to get this hardware working on my system. Thanks!
Last edited by higginsdragon (2025-03-13 18:08:43)
Offline
Found a new development, it the MIDI over USB works with another audio library than JACK (well pipewire-jack specifically.) Slightly more annoying development, almost everything useful relies on pipewire-jack.
Offline
Just some more hopefully useful information. From Arch (PW 1.40):
[higgins@toothless pipewire]$ pw-cli info 48
id: 48
permissions: r-xm-
type: PipeWire:Interface:Port/3
direction: "input"
* properties:
* format.dsp = "32 bit raw UMP"
* object.path = "alsa:seq:default:client_16:playback_0"
* port.name = "X-Touch X-TOUCH_INT (playback)"
* port.alias = "X-Touch:X-Touch X-TOUCH_INT"
* port.group = "client_16"
* api.alsa.card = "0"
* port.id = "1"
* port.physical = "true"
* port.terminal = "true"
* port.direction = "in"
* node.id = "46"
* object.id = "48"
* object.serial = "188"
* params: (6)
* 3 (Spa:Enum:ParamId:EnumFormat) r-
* 6 (Spa:Enum:ParamId:Meta) r-
* 7 (Spa:Enum:ParamId:IO) r-
* 4 (Spa:Enum:ParamId:Format) -w
* 5 (Spa:Enum:ParamId:Buffers) --
* 15 (Spa:Enum:ParamId:Latency) rw
[higgins@toothless pipewire]$ pw-cli info 49
id: 49
permissions: r-xm-
type: PipeWire:Interface:Port/3
direction: "output"
* properties:
* format.dsp = "32 bit raw UMP"
* object.path = "alsa:seq:default:client_16:capture_0"
* port.name = "X-Touch X-TOUCH_INT (capture)"
* port.alias = "X-Touch:X-Touch X-TOUCH_INT"
* port.group = "client_16"
* api.alsa.card = "0"
* port.id = "1"
* port.physical = "true"
* port.terminal = "true"
* port.direction = "out"
* node.id = "46"
* object.id = "49"
* object.serial = "189"
* params: (6)
* 3 (Spa:Enum:ParamId:EnumFormat) r-
* 6 (Spa:Enum:ParamId:Meta) r-
* 7 (Spa:Enum:ParamId:IO) r-
* 4 (Spa:Enum:ParamId:Format) -w
* 5 (Spa:Enum:ParamId:Buffers) --
* 15 (Spa:Enum:ParamId:Latency) rw
Fedora (working, PW 1.27) comparison:
higgins@dragonbreath:/usr/share/pipewire$ pw-cli info 73
id: 73
permissions: r-xm-
type: PipeWire:Interface:Port/3
direction: "input"
* properties:
* format.dsp = "8 bit raw midi"
* object.path = "alsa:seq:default:client_32:playback_0"
* port.name = "X-Touch 4:(playback_0) X-Touch X-TOUCH_INT"
* port.alias = "X-Touch:X-Touch X-TOUCH_INT"
* port.group = "client_32"
* api.alsa.card = "4"
* port.id = "1"
* port.physical = "true"
* port.terminal = "true"
* port.direction = "in"
* node.id = "49"
* object.id = "73"
* object.serial = "92"
* params: (6)
* 3 (Spa:Enum:ParamId:EnumFormat) r-
* 6 (Spa:Enum:ParamId:Meta) r-
* 7 (Spa:Enum:ParamId:IO) r-
* 4 (Spa:Enum:ParamId:Format) -w
* 5 (Spa:Enum:ParamId:Buffers) --
* 15 (Spa:Enum:ParamId:Latency) rw
higgins@dragonbreath:/usr/share/pipewire$ pw-cli info 74
id: 74
permissions: r-xm-
type: PipeWire:Interface:Port/3
direction: "output"
* properties:
* format.dsp = "8 bit raw midi"
* object.path = "alsa:seq:default:client_32:capture_0"
* port.name = "X-Touch 4:(capture_0) X-Touch X-TOUCH_INT"
* port.alias = "X-Touch:X-Touch X-TOUCH_INT"
* port.group = "client_32"
* api.alsa.card = "4"
* port.id = "1"
* port.physical = "true"
* port.terminal = "true"
* port.direction = "out"
* node.id = "49"
* object.id = "74"
* object.serial = "93"
* params: (6)
* 3 (Spa:Enum:ParamId:EnumFormat) r-
* 6 (Spa:Enum:ParamId:Meta) r-
* 7 (Spa:Enum:ParamId:IO) r-
* 4 (Spa:Enum:ParamId:Format) -w
* 5 (Spa:Enum:ParamId:Buffers) --
* 15 (Spa:Enum:ParamId:Latency) rw
I've been trying various Pipewire configurations, but for some reason, the Pipewire MIDI-bridge just refuses to work fully. Admittedly I don't know too much in-depth about Pipewire .conf files.. well I didn't before today. Anyway, I can get it to work through PulseAudio, and even a2jmidid converting the ALSA MIDI ports into JACK ones mostly works (there's still some janky errors, but at least things are further along than Pipewire.)
I'll likely resume tackling this tomorrow. If anyone has any advice, would be much appreciated.
Offline
Okay, so this seems to be a regression due to pipewire 1.4.0, I downgraded to 1.2.7 and everything works fine. I think it might be due to moving everything to MIDI2 with 1.4.0. So it's either an undocumented configuration option introduced with 1.4.0, or a bug. Either way, it's a pipewire issue.
EDIT: Filed a bug and it seems like it was related to a known issue and fixed, pipewire commit bf3c7aa6 so it should work in an upcoming pipewire release. Writing this here in case anyone comes across this with a similar issue.
Last edited by higginsdragon (2025-03-13 20:28:55)
Offline