[Pkg-alsa-devel] Bug#848395: Bug#848395: udev rule fails with exit code 99

Paul Menzel pmenzel at molgen.mpg.de
Mon Dec 19 14:03:29 UTC 2016


Dear Elimar,


On 12/18/16 20:52, Paul Menzel wrote:

> On 2016-12-18 11:50, Elimar Riesebieter wrote:
>> * Paul Menzel <pmenzel at molgen.mpg.de> [2016-12-17 16:01 +0100]:
>>
>>> On 2016-12-17 14:10, Elimar Riesebieter wrote:
>>> > Control: tags -1 +moreinfo
>>> >
>>> > * Paul Menzel <pmenzel at molgen.mpg.de> [2016-12-17 11:03 +0100]:
>>> >
>> [...]
>>> The manual page of alsactl says.
>>>
>>> > init tries to initialize all devices to a default state. If device is
>>> > not known, error code 99 is returned.
>>
>> [...]
>>
>>> > > Is the udev rule still needed?
>>> >
>>> > yes
>>>
>>> Interesting. Sorry, for being ignorant, just to be clear, it does the
>>> same
>>> thing, what the systemd service unit does?
>>
>> Sysvinit systems don't have "systemd device units"
>
> That wasn’t my question. So reading both files again, the udev rule and
> the systemd service unit do the same thing, that means, they run
> `alsactl restore …`.
>
> But you argue, that the udev rule is needed on a system using SysV.
>
> Unfortunely, I don’t understand that argument, as there is also the SysV
> init script `/etc/init.d/alsa-utils`. That contains the code below.
>
> ```
> […]
> # $1 <card ID> | "all"
> restore_levels()
> {
>     [ -f /var/lib/alsa/asound.state ] || return 1
>     CARD="$1"
>     [ "$1" = all ] && CARD=""
>     # Assume that if alsactl prints a message on stderr
>     # then it failed somehow.  This works around the fact
>     # that alsactl doesn't return nonzero status when it
>     # can't restore settings for the card
>     if MSG="$(alsactl -E HOME="$ALSACTLHOME" restore $CARD 2>&1
>>/dev/null)" && [ ! "$MSG" ] ; then
>         return 0
>     else
>         # Retry with the "force" option.  This restores more levels
>         # but it results in much longer error messages.
>         alsactl -F restore $CARD >/dev/null 2>&1
>         log_action_cont_msg "warning: 'alsactl -E HOME="$ALSACTLHOME"
> restore${CARD:+ $CARD}' failed with error message '$MSG'"
>         return 1
>     fi
> }
> […]
>   start)
>     EXITSTATUS=0
>     TARGET_CARD="$2"
>     case "$TARGET_CARD" in
>       ""|all) TARGET_CARD=all ; log_action_begin_msg "Setting up ALSA" ;;
>       *) log_action_begin_msg "Setting up ALSA card ${TARGET_CARD}" ;;
>     esac
>     card_OK "$TARGET_CARD" || log_action_end_msg_and_exit "$( [ ! "$2" ]
> ; echo $? ; )" "none loaded"
>     preinit_levels "$TARGET_CARD" || EXITSTATUS=1
>     if ! restore_levels "$TARGET_CARD" ; then
>         sanify_levels "$TARGET_CARD" || EXITSTATUS=1
>         restore_levels "$TARGET_CARD" >/dev/null 2>&1 || :
>     fi
>     log_action_end_msg_and_exit "$EXITSTATUS"
>     ;;
> ```
>
> So doesn’t that cover systems using SysV as init system?

Michael Biebl explained to me, that the udev rule is needed for 
hotplugging sound cards. I didn’t think of that.

[…]


Kind regards,

Paul



More information about the Pkg-alsa-devel mailing list