84 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| #!/sbin/runscript
 | |
| # $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound.initd-r5,v 1.1 2012/02/20 09:03:53 chainsaw Exp $
 | |
| # Copyright 1999-2012 Gentoo Foundation
 | |
| # Distributed under the terms of the GNU General Public License v2
 | |
| 
 | |
| alsastatedir=/var/lib/alsa
 | |
| alsascrdir=/etc/alsa.d
 | |
| 
 | |
| extra_commands="save restore"
 | |
| 
 | |
| depend() {
 | |
| 	need localmount
 | |
| 	after bootmisc modules isapnp coldplug hotplug
 | |
| }
 | |
| 
 | |
| restore() {
 | |
| 	ebegin "Restoring Mixer Levels"
 | |
| 
 | |
| 	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 -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"
 | |
| 
 | |
| 	mkdir -p "${alsastatedir}"
 | |
| 	if ! alsactl -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
 | |
| }
 |