Аудио-карты и udev

В компьютере установлено две звуковые карты. И, как часто это бывает, определяются они не в том порядке, в котором нужно.

Старый метод решения - настройка /etc/modprobe.d/alsa (сейчас он не работает)
Для решения проблемы обычно советуют настроить .asoundrc (или /etc/asound.conf).
Этот метод мне не совсем нравится.

Что вообще проиходит?
При загрузке системы стартует udev (его runlevel - sysinit) и только потом init выполняет скрипты boot к которым относится и modules (мне не до конца ясно почему, но в этом вопросе я доверюсь разработчикам).
Собственно этот самый udev и инициализирует аудио-карты, загружая необходимые им модули, modules повторно их не загружает и опции игнорируются.

Порядок загрузки модулей udev’ом поменять не удастся, но можно задать правила именования устройств.
Для этого необходимо создать файл 50-alsa в директории /etc/udev/rules.d содержимым напоминающим следующие строки:

DRIVERS=="au8830", KERNEL=="audio*", NAME="audio"
DRIVERS=="au8830", KERNEL=="dsp*", NAME="dsp"
DRIVERS=="au8830", KERNEL=="adsp*", NAME="adsp"
DRIVERS=="au8830", KERNEL=="dmmidi*", NAME="dmmidi"
DRIVERS=="au8830", KERNEL=="midi*", NAME="midi"
DRIVERS=="au8830", KERNEL=="mixer*", NAME="mixer"
DRIVERS=="au8830", KERNEL=="controlC*", NAME="snd/controlC0"
DRIVERS=="au8830", KERNEL=="midiC*D0", NAME="snd/midiC1D0"
DRIVERS=="au8830", KERNEL=="pcmC*D0c", NAME="snd/pcmC0D0c"
DRIVERS=="au8830", KERNEL=="pcmC*D0p", NAME="snd/pcmC0D0p"
DRIVERS=="au8830", KERNEL=="pcmC*D1p", NAME="snd/pcmC0D1p"
DRIVERS=="au8830", KERNEL=="pcmC*D2p", NAME="snd/pcmC0D2p"
DRIVERS=="au8830", KERNEL=="pcmC*D3p", NAME="snd/pcmC0D3p"

DRIVERS=="Intel ICH", KERNEL=="audio*", NAME="audio1"
DRIVERS=="Intel ICH", KERNEL=="dsp*", NAME="dsp1"
DRIVERS=="Intel ICH", KERNEL=="adsp*", NAME="adsp1"
DRIVERS=="Intel ICH", KERNEL=="mixer*", NAME="mixer1"
DRIVERS=="Intel ICH", KERNEL=="controlC*", NAME="snd/controlC1"
DRIVERS=="Intel ICH", KERNEL=="pcmC*D0c", NAME="snd/pcmC1D0c"
DRIVERS=="Intel ICH", KERNEL=="pcmC*D0p", NAME="snd/pcmC1D0p"
DRIVERS=="Intel ICH", KERNEL=="pcmC*D1c", NAME="snd/pcmC1D1c"
DRIVERS=="Intel ICH", KERNEL=="pcmC*D2p", NAME="snd/pcmC1D2p"

После такого именования и перезагрузки системы основной картой у меня в системе стала Aureal Semiconductor Vortex 2.
Чтобы узнать, что писать в DRIVERS необходимо выполнить

udevadm info -a -p `udevadm info -q path -n /dev/audio`

на “подозрительную” ноду. Я пробежался глазами по /dev, сделал приведенный выше запрос (/dev/audio необходимо заменить на “подозрительные” ноды) несколько раз и написал приведенный выше конфигурационный файл.

Основная информация почерпнута в документации по alsa и в handbook’е gentoo

Как раз на днях искал информацию как поменять местами звуковые карты. Но у меня другая проблема, по hdmi звук почему-то не идет. Спасибо за статью!