X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=e224a56b53ee4e66659111bf83718f5beb7b6884;hp=a28b1f562cb9ddff57baf5fc979c0bbe9acfdab9;hb=d20e91bbc1ec7180929f853751e78bc9b0895147;hpb=a9ef28a9082b24866dcbd5769dcc6c51f09b4ec3 diff --git a/autoconfig.functions b/autoconfig.functions index a28b1f5..e224a56 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -320,11 +320,26 @@ config_language(){ [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6 fi CUR_CONSOLE=$(fgconsole 2>/dev/null) + + if [ -x "$(which setfont)" ] ; then + use_setfont=true + elif [ -x "$(which consolechars)" ] ; then + use_consolechars=true + else + eerror "Neither setfont nor consolechars tool present, can not set font." + eend 1 + return 1 + fi + if [ -n "$CHARMAP" ] ; then - einfo "Running consolechars for ${CHARMAP}" + einfo "Setting font to ${CHARMAP}" RC=0 for vc in $(seq 0 ${NUM_CONSOLES}) ; do - consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$? + if $use_setfont ; then + setfont -C /dev/tty${vc} $CHARMAP ; RC=$? + elif $use_consolechars ; then + consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$? + fi done if [ -n "$CUR_CONSOLE" ] ; then [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE @@ -336,10 +351,14 @@ config_language(){ ewarn "Skipping setting console font as requested on boot commandline." ; eend 0 else if [ -n "$CONSOLEFONT" ] ; then - einfo "Running consolechars using ${CONSOLEFONT}" + einfo "Setting font to ${CONSOLEFONT}" RC=0 for vc in $(seq 0 ${NUM_CONSOLES}) ; do - consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$? + if $use_setfont ; then + setfont -C /dev/tty${vc} ${CONSOLEFONT} ; RC=$? + elif $use_consolechars ; then + consolechars --tty=/dev/tty${vc} -f ${CONSOLEFONT} ; RC=$? + fi done if [ -n "$CUR_CONSOLE" ] ; then [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE @@ -1343,102 +1362,65 @@ fi config_cpu(){ if checkbootparam 'nocpu'; then ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0 + return 0 +fi + +if [[ $(grep -c processor /proc/cpuinfo) -gt 1 ]] ; then + einfo "Detecting CPU:" + CPU=$(awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG) + echo $CPU | sed 's/ \{1,\}/ /g' + eend 0 else - # check module dependencies - cpufreq_check() { - if ! [ -e /lib/modules/${KERNEL}/kernel/arch/x86/kernel/cpu/cpufreq ] ; then - if [ -e /lib64 ] ; then - [ -e /lib/modules/${KERNEL}/kernel/arch/x86_64/kernel/cpufreq ] || return 1 + einfo "Detecting CPU: `awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG` " ; eend 0 +fi + +# Virtual Box supports ACPI and laptop-detect would return with '0', so check for it: +if [ -r /proc/acpi/battery/BAT0/info ] && grep -q 'OEM info:.*innotek' /proc/acpi/battery/BAT0/info ; then + einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0 + return 0 +fi + +if [ -x /etc/init.d/loadcpufreq ] ; then + einfo "Trying to set up cpu frequency scaling:" + eindent + SKIP_CPU_GOVERNOR='' + LOADCPUFREQ=$(mktemp) + /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$? + if grep -q FATAL "$LOADCPUFREQ" ; then + eindent + SKIP_CPU_GOVERNOR=1 + oldIFS="$IFS" + IFS=" +" + for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do + eerror "$line" ; eend $RC + done + IFS="$oldIFS" + eoutdent + elif grep -q done "$LOADCPUFREQ" ; then + MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/') + if [ -n "$MODULE" -a "$MODULE" != none ]; then + einfo "Loading cpufreq kernel module $MODULE" ; eend 0 else - [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1 + ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1 fi fi - } - if [[ `grep -c processor /proc/cpuinfo` -gt 1 ]] ; then - einfo "Detecting CPU:" - CPU=$(awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG) - echo $CPU | sed 's/ \{1,\}/ /g' - eend 0 - else - einfo "Detecting CPU: `awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG` " ; eend 0 - fi + rm -f $LOADCPUFREQ - # Disclaimer: sorry for the tons of if/then/else... but this makes sure we use: - # * it only if we have the according kernel modules available - # * cpufreq not inside Virtual Box - # * current version of /etc/init.d/loadcpufreq from Debian (to stay in sync) - # -> parse output of the initscript and output it according to our look'n'feel - # * our own cpufreq-detect.sh if /etc/init.d/loadcpufreq isn't present - if ! cpufreq_check ; then - ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1 - else - # Virtual Box supports ACPI and laptop-detect would return with '0', so check for it: - if [ -r /proc/acpi/battery/BAT0/info ] ; then - if grep -q 'OEM info: innotek' /proc/acpi/battery/BAT0/info ; then - einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0 - return 0 - fi - fi - einfo "Trying to set up cpu frequency scaling:" - eindent - if [ -x /etc/init.d/loadcpufreq ] ; then - SKIP_CPU_GOVERNOR='' - LOADCPUFREQ=$(mktemp) - /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$? - if grep -q FATAL "$LOADCPUFREQ" ; then - eindent - SKIP_CPU_GOVERNOR=1 - oldIFS="$IFS" - IFS=" -" - for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do - eerror "$line" ; eend $RC - done - IFS="$oldIFS" - eoutdent - elif grep -q done "$LOADCPUFREQ" ; then - MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/') - if [ -n "$MODULE" -a "$MODULE" != none ]; then - einfo "Loading cpufreq kernel module $MODULE" ; eend 0 - else - ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1 - fi - fi - rm -f $LOADCPUFREQ - elif [ -r /usr/bin/cpufreq-detect.sh ] ; then - . /usr/bin/cpufreq-detect.sh - if [ -n "$MODULE" -a "$MODULE" != none ]; then - einfo "Loading modules ${MODULE}" - modprobe "$MODULE" >>$DEBUG || modprobe "$MODULE_FALLBACK" >>$DEBUG - RC=$? - if [[ "$RC" == 0 ]]; then - eend 0 - else - SKIP_CPU_GOVERNOR=1 - eend $RC - fi - else - ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping." - eend 1 - fi # $MODULE - fi # loadcpufreq - - if [ -z "$SKIP_CPU_GOVERNOR" ] ; then - einfo "Loading cpufreq_ondemand, setting ondemand governor" - RC=0 - if modprobe cpufreq_ondemand ; RC=$? ; then - for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do - echo ondemand > $file - done - fi - eend $RC - fi # cpu-governor - - eoutdent + if [ -z "$SKIP_CPU_GOVERNOR" ] ; then + einfo "Loading cpufreq_ondemand, setting ondemand governor" + RC=0 + if modprobe cpufreq_ondemand ; RC=$? ; then + for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do + echo ondemand > $file + done + fi + eend $RC + fi # cpu-governor - fi # cpufreq_check -fi # checkbootparam nocpu + eoutdent +fi } # }}} @@ -1540,6 +1522,15 @@ if checkbootparam 'vnc' ; then /bin/chown -R "$USER": "$VNCDIR" fi fi + if checkbootparam 'vnc_connect' ; then + VNC_CONNECT='' + VNC_CONNECT="$(getbootparam 'vnc_connect' 2>>$DEBUG)" + einfo "Bootoption vnc_connect found, will start vnc with connect to $VNC_CONNECT." + #store the options in a file + VNCDIR="/home/${USER}/.vnc" + [ -d "$VNCDIR" ] || mkdir "$VNCDIR" + echo " --connect $VNC_CONNECT " >> $VNCDIR/options + fi fi } # }}} @@ -1570,86 +1561,67 @@ fi # }}} # {{{ Sound - -config_mixer(){ -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 - ewarn "No soundcard present, skipping mixer settings therefore." ; eend 0 - return - fi - - if checkbootparam 'vol' ; then - VOL="$(getbootparam 'vol' 2>>$DEBUG)" - if [ -z "$VOL" ] ; then - eerror "Bootoption vol found but no volume level/parameter given. Using defaults." ; eend 1 - VOL='75' # default - fi - else - VOL='75' # default - fi - - if checkbootparam 'nosound' ; then - einfo "Muting sound devices on request." - - 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" - eoutdent - fi - eend $RC - elif [ -z "$INSTALLED" ]; then - einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}." - - fix_ibm_sound ${VOL} - - # by default assume '0' as volume for microphone: - if checkbootparam 'micvol' ; then - MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)" - else - MICVOL=0 - fi - - # finally set the volumes: - 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 +config_mixer () { + 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 + ewarn "No soundcard present, skipping mixer settings therefore." + eend 0 + return fi - eend $RC - fi + for card in $(cat /proc/asound/cards| grep -e '^\s*[0-9]' | awk '{print $1}') ; do + einfo "Configuring soundcard $(cat /proc/asound/cards| grep -e "$card" | awk -F\[ '{print $2}' | awk '{print $1}')" + eindent -fi -} + if checkbootparam 'vol' ; then + VOL="$(getbootparam 'vol' 2>>$DEBUG)" + if [ -z "$VOL" ] ; then + eerror "Bootoption vol found but no volume level/parameter given. Using defaults (75%)." + VOL='75' + eend 1 + fi + else + VOL='75' + fi -# on some IBM notebooks the front control has to be toggled -fix_ibm_sound() { - if [ -z $1 ] ; then - return - fi + if checkbootparam 'nosound' ; then + einfo "Muting sound devices on request." + ERROR=$(amixer -q set Master mute) + RC=$? + if [ -n "$ERROR" ] ; then + eindent + eerror "Problem muting sound devices: $ERROR" + eoutdent + fi + eend $RC + elif [ -z "$INSTALLED" ] ; then + einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}." - VOL=${1} + if checkbootparam 'micvol' ; then + MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)" + else + MICVOL=0 + fi - if [ -x /usr/bin/amixer ] ; then - if amixer -q get Front >/dev/null 2>>$DEBUG ; then - amixer -q set Front unmute &>/dev/null - amixer -q set Front ${VOL}% &>/dev/null - fi - fi + for CONTROL in Master PCM ; do + if amixer -q | grep -q "Simple mixer control.*$CONTROL" ; then + amixer -q set "${CONTROL}" "${VOL}"% + eend $? + fi + done + + if [ ${MICVOL} -ne 0 ] ; then + einfo "Setting microphone to ${WHITE}${MICVOL}${NORMAL}." + amixer -q set "Mic" $MICVOL &> /dev/null + eend $? + fi + fi # checkbootparam 'nosound' + eoutdent + done + fi } # }}} @@ -1877,7 +1849,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 $(which X) ] ; then + if [ -x "$(which X)" ] ; then if [ -z "$INSTALLED" ] ; then WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)" if [ -z "$WINDOWMANAGER" ] ; then @@ -2468,19 +2440,6 @@ fi } # }}} -# {{{ check for broken ipw3945 driver which causes problems (especially on hd install) -config_ipw3945() { - if grep -q ipw3945 /proc/modules ; then - if ! iwconfig 2>/dev/null| grep -qe 'IEEE 802' -qe 'unassociated' ; then - ewarn "Broken ipw3945 network interface found, reloading module." - rmmod ipw3945 - modprobe ipw3945 - eend $? - fi - fi -} -# }}} - # {{{ disable console blanking config_blanking(){ if checkbootparam 'noblank' ; then