#! /bin/sh # Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany. # # Author: Burchard Steinbild # Werner Fink # # /sbin/init.d/kbd # # and symbolic its link # # /sbin/rckbd # ### BEGIN INIT INFO # Provides: kbd # Required-Start: $remote_fs # Required-Stop: # Default-Start: 1 2 3 5 S # Default-Stop: # Description: Keyboard settings ### END INIT INFO . /etc/rc.status . /etc/rc.config MACHINE=`/bin/uname -m 2> /dev/null` if [ "$MACHINE" = "sparc" -o "$MACHINE" = "sparc64" ]; then # Test if we have a serial console. (test -c /dev/tty1 && > /dev/tty1 ) > /dev/null 2>&1 || exit 0 fi test -n "$KEYTABLE" -a "$KEYTABLE" != YAST_ASK || { echo KEYTABLE is not set in /etc/rc.config. Exit. exit 0 } KEYTABLE=${KEYTABLE%.map*} # # first search the wanted keytable. # if [ $MACHINE = ppc ]; then test -f /proc/cpuinfo || mount -n -t proc proc /proc 2>/dev/null while read line; do case "$line" in *MacRISC*) MACHINE="mac";; *CHRP*) MACHINE="chrp";; *PReP*) MACHINE="prep" ;; esac done < /proc/cpuinfo fi case "$MACHINE" in i?86|ia64|alpha|prep|chrp) KDBLIB="/usr/lib/kbd/keymaps/i386/*/" ;; sparc*) case "$KEYTABLE" in sun*) KDBLIB="/usr/lib/kbd/keymaps/sun/" ;; *) KDBLIB="/usr/lib/kbd/keymaps/i386/*/" ;; esac ;; mac) KDBLIB="/usr/lib/kbd/keymaps/mac/" ;; *) echo "No available keymaps for machine $MACHINE found"; exit 1 ;; esac KEYMAP="" if test -e /$KEYTABLE ; then KEYMAP=$KEYTABLE else K="${KDBLIB}${KEYTABLE}" case "$KEYTABLE" in *.gz) KDBPATH="${K}" ;; *.map) KDBPATH="${K} ${K}.gz" ;; *) KDBPATH="${K} ${K}.gz ${K}.map.gz ${K}.map" ;; esac for K in ${KDBPATH} ; do test -e "$K" || continue test -n "$KEYMAP" && KEYMAP="$KEYMAP $K" || KEYMAP=$K done fi rc_reset case "$1" in start|restart|reload) if test -z "$KEYMAP" ; then if test -r /etc/defkeymap.map ; then echo "Can not find a keymap for ${KEYTABLE}, trying fallback." KEYMAP=/etc/defkeymap.map else echo "Can not find a keymap for ${KEYTABLE}, Exit." rc_failed fi else if test ! -e "$KEYMAP" ; then echo "Found more than one keymap ${KEYTABLE}" KEYMAP=$K echo "Using $KEYMAP." echo "If you want another one, please add complete path to" echo "KEYTABLE in /etc/rc.config." fi fi rc_status && retmsg="`loadkeys $KEYMAP 2>&1`" if test $? -eq 0 && ( > /var/run/keymap ) > /dev/null 2>&1 ; then echo "$KEYMAP" > /var/run/keymap if test ! -s /etc/defkeymap.map ; then ( dumpkeys > /etc/defkeymap.map ) > /dev/null 2>&1 fi else rc_failed fi echo "Loading keymap ${retmsg#Loading*/usr/lib/kbd/keymaps/*/}" rc_status -v1 -r # Load compose tables if test ! -z "$COMPOSETABLE"; then unset COMPOSELOADED COMPOSECLEAR for name in $COMPOSETABLE; do # Test for compose clear flag if test "$name" = "-c" -o "$name" = "clear"; then COMPOSECLEAR=-c continue fi # Handle the first table differently ... if test -z "$COMPOSELOADED"; then echo -n "Loading compose table $name" loadkeys $COMPOSECLEAR compose.$name >/dev/null 2>&1 rc_check if test $name = clear; then rc_reset; fi COMPOSELOADED=1 else echo -n " $name" loadkeys compose.$name >/dev/null 2>&1 rc_check fi done if test ! -z "$COMPOSELOADED"; then rc_status -v -r fi fi # setfont if test -d /usr/lib/kbd/consolefonts -a \ -n "$CONSOLE_FONT" -a "$CONSOLE_FONT" != "YAST_ASK" then if test -x /usr/bin/setfont ; then echo Loading console font $CONSOLE_FONT /usr/bin/setfont $CONSOLE_FONT rc_status -v1 -r fi # unimap if test -n "$CONSOLE_UNICODEMAP" -a \ "$CONSOLE_UNICODEMAP" != "none" -a \ -x /usr/bin/setfont then echo Loading unimap $CONSOLE_UNICODEMAP /usr/bin/setfont -u $CONSOLE_UNICODEMAP rc_status -v1 -r fi # screenmap if test -n "$CONSOLE_SCREENMAP" -a \ "$CONSOLE_SCREENMAP" != "none" -a \ -x /usr/bin/setfont then echo Loading screenmap $CONSOLE_SCREENMAP /usr/bin/setfont -m $CONSOLE_SCREENMAP rc_status -v1 -r fi # console magic init string if test -n "$CONSOLE_MAGIC" -a "$CONSOLE_MAGIC" != "none" ; then echo Setting up console ttys for i in /dev/tty[1-24]; do echo -en "\033$CONSOLE_MAGIC" > $i rc_status done rc_status -v1 -r fi fi ;; stop) ;; check|status) if test -r /var/run/keymap ; then read current < /var/run/keymap echo "Keymap $current is loaded." else rc_failed fi ;; *) echo "Usage: $0 {start|stop|restart|reload|status|check}" exit 1 ;; esac rc_exit