From 690c0c5602db9bf3ff954a9846a6766aa3a8e8cf Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Fri, 5 Dec 2003 16:07:43 +0000 Subject: titi fixes sound initscript for some alsa devices --- move/Makefile | 3 +- move/tree/alsa_default.pl | 19 ++++++++ move/tree/sound.initscript | 116 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 1 deletion(-) create mode 100755 move/tree/alsa_default.pl create mode 100755 move/tree/sound.initscript diff --git a/move/Makefile b/move/Makefile index 871659c6e..2c2da4d53 100644 --- a/move/Makefile +++ b/move/Makefile @@ -7,7 +7,7 @@ ISO = /BIG/mdkmove.iso DATA_FILES = devices symlinks directories-to-create etcfiles all-etcfiles keyfiles \ BOOT-800-MOVE.jpg BOOT-1024-MOVE.jpg BOOT-1280-MOVE.jpg BOOT-1600-MOVE.jpg -PROGRAM_FILES = etc-monitorer.pl tree/startkde_move tree/wait4x tree/netscape +PROGRAM_FILES = etc-monitorer.pl tree/startkde_move tree/wait4x tree/netscape tree/alsa_default.pl LANG_FILES = $(shell perl -ne 'print $$1 if /ALLOWED_LANGS = qw\((.*)\)/' move.pm) STAGE1 = ../mdk-stage1 @@ -53,6 +53,7 @@ install: build sudo rm -f $(DEST_LIVETREE)/usr/bin/{halt,reboot} #- symlinks to consolehelper sudo cp -f tree/{halt,reboot} $(DEST_LIVETREE)/usr/bin sudo cp -f tree/X_move $(DEST_LIVETREE)/usr/X11R6/bin + sudo cp -f tree/sound.initscript $(DEST_LIVETREE)/etc/init.d/sound sudo rm -rf $(DEST_LIVETREE)/usr/share/langs sudo mkdir -p $(DEST_LIVETREE)/usr/share/langs diff --git a/move/tree/alsa_default.pl b/move/tree/alsa_default.pl new file mode 100755 index 000000000..927c8c1d3 --- /dev/null +++ b/move/tree/alsa_default.pl @@ -0,0 +1,19 @@ +#!/usr/bin/perl + +# state machine: +if (/\s*control\./) { + ($min, $max) = (0, 0); +} elsif (/\s*name '/) { + # skip masks + $ignore = /\s*name '.*(3D Control|mask|Exchange DAC|Output Jack)/; +} elsif (!$ignore) { + if (/s*comment.range '(\d+) - (\d+)'/) { + ($min, $max) = ($1, $2); + } elsif (/s*value/) { + # enable switches (we should really blacklist sb live and the like): + s/(value\w*\S*)\s* false/\1 true/; + # set volume to 67%: + my $val = $max*0.6; + s/(value\w*\S*)\s* 0/\1 $val/ + } +} diff --git a/move/tree/sound.initscript b/move/tree/sound.initscript new file mode 100755 index 000000000..756f22398 --- /dev/null +++ b/move/tree/sound.initscript @@ -0,0 +1,116 @@ +#!/bin/sh +# (c) MandrakeSoft, Chmouel Boudjnah +# $Id$ +# +# sound: This shell script launch the sound on your system. +# +# chkconfig: 2345 18 69 +# description: This shell script launch the sound on your system. + +. /etc/rc.d/init.d/functions + +PKLVL=$(cut -f1 /proc/sys/kernel/printk) +sysctl -n -w kernel.printk=0 + +function start_mixer () { + # ALSA + if [ -d /proc/asound ] && [ -x /usr/sbin/alsactl ]; then + # is ALSA already configured ? + if [[ ! -r /etc/asound.state ]]; then + # provide decent default sound level for alsa drivers + if [ -d /proc/asound ] && [ -x /usr/sbin/alsactl ];then + MIXER_SETTINGS=/root/tmp/asound.state_tmp + alsactl -f $MIXER_SETTINGS store + # set sensible defaults: + perl -pi /usr/bin/alsa_default.pl $MIXER_SETTINGS + action "Setting mixer settings" alsactl -f $MIXER_SETTINGS restore + rm -f $MIXER_SETTINGS + return 0 + fi + # if we've not alsa-utils, we'll fallback on OSS initialization below + else + # Not first boot: + # Done by alsa service but only if sound service is not + # enabled (hance this code path). + # We'll merge in back aksa service once mdk9.2 is released. + # [but we'll still handle both aumix & alsactl in order + # to manage packages removing / driver switch] + action "Loading mixer settings" /usr/sbin/alsactl restore + return 0 + fi + fi + # OSS + if egrep -q '(sparcaudio|sound)' /proc/devices 2>/dev/null && \ + [ "$retval" -eq 0 ] && [ -x /usr/bin/aumix ];then + if [ ! -r /etc/.aumixrc ];then + action "Setting mixer settings" /usr/bin/aumix -v80 -w80 -c80 + else + action "Loading mixer settings" /usr/bin/aumix -f /etc/.aumixrc -L + fi + fi +} + +function stop_mixer () { + if [ -d /proc/asound ] && [ -x /usr/sbin/alsactl ];then + # done by alsa service (to merge back after mdk9.2 release) + #action "Saving mixer settings" /usr/sbin/alsactl store + return 0; + fi + if egrep -q '(sparcaudio|sound)' /proc/devices 2>/dev/null && [ -x /usr/bin/aumix ];then + action "Saving mixer settings" /usr/bin/aumix -f /etc/.aumixrc -S + fi +} + +function module () { + opt="" + phrase=$1 + alias=$2 + [ -n "$3" ] && opt="-r" + module=`/sbin/modprobe -c | egrep -s "^alias( |\t)+"$alias"( |\t)+" | awk '{ print $3 }'` + if [ -n "$module" ] && [ "$module" != "off" ];then + action "$phrase ($module)" modprobe "$opt" $module + return $? + fi +} + +case $1 in + start) + retval=0 + if [ ! -d /proc/asound ];then + module "Loading sound module" sound || retval=1 + /sbin/modprobe -c | awk '/^((alias)|(probe)) +sound-slot-[0-9]/ {print $2}' | ( \ + while read line; do + [[ $line = snd-card-* ]] && continue #we do it via alsa script + module "Loading sound module" $line || retval=1 + done + ) + module "Loading midi module" midi + fi + start_mixer; + touch /var/lock/subsys/sound + ;; + stop) + # i should have the same semantic of alsa script than oss script, + # but i do not :-(, patches welcome. + stop_mixer; + rm -f /var/lock/subsys/sound + ;; + status) + if egrep -q '(sparcaudio|sound)' /proc/devices;then + gprintf "Sound loaded" + echo + fi + ;; + reload) + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "Usage: %s\n" "$(basename $0) {start|stop|restart|status}" + exit 0 +esac + +sysctl -n -w kernel.printk=$PKLVL +exit 0 -- cgit v1.2.1