]> git.alsa-project.org Git - alsa-utils.git/commitdiff
alsactl: add systemd service to handle deferred card initialization
authorJaroslav Kysela <perex@perex.cz>
Thu, 27 Nov 2025 17:17:14 +0000 (18:17 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 4 Dec 2025 14:08:14 +0000 (15:08 +0100)
Add alsa-card-wait@.service to handle cards in waiting state.
Update udev rules to use --export and trigger the wait service
when ALSA_CARD_STATE=waiting. Service runs "alsactl wrestore"
for deferred card initialization.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
alsactl/90-alsa-restore.rules.in
alsactl/Makefile.am
alsactl/alsa-card-wait@.service.in [new file with mode: 0644]

index b3a80d56d99d0b5debba275d9c85ad842b1aa150..6edf97a75f28c58a4acbb2ee1195b7c614f0ec33 100644 (file)
@@ -24,7 +24,8 @@ IMPORT{program}="/usr/bin/cat /run/udev/alsa-hda-analog-card"
 ENV{ALSA_CARD_HDA_ANALOG}!="", ENV{ALSA_CARD_NUMBER}="$env{ALSA_CARD_HDA_ANALOG}"
 
 LABEL="alsa_restore_std"
-TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl@args@ restore $env{ALSA_CARD_NUMBER}"
-TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl@args@ nrestore $env{ALSA_CARD_NUMBER}"
+TEST!="@daemonswitch@", IMPORT{program}="@sbindir@/alsactl@args@ --export restore $env{ALSA_CARD_NUMBER}"
+TEST=="@daemonswitch@", IMPORT{program}="@sbindir@/alsactl@args@ --export nrestore $env{ALSA_CARD_NUMBER}"
+ENV{ALSA_CARD_STATE}=="waiting", ENV{SYSTEMD_WANTS}="alsa-card-wait@$env{ALSA_CARD_NUMBER}.service"
 
 LABEL="alsa_restore_end"
index 26d80ba075e2ece8760be10ceeddd15bae3eb7ce..e3ba05b387a267343bab2c06014566a8cb19874e 100644 (file)
@@ -31,7 +31,8 @@ if HAVE_SYSTEMD
 
 systemdsystemunit_DATA = \
        alsa-state.service \
-       alsa-restore.service
+       alsa-restore.service \
+       alsa-card-wait@.service.in
 
 install-data-hook:
        $(MKDIR_P) -m 0755 \
@@ -60,6 +61,9 @@ alsa-state.service: alsa-state.service.in
 alsa-restore.service: alsa-restore.service.in
        $(edit)
 
+alsa-card-wait@.service: alsa-card-wait@.service.in
+       $(edit)
+
 90-alsa-restore.rules: 90-alsa-restore.rules.in
        $(edit)
 
@@ -71,6 +75,7 @@ EXTRA_DIST += \
 CLEANFILES = \
        alsa-state.service \
        alsa-restore.service \
+       alsa-card-wait@.service \
        90-alsa-restore.rules
 
 %.7: %.xml
diff --git a/alsactl/alsa-card-wait@.service.in b/alsactl/alsa-card-wait@.service.in
new file mode 100644 (file)
index 0000000..816074f
--- /dev/null
@@ -0,0 +1,12 @@
+#
+# ALSA card initialization handler for cards in waiting state
+# This service is triggered by udev when ALSA_CARD_STATE=waiting
+#
+
+[Unit]
+Description=ALSA Card Initialization for card %I
+
+[Service]
+Type=oneshot
+RemainAfterExit=no
+ExecStart=@sbindir@/alsactl@args@ wrestore %i