Salut,
J’ai un problème lors de l’exécution de la règle /lib/udev/rules.d/90-alsa-restore.rules
ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST=="/usr/sbin", TEST=="/usr/share/alsa", GOTO="alsa_restore_go"
GOTO="alsa_restore_end"
LABEL="alsa_restore_go"
TEST!="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa restore $attr{device/number}"
TEST=="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa nrestore $attr{device/number}"
LABEL="alsa_restore_end"
A l’exécution je retrouve l’erreur suivante
journalctl -a | grep alsa
août 17 21:07:25 debian systemd-udevd[263]: Process '/usr/sbin/alsactl -E HOME=/run/alsa restore 1' failed with exit code 19.
août 17 21:08:36 debian pulseaudio[1371]: [pulseaudio] module-alsa-card.c: Card '1' doesn't exist: Aucun fichier ou dossier de ce type
août 17 21:08:36 debian pulseaudio[1371]: [pulseaudio] module.c: Failed to load module "module-alsa-card" (argument: "device_id="1" name="pci-0000_02_00.1" card_name="alsa_card.pci-0000_02_00.1" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1""): initialization failed.
le problème vient du fait que le parametre passé à alsactl vaut 1 alors que je n’ai que la carte 0.
voici ce qu’indique les paramètres udev
udevadm info -a -p /sys/class/sound/controlC0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:14.2/sound/card0/controlC0':
KERNEL=="controlC0"
SUBSYSTEM=="sound"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:14.2/sound/card0':
KERNELS=="card0"
SUBSYSTEMS=="sound"
DRIVERS==""
ATTRS{id}=="SB"
ATTRS{number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.2':
KERNELS=="0000:00:14.2"
SUBSYSTEMS=="pci"
DRIVERS=="snd_hda_intel"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x040300"
ATTRS{consistent_dma_mask_bits}=="40"
ATTRS{d3cold_allowed}=="1"
ATTRS{device}=="0x4383"
ATTRS{dma_mask_bits}=="40"
ATTRS{driver_override}=="(null)"
ATTRS{enable}=="1"
ATTRS{irq}=="16"
ATTRS{local_cpulist}=="0-1"
ATTRS{local_cpus}=="3"
ATTRS{msi_bus}=="1"
ATTRS{numa_node}=="0"
ATTRS{subsystem_device}=="0x1443"
ATTRS{subsystem_vendor}=="0x103c"
ATTRS{vendor}=="0x1002"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
j’ai bien la carte 0: ATTRS{number}=="0"
Pourquoi passe t on 1, est ce que c’est le resultat d’un test qui vaudrait “true”?
Si j’écris en dur la valeur 0 dans la règle
TEST!="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/var/lib/alsa restore 0"
je n’ai plus d’erreur.
Où est le problème de syntaxe?