# console Loads console font and keyboard table
#
-# chkconfig: 345 70 30
+# chkconfig: 2345 70 30
#
# description: Loads the console font, the application-charset map \
# and the keyboard table.
[ -f /etc/sysconfig/console ] || exit 0
-[ -f /bin/loadkeys ] || exit 0
-[ -f /usr/bin/setfont ] || exit 0
+[ -f /bin/loadkeys -o -f /usr/bin/loadkeys ] || exit 0
+[ -f /bin/setfont -o -f /usr/bin/setfont ] || exit 0
# Source function library
. /etc/rc.d/init.d/functions
-case "$1" in
- start|restart)
- . /etc/sysconfig/console
+if is_yes "$VSERVER"; then
+ exit 0
+fi
- # Checking if we have framebuffer enabled
- if [ -f /proc/fb ]; then
- # /proc shows as files with size=0, this is workaround
- if cat /proc/fb | grep -q "."; then FB=yes; fi
- fi
-
- if [ -n "$SVGATEXTMODE" ]
- then
- run_cmd "Setting Text Mode $SVGATEXTMODE" SVGATextMode $SVGATEXTMODE
- fi
- if [ -n "$CONSOLEFONT" ]
- then
- CMD="/usr/bin/setfont -m ${CONSOLEMAP:-trivial} $CONSOLEFONT"
- show "Loading console font and map"; busy
-
- # don't initialize on multiple terminals if we use fbset
- # (assume that, in this case fb is loaded as a module)
- if [ ! -z $FB ] && [ -f /var/lock/subsys/fbset ]; then
- # Check for devfs (workaround: -a option don't work at all)
+[ -f /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
+. /etc/sysconfig/console
+
+start() {
+ # Checking if we have framebuffer enabled
+ if [ -f /proc/fb ]; then
+ # /proc shows as files with size=0, this is workaround
+ if cat /proc/fb | grep -q "."; then FB=yes; fi
+ fi
+
+ if [ -n "$SVGATEXTMODE" ]; then
+ run_cmd "Setting Text Mode $SVGATEXTMODE" SVGATextMode $SVGATEXTMODE
+ fi
+
+ # Check for devfs (workaround: -a option doesn't work at all)
+ local devpath tty cons
+ if [ -d /dev/vc ]; then
+ devpath="/dev/vc/"
+ else
+ devpath="/dev/tty"
+ fi
+ # save old tty number
+ tty=$(/usr/bin/tty)
+ if [ "$?" -ne 0 -o "$tty" = "/dev/console" ]; then
+ tty=1
+ else
+ tty=${tty#$devpath}
+ fi
+
+ if [ -n "$CONSOLEFONT" -a -x /sbin/setsysfont ]; then
+ show "Loading console font and map"
+ busy
+
+ # don't initialize on multiple terminals if we use fbset
+ # (assume that, in this case fb is loaded as a module)
+ if [ ! -z "$FB" ]; then
+ if [ -z "$SET_FONT_TERMINALS" ]; then
+ # check if devfs (workaround: -a option doesn't work at all)
if [ -d /dev/vc ]; then
- pattern="s/\/dev\/vc\///g"
+ SET_FONT_TERMINALS=$(ls /dev/vc/)
else
- pattern="s/\/dev\/tty//g"
+ SET_FONT_TERMINALS=$(awk -F: '/^[0-9]*:/{print $1}' /etc/inittab)
fi
-
- # save old tty number
- tty=`/usr/bin/tty | sed $pattern`
-
- # check if devfs (workaround: -a option don't work at all)
- if [ -d /dev/vc ]; then
- DEVICES="`ls /dev/vc/* | sed 's|/dev/vc/||g'`"
- else
- DEVICES="`cat /etc/inittab | grep '^[0-9]*:' | cut -f1 -d :`"
+ fi
+
+ for cons in $SET_FONT_TERMINALS; do
+ /usr/bin/open -c $cons -s -w -- /sbin/setsysfont
+ if [ "$NUM_LOCK" ]; then
+ if [ $NUM_LOCK = "on" ]; then
+ /usr/bin/open -c $cons -s -w -- /usr/bin/setleds -D +num
+ else
+ /usr/bin/open -c $cons -s -w -- /usr/bin/setleds -D -num
+ fi
fi
+ done
- [ -z "$SET_FONT_TERMINALS" ] && SET_FONT_TERMINALS="$DEVICES"
-
- for cons in $SET_FONT_TERMINALS; do
- /usr/bin/open -c $cons -s -w -- $CMD
- done
-
- if [ $tty = "/dev/console" ]; then tty=1; fi
+ if [[ "$tty" = [0-9]* ]]; then
/usr/bin/switchto $tty
- else
- $CMD
fi
- ok
+ else
+ for cons in $SET_FONT_TERMINALS; do
+ /usr/bin/open -c $cons -s -w -- /sbin/setsysfont
+ done
fi
- if [ -n "$KEYTABLE" ]
- then
+ ok
+ fi
+
+ if [ -n "$KEYTABLE" ]; then
+ if [ "$(LANG="$LANG" locale charmap)" = "UTF-8" ]; then
+ run_cmd "Loading keyboard table" loadkeys -u $KEYTABLE < /dev/tty0 > /dev/tty0
+ else
run_cmd "Loading keyboard table" loadkeys $KEYTABLE < /dev/tty0 > /dev/tty0
fi
- echo "Enabling SAK sequence"
- echo Control Alt keycode 101 = SAK | loadkeys
- ;;
- stop)
- # Nothing to stop
- ;;
- status)
- # Nothing to report
- ;;
- *)
- msg_usage "$0 {start|stop|status|restart}"
- exit 1
+ fi
+ run_cmd "Enabling SAK sequence" /bin/sh -c "echo Control Alt keycode 101 = SAK | loadkeys"
+
+ power_option=""
+ if ! is_no "$POWER_SAVE"; then
+ if [ "$BLANK_TIME" ]; then
+ power_option="-blank $BLANK_TIME";
+ fi
+ if [ "$POWERDOWN_TIME" ]; then
+ power_option="-powerdown $POWERDOWN_TIME $power_option";
+ fi
+ else
+ power_option="-blank 0 -powerdown 0 -powersave off";
+ fi
+ setterm_option="$power_option"
+ if [ "$FOREGROUND_COLOUR" ]; then
+ setterm_option="$setterm_option -foreground $FOREGROUND_COLOUR"
+ fi
+ if [ "$BACKGROUND_COLOUR" ]; then
+ setterm_option="$setterm_option -background $BACKGROUND_COLOUR"
+ fi
+ if [ "$BEEP_LENGTH" ]; then
+ setterm_option="$setterm_option -blength $BEEP_LENGTH"
+ fi
+ if [ "$BEEP_FREQ" ]; then
+ setterm_option="$setterm_option -bfreq $BEEP_FREQ"
+ fi
+ setterm_option="$setterm_option -store"
+
+ for cons in $SET_FONT_TERMINALS; do
+ /usr/bin/open -c $cons -s -w -- /usr/bin/setterm $setterm_option
+ done
+ if [[ "$tty" = [0-9]* ]]; then
+ /usr/bin/switchto $tty
+ fi
+
+ touch /var/lock/subsys/console
+}
+
+RETVAL=0
+case "$1" in
+ start)
+ if [ ! -f /var/lock/subsys/console ]; then
+ start
+ fi
+ ;;
+ restart)
+ start
+ ;;
+ try-restart)
+ if [ -f /var/lock/subsys/console ]; then
+ start
+ fi
+ ;;
+ reload|force-reload)
+ if [ -f /var/lock/subsys/console ]; then
+ start
+ else
+ RETVAL=7
+ fi
+ ;;
+ stop)
+ if [ -f /var/lock/subsys/console ]; then
+ run_cmd "Setting terminals to default values" /usr/bin/setterm -default
+ rm -f /var/lock/subsys/console
+ fi
+ ;;
+ status)
+ /usr/bin/setleds
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|status}"
+ exit 3
esac
-exit 0
+exit $RETVAL