Package: console-tools Version: 1:0.2.3dbs-64 Severity: normal Tags: patch console-screen.sh init script spawns many really unncessary processes. I'm providing patch along with commentary to fix this.
--- console-screen.sh.orig 2006-08-09 02:04:35.000000000 +0200 +++ console-screen.sh 2006-08-09 02:02:38.000000000 +0200 @@ -82,16 +82,15 @@ # start vcstime if [ "${DO_VCSTIME}" = "yes" -a -x ${VCSTIME} ] ; then - echo -n Starting clock on text console: `basename ${VCSTIME}` + echo Starting clock on text console: ${VCSTIME} Spawning process to canoncalize executable name seems unncessary for me... ${VCSTIME} ${VCSTIME_OPT} & - echo . Style... I really don't like "echo -n"; ...; echo "done" combo. This is just personal thing, "echo" is shell built-in so it doesn't do harm, please ignore this if you like different way. (and it seems you do :) fi # Global default font+sfm if [ "${SCREEN_FONT}" ] then - echo -n "Setting up general console font... " + echo "Setting up general console font." SCREEN_FONT="-f ${SCREEN_FONT}" # maybe use an external SFM @@ -101,76 +100,56 @@ # _before_ getty and so only one console running. So, # Set for the first 6 VCs (as they are allocated in /etc/inittab) NUM_CONSOLES=`fgconsole --next-available` - NUM_CONSOLES=`expr ${NUM_CONSOLES} - 1` + NUM_CONSOLES=$(($NUM_CONSOLES - 1)) $((expression)) works with dash/ash, no need for expr. [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6 - for vc in `seq 0 ${NUM_CONSOLES}` + i=0 + while [ $i -lt $NUM_CONSOLES ] do - ${SETFONT} --tty=${DEVICE_PREFIX}$vc ${SETFONT_OPT} ${SCREEN_FONT} ${SCREEN_FONT_MAP} || { echo " failed."; break; } - if [ "$vc" -eq ${NUM_CONSOLES} ]; then echo " done."; fi + ${SETFONT} --tty=${DEVICE_PREFIX}$i ${SETFONT_OPT} ${SCREEN_FONT} ${SCREEN_FONT_MAP} || { echo "$i failed."; break; } + i=$(($i + 1)) done fi seq of course spawns process... "[" and "$((expression))" is built-in. Here goes tricky part, I wont explain this -- I dont use SFMs so I fixed ACMs and copied changes here... I haven't tested font+sfm part! (It should work, though.) - # Per-VC font+sfm - PERVC_FONTS="`set | grep "^SCREEN_FONT_vc[0-9]*=" | tr -d \' `" - if [ "${PERVC_FONTS}" ] + # Per-VC SFMs + VCS="`set | grep '^SCREEN_FONT_vc[0-9]*=' | sed -e 's/^SCREEN_FONT_vc//' -e 's/=.*//'`" + if [ "${VCS}" ] then - echo -n "Setting up per-VC fonts: " - for font in ${PERVC_FONTS} + echo "Setting up per-VC fonts." + for vc in ${VCS} do - # extract VC and FONTNAME info from variable setting - vc=`echo $font | cut -b15- | cut -d= -f1` eval font=\$SCREEN_FONT_vc$vc - if [ X"$QUIET_PERVC" != X1 ] ; then - echo -n "${DEVICE_PREFIX}${vc}, " - fi - # eventually find an associated SFM eval sfm=\${SCREEN_FONT_MAP_vc${vc}} [ "$sfm" ] && sfm="-u $sfm" - ${SETFONT} --tty=${DEVICE_PREFIX}$vc ${SETFONT_OPT} -f $font $sfm done - echo "done." fi - # Global ACM [ "${APP_CHARSET_MAP}" ] && ${CHARSET} G0 ${APP_CHARSET_MAP} ACMs start here: - # Per-VC ACMs - PERVC_ACMS="`set | grep "^APP_CHARSET_MAP_vc[0-9]*=" | tr -d \' `" - if [ "${PERVC_ACMS}" ] + VCS="`set | grep '^APP_CHARSET_MAP_vc[0-9]*=' | sed -e 's/^APP_CHARSET_MAP_vc//' -e 's/=.*//'`" Here, by use of different construct I got list of numbers instead of APP_CHARSET_MAP_vc-thing that need to be parsed in every iteration of loop. + if [ "${VCS}" ] then - echo -n "Setting up per-VC ACM's: " - for acm in ${PERVC_ACMS} + echo "Setting up per-VC ACM's." + for vc in ${VCS} do - # extract VC and FONTNAME info from variable setting - vc=`echo $acm | cut -b19- | cut -d= -f1` That saves many processess per iteration... eval acm=\$APP_CHARSET_MAP_vc$vc - if [ X"$QUIET_PERVC" != X1 ] ; then - echo -n "${DEVICE_PREFIX}${vc} ($acm), " - fi Personal style... sorry for that. ;) - eval "${CHARSET} --tty='${DEVICE_PREFIX}$vc' G0 '$acm'" + ${CHARSET} --tty="${DEVICE_PREFIX}$vc" G0 "$acm" eval wasn't needed there, was it? done - echo "done." fi # Go to UTF-8 mode as necessary # - ENV_FILE="/dev/null" + ENV_FILE='' [ -r /etc/environment ] && ENV_FILE="/etc/environment" [ -r /etc/default/locale ] && ENV_FILE="/etc/default/locale" - for var in LANG LC_ALL LC_CTYPE ; do - value=$(egrep "^\s*${var}=" $ENV_FILE | tail -n1 | cut -d= -f2) - eval $var=$value - done - CHARMAP=`LANG=$LANG LC_ALL=$LC_ALL LC_CTYPE=$LC_CTYPE locale charmap` - if test "$CHARMAP" = "UTF-8" + [ "$ENV_FILE" ] && CHARMAP=$(set -a && . "$ENV_FILE" && locale charmap) This is fast -- by use of auto export shell option this work flawlessly (I hope). + if test "$CHARMAP" = "UTF-8" then unicode_start 2> /dev/null || true - else unicode_stop 2> /dev/null|| true fi @@ -212,14 +191,16 @@ # Allow user to remap keys on the console if [ -r /etc/console-tools/remap ] then - dumpkeys < ${DEVICE_PREFIX}1 |sed -f /etc/console-tools/remap |loadkeys --quiet + dumpkeys < ${DEVICE_PREFIX}1 | sed -f /etc/console-tools/remap | loadkeys --quiet Couldn't resist. fi # Set LEDS here if [ "$LEDS" != "" ] then - for i in `seq 1 ${NUM_CONSOLES}` + i=1 + while [ $i -lt $NUM_CONSOLES ] do setleds -D $LEDS < $DEVICE_PREFIX$i + i=$(($i + 1)) done Yet another remove-seq, use-builtins fixes. fi } These changes save about 90 pids! Main offenders are now consolechars and charset by itself ("consolechars -f font -m acm" spawns 7 pids). Please consider using parts (non-cosmetic ones) of my patch. Thanks for your work! Here goes patch without commentary: --- console-screen.sh.orig 2006-08-09 02:04:35.000000000 +0200 +++ console-screen.sh 2006-08-09 02:02:38.000000000 +0200 @@ -82,16 +82,15 @@ # start vcstime if [ "${DO_VCSTIME}" = "yes" -a -x ${VCSTIME} ] ; then - echo -n Starting clock on text console: `basename ${VCSTIME}` + echo Starting clock on text console: ${VCSTIME} ${VCSTIME} ${VCSTIME_OPT} & - echo . fi # Global default font+sfm if [ "${SCREEN_FONT}" ] then - echo -n "Setting up general console font... " + echo "Setting up general console font." SCREEN_FONT="-f ${SCREEN_FONT}" # maybe use an external SFM @@ -101,76 +100,56 @@ # _before_ getty and so only one console running. So, # Set for the first 6 VCs (as they are allocated in /etc/inittab) NUM_CONSOLES=`fgconsole --next-available` - NUM_CONSOLES=`expr ${NUM_CONSOLES} - 1` + NUM_CONSOLES=$(($NUM_CONSOLES - 1)) [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6 - for vc in `seq 0 ${NUM_CONSOLES}` + i=0 + while [ $i -lt $NUM_CONSOLES ] do - ${SETFONT} --tty=${DEVICE_PREFIX}$vc ${SETFONT_OPT} ${SCREEN_FONT} ${SCREEN_FONT_MAP} || { echo " failed."; break; } - if [ "$vc" -eq ${NUM_CONSOLES} ]; then echo " done."; fi + ${SETFONT} --tty=${DEVICE_PREFIX}$i ${SETFONT_OPT} ${SCREEN_FONT} ${SCREEN_FONT_MAP} || { echo "$i failed."; break; } + i=$(($i + 1)) done fi - # Per-VC font+sfm - PERVC_FONTS="`set | grep "^SCREEN_FONT_vc[0-9]*=" | tr -d \' `" - if [ "${PERVC_FONTS}" ] + # Per-VC SFMs + VCS="`set | grep '^SCREEN_FONT_vc[0-9]*=' | sed -e 's/^SCREEN_FONT_vc//' -e 's/=.*//'`" + if [ "${VCS}" ] then - echo -n "Setting up per-VC fonts: " - for font in ${PERVC_FONTS} + echo "Setting up per-VC fonts." + for vc in ${VCS} do - # extract VC and FONTNAME info from variable setting - vc=`echo $font | cut -b15- | cut -d= -f1` eval font=\$SCREEN_FONT_vc$vc - if [ X"$QUIET_PERVC" != X1 ] ; then - echo -n "${DEVICE_PREFIX}${vc}, " - fi - # eventually find an associated SFM eval sfm=\${SCREEN_FONT_MAP_vc${vc}} [ "$sfm" ] && sfm="-u $sfm" - ${SETFONT} --tty=${DEVICE_PREFIX}$vc ${SETFONT_OPT} -f $font $sfm done - echo "done." fi - # Global ACM [ "${APP_CHARSET_MAP}" ] && ${CHARSET} G0 ${APP_CHARSET_MAP} - # Per-VC ACMs - PERVC_ACMS="`set | grep "^APP_CHARSET_MAP_vc[0-9]*=" | tr -d \' `" - if [ "${PERVC_ACMS}" ] + VCS="`set | grep '^APP_CHARSET_MAP_vc[0-9]*=' | sed -e 's/^APP_CHARSET_MAP_vc//' -e 's/=.*//'`" + if [ "${VCS}" ] then - echo -n "Setting up per-VC ACM's: " - for acm in ${PERVC_ACMS} + echo "Setting up per-VC ACM's." + for vc in ${VCS} do - # extract VC and FONTNAME info from variable setting - vc=`echo $acm | cut -b19- | cut -d= -f1` eval acm=\$APP_CHARSET_MAP_vc$vc - if [ X"$QUIET_PERVC" != X1 ] ; then - echo -n "${DEVICE_PREFIX}${vc} ($acm), " - fi - eval "${CHARSET} --tty='${DEVICE_PREFIX}$vc' G0 '$acm'" + ${CHARSET} --tty="${DEVICE_PREFIX}$vc" G0 "$acm" done - echo "done." fi # Go to UTF-8 mode as necessary # - ENV_FILE="/dev/null" + ENV_FILE='' [ -r /etc/environment ] && ENV_FILE="/etc/environment" [ -r /etc/default/locale ] && ENV_FILE="/etc/default/locale" - for var in LANG LC_ALL LC_CTYPE ; do - value=$(egrep "^\s*${var}=" $ENV_FILE | tail -n1 | cut -d= -f2) - eval $var=$value - done - CHARMAP=`LANG=$LANG LC_ALL=$LC_ALL LC_CTYPE=$LC_CTYPE locale charmap` - if test "$CHARMAP" = "UTF-8" + [ "$ENV_FILE" ] && CHARMAP=$(set -a && . "$ENV_FILE" && locale charmap) + if test "$CHARMAP" = "UTF-8" then unicode_start 2> /dev/null || true - else unicode_stop 2> /dev/null|| true fi @@ -212,14 +191,16 @@ # Allow user to remap keys on the console if [ -r /etc/console-tools/remap ] then - dumpkeys < ${DEVICE_PREFIX}1 |sed -f /etc/console-tools/remap |loadkeys --quiet + dumpkeys < ${DEVICE_PREFIX}1 | sed -f /etc/console-tools/remap | loadkeys --quiet fi # Set LEDS here if [ "$LEDS" != "" ] then - for i in `seq 1 ${NUM_CONSOLES}` + i=1 + while [ $i -lt $NUM_CONSOLES ] do setleds -D $LEDS < $DEVICE_PREFIX$i + i=$(($i + 1)) done fi } -- System Information: Debian Release: testing/unstable APT prefers testing APT policy: (500, 'testing'), (10, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/dash Kernel: Linux 2.6.17-riddly3 Locale: LANG=C, LC_CTYPE=pl_PL (charmap=ISO-8859-2) Versions of packages console-tools depends on: ii debconf [debconf-2.0] 1.5.2 Debian configuration management sy ii libc6 2.3.6-15 GNU C Library: Shared libraries ii libconsole 1:0.2.3dbs-64 Shared libraries for Linux console ii sysvinit 2.86.ds1-15 System-V-like init utilities Versions of packages console-tools recommends: ii console-common 0.7.60 Basic infrastructure for text cons ii console-data 2:1.0-2 Keymaps, fonts, charset maps, fall -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]