aports/main/alsa-utils/alsa.initd
Sören Tempel a506bf8c4d main/alsa-utils: allow passing additional alsactl options
Since alsa-utils 1.2.5 alsactl will print messages to standard error
if the HDA model does not support UCM. Apparently, this is intended by
upstream and users should manually disable UCM if they don't want to see
these messages.

See https://github.com/alsa-project/alsa-lib/issues/159#issuecomment-862441961
2021-06-27 13:31:03 +02:00

90 lines
2.3 KiB
Bash

#!/sbin/openrc-run
# $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound.initd-r6,v 1.1 2014/06/23 21:34:42 ssuominen Exp $
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
description="Save/Restore Sound Card State"
alsastatedir=/var/lib/alsa
alsascrdir=/etc/alsa.d
alsahomedir=/var/run/alsasound
extra_commands="save restore"
depend() {
need localmount
after bootmisc modules isapnp coldplug hotplug
}
restore() {
ebegin "Restoring Mixer Levels"
checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
if [ ! -r "${alsastatedir}/asound.state" ] ; then
ewarn "No mixer config in ${alsastatedir}/asound.state, you have to unmute your card!"
eend 0
return 0
fi
local cards="$(sed -n -e 's/ *\([[:digit:]]*\) .*/\1/p' /proc/asound/cards)"
local CARDNUM
for cardnum in ${cards}; do
[ -e /dev/snd/controlC${cardnum} ] || sleep 2
[ -e /dev/snd/controlC${cardnum} ] || sleep 2
[ -e /dev/snd/controlC${cardnum} ] || sleep 2
[ -e /dev/snd/controlC${cardnum} ] || sleep 2
alsactl ${alsactl_opts} -E HOME="${alsahomedir}" -I -f "${alsastatedir}/asound.state" restore ${cardnum} \
|| ewarn "Errors while restoring defaults, ignoring"
done
for ossfile in "${alsastatedir}"/oss/card*_pcm* ; do
[ -e "${ossfile}" ] || continue
# We use cat because I'm not sure if cp works properly on /proc
local procfile="${ossfile##${alsastatedir}/oss}"
procfile="$(echo "${procfile}" | sed -e 's,_,/,g')"
if [ -e /proc/asound/"${procfile}"/oss ] ; then
cat "${ossfile}" > /proc/asound/"${procfile}"/oss
fi
done
eend 0
}
save() {
ebegin "Storing ALSA Mixer Levels"
checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
mkdir -p "${alsastatedir}"
if ! alsactl ${alsactl_opts} -E HOME="${alsahomedir}" -f "${alsastatedir}/asound.state" store; then
eerror "Error saving levels."
eend 1
return 1
fi
for ossfile in /proc/asound/card*/pcm*/oss; do
[ -e "${ossfile}" ] || continue
local device="${ossfile##/proc/asound/}" ; device="${device%%/oss}"
device="$(echo "${device}" | sed -e 's,/,_,g')"
mkdir -p "${alsastatedir}/oss/"
cp "${ossfile}" "${alsastatedir}/oss/${device}"
done
eend 0
}
start() {
if [ "${RESTORE_ON_START}" = "yes" ]; then
restore
fi
return 0
}
stop() {
if [ "${SAVE_ON_STOP}" = "yes" ]; then
save
fi
return 0
}