X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=7ebeb1a0e0d18ebc99cc8dcc422fef1b19953e41;hp=621ef1fa2800361f7c5ce969e8317e143dfb9a08;hb=8b6487f2fb87c63c618737f2522b4534658ffefe;hpb=96017c7cae64d25550202416ca14783942c0d7b1 diff --git a/autoconfig.functions b/autoconfig.functions index 621ef1f..7ebeb1a 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -297,7 +297,7 @@ config_language(){ if [ -r /etc/default/locale ] ; then if grep -q "LANG=.*UTF" /etc/default/locale ; then einfo "Setting up unicode environment." - unicode_start 2>>$DEBUG ; eend $? + unicode_start ; eend $? fi fi @@ -1597,9 +1597,10 @@ fi # checkbootparam home # }}} # {{{ Sound + config_mixer(){ -if ! [ -x /usr/bin/aumix ] ; then - eerror "aumix binary not available. Can not set sound volumes therefore." ; eend 1 +if ! [ -x /usr/bin/amixer ] ; then + eerror "amixer binary not available. Can not set sound volumes therefore." ; eend 1 else if ! [ -r /proc/asound/cards ] ; then @@ -1619,14 +1620,12 @@ else if checkbootparam 'nosound' ; then einfo "Muting sound devices on request." - # some IBM notebooks require the following stuff: - if [ -x /usr/bin/amixer ] ; then - if amixer get Front 1>/dev/null 2>>$DEBUG ; then - amixer set Front unmute 1>/dev/null - amixer set Front 0% 1>/dev/null - fi - fi - ERROR=$(aumix -w 0 -v 0 -p 0 -m 0 2>&1) ; RC=$? + + fix_ibm_sound 0 + # mute the master, this should be sufficient + ERROR=$(amixer -q set Master mute) + RC=$? + if [ -n "$ERROR" ] ; then eindent eerror "Problem muting sound devices: $ERROR" @@ -1635,13 +1634,9 @@ else eend $RC elif [ -z "$INSTALLED" ]; then einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}." - # some IBM notebooks require the following stuff: - if [ -x /usr/bin/amixer ] ; then - if amixer get Front 1>/dev/null 2>>$DEBUG ; then - amixer set Front unmute 1>/dev/null - amixer set Front ${VOL}% 1>/dev/null - fi - fi + + fix_ibm_sound ${VOL} + # by default assume '0' as volume for microphone: if checkbootparam 'micvol' ; then MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)" @@ -1650,17 +1645,39 @@ else fi # finally set the volumes: - ERROR=$(aumix -w $VOL -v $VOL -p $VOL -m $MICVOL 2>&1) ; RC=$? - if [ -n "$ERROR" ] ; then - eindent - eerror "Problem setting mixer volumes: $ERROR (no soundcard?)" - eoutdent + RC=0 + for CONTROL in Master PCM ; do + amixer -q set ${CONTROL} ${VOL}% + if [ $? -ne 0 ] ; then RC=$? ; fi + done + # dont know how to set microphone volume for all soundcards with amixer, + # so use aumix instead :/ + if [ ${MICVOL} -ne 0 -a -x /usr/bin/aumix ] ; then + aumix -m $MICVOL &>/dev/null + if [ $? -ne 0 ] ; then RC=$? ; fi fi + eend $RC fi fi } + +# on some IBM notebooks the front control has to be toggled +fix_ibm_sound() { + if [ -z $1 ] ; then + return + fi + + VOL=${1} + + if [ -x /usr/bin/amixer ] ; then + if amixer -q get Front 1>/dev/null 2>>$DEBUG ; then + amixer -q set Front unmute &>/dev/null + amixer -q set Front ${VOL}% &>/dev/null + fi + fi +} # }}} # {{{ modem detection @@ -1796,7 +1813,7 @@ config_services(){ # {{{ remote files get_remote_file() { [ "$#" -eq 2 ] || ( echo "Error: wrong parameter for get_remote_file()" ; return 1 ) - SOURCE="$1" + SOURCE=$(eval echo "$1") TARGET="$2" getconfig() { wget --timeout=10 --dns-timeout=10 --connect-timeout=10 --tries=1 \ @@ -1887,7 +1904,7 @@ config_x_startup(){ # make sure we start X only if startx is used *before* a nostartx option # so it's possible to disable automatic X startup using nostart if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; then - if [ -x /usr/X11R6/bin/X ] ; then + if [ -x $(which X) ] ; then if [ -z "$INSTALLED" ] ; then WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)" if [ -z "$WINDOWMANAGER" ] ; then @@ -1958,7 +1975,7 @@ else if checkbootparam 'myconfig' ; then DCSDEVICE="$(getbootparam 'myconfig' 2>>$DEBUG)" if [ -z "$DCSDEVICE" ]; then - einfo "No device for bootoption myconfig provided." ; eend 1 + eerror "Error: No device for bootoption myconfig provided." ; eend 1 fi # [ -z "$DCSDEVICE" ] elif checkvalue $CONFIG_MYCONFIG; then # checkbootparam myconfig einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0 @@ -1971,30 +1988,36 @@ else fi fi DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}') + eoutdent fi - if [ -n "$DCSDEVICE" ]; then + + # if not specified/present then assume default: + if [ -z "$DCSDEVICE" ]; then + DCSDIR="/live/image" + else + eindent einfo "debs, config, scripts are read from $DCSDEVICE." ; eend 0 DCSDIR="$(< /proc/mounts awk -v DCSDEV=$DCSDEVICE '{if ($1 == DCSDEV) { print $2 }}')" if [ -n "$DCSDIR" ]; then - einfo "$DCSDEVICE already mounted on $DCSDIR"; eend 0 + ewarn "$DCSDEVICE already mounted on $DCSDIR"; eend 0 else [ -d /mnt/grml ] || mkdir /mnt/grml umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted mount -o ro -t auto $DCSDEVICE /mnt/grml ; RC="$?" if [[ $RC == 0 ]]; then einfo "Successfully mounted $DCSDEVICE to /mnt/grml (readonly)." ; eend 0 - eindent + else + eerror "Error: mounting $DCSDEVICE to /mnt/grml (readonly) failed." ; eend 1 fi DCSDIR="/mnt/grml" fi - else - DCSDIR="/live/image" + eoutdent fi fi fi -if [ -n "$DCSDIR" ]; then - einfo "Debs, config, scripts will be read from $DCSDIR." ; eend 0 +if [ -n "$DCSDIR" -a "$DCSDIR" != "/live/image" ] ; then + einfo "Debs, config, scripts (if present) will be read from $DCSDIR." ; eend 0 elif checkbootparam 'debs' || checkbootparam 'config' || checkbootparam 'scripts'; then einfo "Debs, config, scripts will be read from the live image directly." ; eend 0 fi