alsactl: Check existence of `alsactl` in udev rule
diff mbox

Message ID 1482964275.11185.34.camel@users.sourceforge.net
State New
Headers show

Commit Message

Paul Menzel Dec. 28, 2016, 10:31 p.m. UTC
From: Jordi Mallach <jordi@debian.org>
Date: Thu, 10 Jan 2013 00:17:58 +0000

Include the line `TEST=="/usr/sbin/alsactl"` in the udev rule, to
properly fix the state restoring for users with split `/usr`
filesystems
[1].

Upstream the patch from the Debian package [2].

[1] https://bugs.debian.org/670490
    "Debian Bug report logs - #670490 alsa-utils: Restore sound volume
     in udev"
[2] https://sources.debian.net/src/alsa-utils/1.1.2-1/debian/patches/udev_test_alsactl.patch/

Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
CC: Jordi Mallach <jordi@debian.org>
---
Please apply with `git am saved-messages.mbox`.

 alsactl/90-alsa-restore.rules.in | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.11.0

Comments

Takashi Iwai Dec. 29, 2016, 1:28 p.m. UTC | #1
On Wed, 28 Dec 2016 23:31:15 +0100,
Paul Menzel wrote:
> 
> From: Jordi Mallach <jordi@debian.org>
> Date: Thu, 10 Jan 2013 00:17:58 +0000
> 
> Include the line `TEST=="/usr/sbin/alsactl"` in the udev rule, to
> properly fix the state restoring for users with split `/usr`
> filesystems
> [1].

This doesn't sound like a real "fix".  It means that the whole
save/restore mechanism will be silently lost, right?


thanks,

Takashi

> 
> Upstream the patch from the Debian package [2].
> 
> [1] https://bugs.debian.org/670490
>     "Debian Bug report logs - #670490 alsa-utils: Restore sound volume
>      in udev"
> [2] https://sources.debian.net/src/alsa-utils/1.1.2-1/debian/patches/udev_test_alsactl.patch/
> 
> Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
> CC: Jordi Mallach <jordi@debian.org>
> ---
> Please apply with `git am saved-messages.mbox`.
> 
>  alsactl/90-alsa-restore.rules.in | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/alsactl/90-alsa-restore.rules.in b/alsactl/90-alsa-restore.rules.in
> index c0c1b23..f190b85 100644
> --- a/alsactl/90-alsa-restore.rules.in
> +++ b/alsactl/90-alsa-restore.rules.in
> @@ -2,7 +2,7 @@ ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST==
>  GOTO="alsa_restore_end"
>  
>  LABEL="alsa_restore_go"
> -TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl restore $attr{device/number}"
> -TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
> +TEST!="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl restore $attr{device/number}"
> +TEST=="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
>  
>  LABEL="alsa_restore_end"
> -- 
> 2.11.0
Paul Menzel Dec. 30, 2016, 10:04 a.m. UTC | #2
Am Donnerstag, den 29.12.2016, 14:28 +0100 schrieb Takashi Iwai:
> On Wed, 28 Dec 2016 23:31:15 +0100,
> Paul Menzel wrote:
> > 
> > From: Jordi Mallach <jordi@debian.org>
> > Date: Thu, 10 Jan 2013 00:17:58 +0000
> > 
> > Include the line `TEST=="/usr/sbin/alsactl"` in the udev rule, to
> > properly fix the state restoring for users with split `/usr`
> > filesystems
> > [1].
> 
> This doesn't sound like a real "fix".  It means that the whole
> save/restore mechanism will be silently lost, right?

Well, if the binary `alsactl` is not available, it shouldn’t be run.

But you are right, it depends on the system setup, what happens.

See the description of commit de7c3eff (alsactl: systemd and udev
hookup).

>     - At boot the asound.state file might not be readable, since it resides
>       on a different file system. That means exclusively restoring sound card
>       settings from udev rules will no suffice, since if the rule is
>       executed at early boot (for example within udev settle) then the file
>       will no be readable and cannot be restored.


Thanks,

Paul


> > Upstream the patch from the Debian package [2].
> > 
> > [1] https://bugs.debian.org/670490
> >     "Debian Bug report logs - #670490 alsa-utils: Restore sound volume
> >      in udev"
> > [2] https://sources.debian.net/src/alsa-utils/1.1.2-1/debian/patches/udev_test_alsactl.patch/
> > 
> > Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
> > CC: Jordi Mallach <jordi@debian.org>
> > ---
> > Please apply with `git am saved-messages.mbox`.
> > 
> >  alsactl/90-alsa-restore.rules.in | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/alsactl/90-alsa-restore.rules.in b/alsactl/90-alsa-restore.rules.in
> > index c0c1b23..f190b85 100644
> > --- a/alsactl/90-alsa-restore.rules.in
> > +++ b/alsactl/90-alsa-restore.rules.in
> > @@ -2,7 +2,7 @@ ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST==
> >  GOTO="alsa_restore_end"
> >  
> >  LABEL="alsa_restore_go"
> > -TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl restore $attr{device/number}"
> > -TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
> > +TEST!="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl restore $attr{device/number}"
> > +TEST=="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
> >  
> >  LABEL="alsa_restore_end"
> > -- 
> > 2.11.0
Takashi Iwai Dec. 30, 2016, 10:16 a.m. UTC | #3
On Fri, 30 Dec 2016 11:04:54 +0100,
Paul Menzel wrote:
> 
> Am Donnerstag, den 29.12.2016, 14:28 +0100 schrieb Takashi Iwai:
> > On Wed, 28 Dec 2016 23:31:15 +0100,
> > Paul Menzel wrote:
> > > 
> > > From: Jordi Mallach <jordi@debian.org>
> > > Date: Thu, 10 Jan 2013 00:17:58 +0000
> > > 
> > > Include the line `TEST=="/usr/sbin/alsactl"` in the udev rule, to
> > > properly fix the state restoring for users with split `/usr`
> > > filesystems
> > > [1].
> > 
> > This doesn't sound like a real "fix".  It means that the whole
> > save/restore mechanism will be silently lost, right?
> 
> Well, if the binary `alsactl` is not available, it shouldn’t be run.
> 
> But you are right, it depends on the system setup, what happens.
> 
> See the description of commit de7c3eff (alsactl: systemd and udev
> hookup).
> 
> >     - At boot the asound.state file might not be readable, since it resides
> >       on a different file system. That means exclusively restoring sound card
> >       settings from udev rules will no suffice, since if the rule is
> >       executed at early boot (for example within udev settle) then the file
> >       will no be readable and cannot be restored.

Yeah, if you allow a separate /usr partition to be mounted later, all
stuff executed in udev rules should be put in either /bin or /sbin.
The same is true for /var/lib/alsa.

And yet the question is whether we should suppress the error in such a
case.  When suppressed, user might not notice what went wrong.
Meanwhile an error message is annoying if you know it.


Takashi

> 
> 
> Thanks,
> 
> Paul
> 
> 
> > > Upstream the patch from the Debian package [2].
> > > 
> > > [1] https://bugs.debian.org/670490
> > >     "Debian Bug report logs - #670490 alsa-utils: Restore sound volume
> > >      in udev"
> > > [2] https://sources.debian.net/src/alsa-utils/1.1.2-1/debian/patches/udev_test_alsactl.patch/
> > > 
> > > Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
> > > CC: Jordi Mallach <jordi@debian.org>
> > > ---
> > > Please apply with `git am saved-messages.mbox`.
> > > 
> > >  alsactl/90-alsa-restore.rules.in | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/alsactl/90-alsa-restore.rules.in b/alsactl/90-alsa-restore.rules.in
> > > index c0c1b23..f190b85 100644
> > > --- a/alsactl/90-alsa-restore.rules.in
> > > +++ b/alsactl/90-alsa-restore.rules.in
> > > @@ -2,7 +2,7 @@ ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST==
> > >  GOTO="alsa_restore_end"
> > >  
> > >  LABEL="alsa_restore_go"
> > > -TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl restore $attr{device/number}"
> > > -TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
> > > +TEST!="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl restore $attr{device/number}"
> > > +TEST=="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
> > >  
> > >  LABEL="alsa_restore_end"
> > > -- 
> > > 2.11.0

Patch
diff mbox

diff --git a/alsactl/90-alsa-restore.rules.in b/alsactl/90-alsa-restore.rules.in
index c0c1b23..f190b85 100644
--- a/alsactl/90-alsa-restore.rules.in
+++ b/alsactl/90-alsa-restore.rules.in
@@ -2,7 +2,7 @@  ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST==
 GOTO="alsa_restore_end"
 
 LABEL="alsa_restore_go"
-TEST!="@daemonswitch@", RUN+="@sbindir@/alsactl restore $attr{device/number}"
-TEST=="@daemonswitch@", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
+TEST!="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl restore $attr{device/number}"
+TEST=="@daemonswitch@", TEST=="@sbindir@/alsactl", RUN+="@sbindir@/alsactl nrestore $attr{device/number}"
 
 LABEL="alsa_restore_end"