Fix it with pipewire.
Open a terminal and run
pw-link -o
You’ll get some output for your card. This is two lines of mine for example.
alsa_output.usb-MOTU_828ES_0001f2fffe012e87-00.pro-output-0:monitor_AUX0
alsa_output.usb-MOTU_828ES_0001f2fffe012e87-00.pro-output-0:monitor_AUX1
Note your card name before the colon and the channel names, in my case after monitor_.
Create the path if it doesn’t exist then go there
mkdir -p ~/.config/pipewire/pipewire.conf.d
cd ~/.config/pipewire/pipewire.conf.d
Open your new config file, name it whatever you like so long as it ends in .conf
nano 10-channelremap.conf
Here’s a template to paste & edit
context.modules = [
{ name = libpipewire-module-loopback
args = {
audio.position = [ FL FR FC LFE RL RR ]
capture.props = {
media.class = Audio/Sink
node.name = creative_5.1_remap_c
node.description = "Remapped 5.1 Output"
}
playback.props = {
#media.class = Audio/Source
node.name = creative_5.1_remap_p
node.description = "Creative 5.1 Input"
audio.position = [ AUX0 AUX1 AUX2 AUX3 AUX4 AUX5 ]
node.target = "alsa_output.usb-MOTU_828ES_0001f2fffe012e87-00.pro-output-0"
}
}
}
]
Edit node.target under playback.props. The node.target is the name of your card you got from pwlink, without the colon and channel.
Edit audio.position under playback props. Use the channel names you got from pwlink and what you know about which goes where to put them in the right order.
(Edit) It was a creative card in the example below, so you might be able to use their line:
audio.position = [ FC LFE RL RR FL FR ]
Save your changes then restart pipewire to apply
systemctl --user restart pipewire.service
Test again and see if you got it right on the first try, good luck.
Adapted from the pipewire issue discussion I used to fix this for myself a while back: