PHP 8.5.2
Preview: 78-sound-card.rules Size: 4.70 KB
//lib/udev/rules.d/78-sound-card.rules

# do not edit this file, it will be overwritten on update

SUBSYSTEM!="sound", GOTO="sound_end"

ACTION=="add|change", KERNEL=="controlC*", ATTR{../uevent}="change"
ACTION!="change", GOTO="sound_end"

# Ok, we probably need a little explanation here for what the two lines above
# are good for.
#
# The story goes like this: when ALSA registers a new sound card it emits a
# series of 'add' events to userspace, for the main card device and for all the
# child device nodes that belong to it. udev relays those to applications,
# however only maintains the order between father and child, but not between
# the siblings. The control device node creation can be used as synchronization
# point. All other devices that belong to a card are created in the kernel
# before it. However unfortunately due to the fact that siblings are forwarded
# out of order by udev this fact is lost to applications.
#
# OTOH before an application can open a device it needs to make sure that all
# its device nodes are completely created and set up.
#
# As a workaround for this issue we have added the udev rule above which will
# generate a 'change' event on the main card device from the 'add' event of the
# card's control device. Due to the ordering semantics of udev this event will
# only be relayed after all child devices have finished processing properly.
# When an application needs to listen for appearing devices it can hence look
# for 'change' events only, and ignore the actual 'add' events.
#
# When the application is initialized at the same time as a device is plugged
# in it may need to figure out if the 'change' event has already been triggered
# or not for a card. To find that out we store the flag environment variable
# SOUND_INITIALIZED on the device which simply tells us if the card 'change'
# event has already been processed.

KERNEL!="card*", GOTO="sound_end"

ENV{SOUND_INITIALIZED}="1"

IMPORT{builtin}="hwdb"
SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
SUBSYSTEMS=="usb", GOTO="skip_pci"

SUBSYSTEMS=="firewire", ATTRS{guid}=="?*", \
  ENV{ID_BUS}="firewire", ENV{ID_SERIAL}="$attr{guid}", ENV{ID_SERIAL_SHORT}="$attr{guid}", \
  ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{model}", \
  ENV{ID_VENDOR}="$attr{vendor_name}", ENV{ID_MODEL}="$attr{model_name}"
SUBSYSTEMS=="firewire", GOTO="skip_pci"

SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
SUBSYSTEMS=="pci", GOTO="skip_pci"

# If we reach here, the device nor any of its parents are USB/PCI/firewire bus devices.
# If we now find a parent that is a platform device, assume that we're working with
# an internal sound card.
SUBSYSTEMS=="platform", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end"

LABEL="skip_pci"

# Define ID_ID if ID_BUS and ID_SERIAL are set. This will work for both
# USB and firewire.
ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}"
ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}"

IMPORT{builtin}="path_id"

# The values used here for $SOUND_FORM_FACTOR and $SOUND_CLASS should be kept
# in sync with those defined for PulseAudio's src/pulse/proplist.h
# PA_PROP_DEVICE_FORM_FACTOR, PA_PROP_DEVICE_CLASS properties.

# If the first PCM device of this card has the pcm class 'modem', then the card is a modem
ATTR{pcmC%nD0p/pcm_class}=="modem", ENV{SOUND_CLASS}="modem", GOTO="sound_end"

# Identify cards on the internal PCI bus as internal
SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:??.?/sound/*", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end"

# Devices that also support Image/Video interfaces are most likely webcams
SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACES}=="*:0e????:*", ENV{SOUND_FORM_FACTOR}="webcam", GOTO="sound_end"

# Matching on the model strings is a bit ugly, I admit
ENV{ID_MODEL}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end"
ENV{ID_MODEL_FROM_DATABASE}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end"

ENV{ID_MODEL}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end"
ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end"

ENV{ID_MODEL}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end"
ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end"

ENV{ID_MODEL}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end"
ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end"

ENV{ID_MODEL}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end"
ENV{ID_MODEL_FROM_DATABASE}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end"

LABEL="sound_end"

Directory Contents

Dirs: 0 × Files: 105

Name Size Perms Modified Actions
321 B lrw-r--r-- 2024-07-29 08:06:31
Edit Download
41.86 KB lrw-r--r-- 2023-12-16 21:51:02
Edit Download
655 B lrw-r--r-- 2025-11-25 18:16:31
Edit Download
165 B lrw-r--r-- 2024-04-18 12:31:35
Edit Download
210 B lrw-r--r-- 2025-11-21 19:47:35
Edit Download
5.24 KB lrw-r--r-- 2025-11-25 18:16:31
Edit Download
7.11 KB lrw-r--r-- 2024-11-27 19:06:49
Edit Download
6.51 KB lrw-r--r-- 2024-04-08 16:19:15
Edit Download
4.46 KB lrw-r--r-- 2025-07-22 15:44:15
Edit Download
1.41 KB lrw-r--r-- 2025-07-22 15:44:15
Edit Download
2.37 KB lrw-r--r-- 2024-11-27 19:06:49
Edit Download
2.80 KB lrw-r--r-- 2024-04-08 16:19:15
Edit Download
704 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
703 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
1.05 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
637 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
834 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
1.07 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
491 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
379 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
282 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
3.89 KB lrw-r--r-- 2025-07-22 15:44:15
Edit Download
250 B lrw-r--r-- 2025-09-05 13:01:22
Edit Download
727 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
3.19 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
1.92 KB lrw-r--r-- 2024-11-27 19:06:49
Edit Download
411 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
2.54 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
9.47 KB lrw-r--r-- 2025-11-25 18:16:31
Edit Download
1.06 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
131 B lrw-r--r-- 2025-10-22 07:58:36
Edit Download
1.58 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
1.39 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
243 B lrw-r--r-- 2022-01-25 17:57:41
Edit Download
455 B lrw-r--r-- 2025-11-25 18:16:31
Edit Download
2.55 KB lrw-r--r-- 2024-07-29 08:06:31
Edit Download
387 B lrw-r--r-- 2024-03-31 08:43:21
Edit Download
346 B lrw-r--r-- 2024-03-31 08:43:21
Edit Download
616 B lrw-r--r-- 2025-11-25 18:16:31
Edit Download
1.81 KB lrw-r--r-- 2024-07-29 08:06:31
Edit Download
647 B lrw-r--r-- 2024-10-17 07:36:15
Edit Download
1.91 KB lrw-r--r-- 2024-03-27 13:14:04
Edit Download
1.11 KB lrw-r--r-- 2025-07-22 15:44:15
Edit Download
1.02 KB lrw-r--r-- 2024-04-08 15:54:26
Edit Download
3.49 KB lrw-r--r-- 2024-11-27 19:06:49
Edit Download
846 B lrw-r--r-- 2024-07-29 08:06:31
Edit Download
280 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
234 B lrw-r--r-- 2025-02-11 08:52:16
Edit Download
432 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
184 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
734 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
253 B lrw-r--r-- 2025-02-11 08:52:16
Edit Download
576 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
473 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
3.36 KB lrw-r--r-- 2025-11-25 18:16:31
Edit Download
461 B lrw-r--r-- 2025-11-25 18:16:31
Edit Download
3.73 KB lrw-r--r-- 2025-11-25 18:16:31
Edit Download
643 B lrw-r--r-- 2025-11-25 18:16:31
Edit Download
969 B lrw-r--r-- 2025-11-21 19:47:35
Edit Download
452 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
174 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
936 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
4.29 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
1.73 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
866 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
7.89 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
6.53 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
1.57 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
907 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
525 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
2.54 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
697 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
14.10 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
3.54 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
584 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
2.13 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
1.58 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
3.08 KB lrw-r--r-- 2024-02-29 20:05:23
Edit Download
9.51 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
3.18 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
4.13 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
11.97 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
739 B lrw-r--r-- 2024-02-19 14:58:32
Edit Download
4.94 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
4.49 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
16.78 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
965 B lrw-r--r-- 2025-11-25 18:16:31
Edit Download
4.70 KB lrw-r--r-- 2024-02-27 17:26:04
Edit Download
594 B lrw-r--r-- 2025-11-21 19:47:35
Edit Download
600 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
1.58 KB lrw-r--r-- 2024-02-19 14:58:32
Edit Download
295 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
10.32 KB lrw-r--r-- 2025-08-21 14:16:39
Edit Download
528 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
82 B lrw-r--r-- 2022-10-06 12:47:47
Edit Download
359 B lrw-r--r-- 2024-02-19 08:46:07
Edit Download
265 B lrw-r--r-- 2024-02-26 12:58:31
Edit Download
281 B lrw-r--r-- 2025-11-07 10:50:58
Edit Download
769 B lrw-r--r-- 2024-02-27 17:26:04
Edit Download
479 B lrw-r--r-- 2024-11-27 19:06:49
Edit Download
1.48 KB lrw-r--r-- 2025-07-22 15:44:15
Edit Download
171 B lrw-r--r-- 2024-04-28 23:44:46
Edit Download
351 B lrw-r--r-- 2024-01-18 21:21:52
Edit Download
4.98 KB lrw-r--r-- 2025-11-25 18:16:31
Edit Download
433 B lrw-r--r-- 2025-09-23 16:03:52
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).