[alsa-devel] my udev rules are breaking my dmixer setup why?
Takashi Iwai
tiwai at suse.de
Tue Nov 11 12:04:07 CET 2008
At Tue, 11 Nov 2008 11:57:29 +0100,
Jelle de Jong wrote:
>
> Takashi Iwai wrote:
> > At Tue, 11 Nov 2008 10:43:00 +0100,
> > Jelle de Jong wrote:
> >> Takashi Iwai wrote:
> >>> At Sun, 09 Nov 2008 15:59:03 +0100,
> >>> Jelle de Jong wrote:
> >>>> Hello everybody,
> >>>>
> >>>> I am trying to use udev to get fixed device names depending on the
> >>>> location of the device on the usb bus. The udev rules seems to be
> >>>> working fine, however i cant get dmix to work with the udev rules using
> >>>> only hw dies work. If i remove the udev rules the dmixer works fine.
> >>>>
> >>>> Can somebody look at the attachment, and maybe do some testing, i would
> >>>> highly appreciate it.
> >>> Swapping the card numbers with udev might have a problem because
> >>> the driver itself remembers the card index, and this number isn't
> >>> swapped -- thus you get inconsistency between the device file and
> >>> the internal index number.
> >>>
> >>> BTW, if you just would like to keep the fixed device index for a
> >>> certain usb device path, try my old patch below.
> >>> It adds devpath option to snd-usb-audio, and you can specify the
> >>> usb device path string ("usb-$BUSNAME-$DEVPATH").
> >>>
> >>>
> >>> Takashi
> >> Thank you Takashi for thanking the time to answer the question. I don't
> >> understand. If udev created the card numbers in the first place,
> >> swapping them should not make a difference?
> >
> > udev just renames a file.
> > But, the index number is stored in the driver itself, and it can be
> > read via an API function.
> >
> >> and why does the audio work
> >> fine with only hw:x and not when using dmix:x.
> >
> > Unless you change the device file name, it works.
> > Or, use an id string instead of an index number. The id string is
> > found in /proc/asound/cards as [xxx].
> > Or, you can simply set up the slots option of snd module or set up
> > the index option of each module. See ALSA-Configuration.txt.
> >
> >> How is the internal index
> >> number created?
> >
> > Either via a module / kernel boot option, or created dynamically
> > via the driver.
> >
> >> Can I control this index with udev? did I forget
> >> something in my udev rules?
> >
> > No. As mentioned, your udev rule just renames the file.
> >
> >> Custom compiling sound modules is no option, it will break
> >> maintainability of the system in every way, sorry for this not being an
> >> sustainable option.
> >
> > IMO, changing udev rule could be more fragile than a custom module...
> >
> >> Almost all devices can be managed with udev rules, that is where the
> >> system is designed for, there are also alsa rules in there, if they
> >> don't work what is wrong then? is it an alsa issue, or udev, what are
> >> the dependencies when alsa uses hardware. How are the /dev/snd/* devices
> >> used and what is the /proc/asound/* for ?
> >
> > The card index mechanism in ALSA was introduced much before udev
> > was born. It's just a legacy mechanism, but it's hard to kill without
> > breaking the running system, unfortunately.
> >
> > Takashi
>
> When reading the explanations I understand that we are kind of dealing
> with a legacy issue. Is it possible to add some features to alsa to
> still get what I need to be able to always use a fixed usb port for
> audio for one user. For example if i take the content of ../cards it is
> capable of showing the usb path. If I can use this in my .asoundrc all
> problems go away, and no need for udev rules to rename devices. This
> same system is used input devices for Xorg with /dev/input/by-path/
Yeah, it's worth to add a new identification way via a system path.
It'll be an extention and cannot work as is now, though :)
In your case, try to pass "default", "default_1" or "default_2"
to card id instead of index number.
For example, the below should work without an extra ~/.asoundrc
% aplay -Dplug:dmix:default foo.wav
Takashi
> cat /proc/asound/cards
>
> 0 [Intel ]: HDA-Intel - HDA Intel
> HDA Intel at 0xf7db8000 irq 16
> 1 [pcsp ]: PC-Speaker - pcsp
> Internal PC-Speaker at port 0x61
> 2 [Em28xx Audio ]: Empia Em28xx AudEm28xx Audio - Em28xx Audio
> Empia Em28xx Audio
> 3 [default ]: USB-Audio - USB AUDIO
> USB AUDIO at usb-0000:00:1d.7-4.1, full speed
> 4 [default_1 ]: USB-Audio - USB AUDIO
> USB AUDIO at usb-0000:00:1d.7-4.2, full speed
> 5 [default_2 ]: USB-Audio - USB AUDIO
> USB AUDIO at usb-0000:00:1d.7-4.3, full speed
> 6 [default_3 ]: USB-Audio - USB AUDIO
> USB AUDIO at usb-0000:00:1d.7-4.4, full speed
>
> Would it be possible to create something like the below:
>
> echo 'pcm.!default {
> type plug
> slave.pcm dmixer
> }
> pcm.dmixer {
> type dmix
> ipc_key 1024
> slave.pcm hw:path:usb-0000:00:1d.7-4.1
> }
> ctl.dmixer {
> type hw
> card path:usb-0000:00:1d.7-4.1
> }
> pcm.dsp {
> type plug
> slave.pcm dmixer
> }
> ctl.mixer {
> type hw
> card path:usb-0000:00:1d.7-4.1
> }' | tee /home/user0/.asoundrc
> chmod 600 /home/user0/.asoundrc
> chown user0:user0 /home/user0/.asoundrc
>
> Thanks in advance,
>
> Jelle
>
>
More information about the Alsa-devel
mailing list