#!/usr/bin/python """ Decide numbers for ALSA devices from their sysfs device paths. Adam Sampson This is based on the script from . Install this script as /etc/udev/alsa-name, and make it executable. Put the following rules in /etc/udev/rules.d/10-alsa-name.rules (so they run before whatever your distribution provides): KERNEL=="controlC*", PROGRAM="/etc/udev/alsa-name %k %p", NAME="snd/%c{1}", MODE="0666" KERNEL=="hw*", PROGRAM="/etc/udev/alsa-name %k %p", NAME="snd/%c{1}", MODE="0662" KERNEL=="pcmC*c", PROGRAM="/etc/udev/alsa-name %k %p", NAME="snd/%c{1}", MODE="0662" KERNEL=="pcmC*p", PROGRAM="/etc/udev/alsa-name %k %p", NAME="snd/%c{1}", MODE="0666" KERNEL=="midiC*", PROGRAM="/etc/udev/alsa-name %k %p", NAME="snd/%c{1}", MODE="0666" KERNEL=="timer", NAME="snd/%k", MODE="0666" KERNEL=="seq", NAME="snd/%k", MODE="0666" """ # A list of pairs: (device path regexp to match, card number). # I'm just matching against PCI device numbers for my machine; # you'll need to customise this for your own sound devices. DEVICE_MAP = [ ("0000:02:02.0", 0), # ice1712 ("0000:02:01.1", 1), # bt87x ("0000:00:1f.5", 2), # Intel onboard ] import sys, os, re alsaname = sys.argv[1] devpath = sys.argv[2] num = None for r, n in DEVICE_MAP: if re.search(r, devpath) is not None: num = n if num is not None: alsaname = re.sub(r'C([0-9]+)', "C%d" % num, alsaname) print alsaname sys.exit(0)