[PATCH] kbd.init - drugie podejście
Przemysław Białek
lobo w chello.pl
Wto, 12 Paź 2004, 19:08:29 CEST
Witam!
Dzisiaj przejrzałem jeszcze raz skrypt kbd.init, i mam do niego
kilka uwag.
1. Numlock jest ustawiany tylko wtedy gdy mamy framebuffer oraz ustawioną
zmienną $CONSOLEFONT (oprócz $NUM_LOCK). Moim zdaniem na ustawienie
numloka font, ani graficzny/tekstowy tryb pracy nie powinny mieć żadnego
wpływu. Tym bardziej, że w przypadku korzystania z SVGATextmode,
administrator może w ogóle nie ustawiać $CONSOLEFONT, tylko robić to
przez stm (wiem że to jest naciągany przykład ;).
2. SVGATextmode może byś w aktualnym pliku odpalony również wtedy gdy
mamy ustawiony framebuffer, co jest moim zdaniem błędnym zachowaniem.
3. Niepotrzebnie jest używany w kilku miejscach sed, co zauważył
Michał Kochanowicz.
4. W dziwny sposób sprawdzana była obecność defvs oraz framebuffera.
W związku z powyższym, wyskrobałem kolejnego patcha, który robi to moim
zdaniem tak jak powinno być robione. Po pierwsze, wyrzuciłem sprawdzanie
zmiennej $NUM_LOCK poza zasięg if'a $CONSOLEFONT, po drugie nie użyłem
komendy open, lecz przekierowałem wejście setleds z odpowiednich
urządzeń (chodzi o to, żeby nie trzeba było zachowywać i przywracać
aktywnej konsoli). Po drugie SVGATextmode jest odpalany tylko wtedy, gdy
nie wykryje fb. Po trzecie usunąłem niepotrzebne wywołania seda, oraz
zmieniłem sposób wykrywania devfs i fb. Numlock jest domyślnie ustawiany
na wszystkich konsolach.
Proszę o opinie na temat tych poprawek, oraz o ewentualne zaaplikowanie.
--
Pozdrawiam
Przemysław Białek
-------------- następna część ---------
--- kbd.init.orig 2004-10-12 14:30:28.863893416 +0200
+++ kbd.init 2004-10-12 19:06:32.061904584 +0200
@@ -26,12 +26,9 @@
. /etc/sysconfig/console
# 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
+ if [ -s /proc/fb ]; then
+ FB=y
+ elif [ -n "$SVGATEXTMODE" ]; then
run_cmd "Setting Text Mode $SVGATEXTMODE" SVGATextMode $SVGATEXTMODE
fi
@@ -44,46 +41,35 @@
;;
esac
+ if [ -e /dev/.devfsd -a -d /dev/vc ]; then
+ DEVICES="`cd /dev/vc; ls`"
+ pattern="/dev/vc/"
+ else
+ DEVICES="`cat /etc/inittab | grep '^[0-9]*:' | cut -f1 -d :`"
+ pattern="/dev/tty"
+ fi
+
+ [ -z "$SET_FONT_TERMINALS" ] && SET_FONT_TERMINALS="$DEVICES"
+
if [ -n "$CONSOLEFONT" ]; then
CMD="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" ]; then
- # Check for devfs (workaround: -a option don't work at all)
- if [ -d /dev/vc ]; then
- pattern="s/\/dev\/vc\///g"
- else
- pattern="s/\/dev\/tty//g"
- fi
-
+ # (assume that, in this case fb is initialized)
+ if [ -n "$FB" ]; then
# 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
-
- [ -z "$SET_FONT_TERMINALS" ] && SET_FONT_TERMINALS="$DEVICES"
+ tty=`/usr/bin/tty`
+ tty=${tty##$pattern}
for cons in $SET_FONT_TERMINALS; do
/usr/bin/open -c $cons -s -w -- $CMD
- 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
+ # restore old tty number
if [ "$tty" = "/dev/console" ]; then
- tty=1
+ tty=1
fi
/usr/bin/switchto $tty
else
@@ -96,6 +82,21 @@
fi
run_cmd "Enabling SAK sequence" /bin/sh -c "echo Control Alt keycode 101 = SAK | loadkeys"
+ if [ -n "$NUM_LOCK" ]; then
+ if is_yes "$NUM_LOCK"; then
+ show "Setting up numlock status (on)"
+ NUMLOCK_CMD="+num"
+ else
+ show "Setting up numlock status (off)"
+ NUMLOCK_CMD="-num"
+ fi
+ busy
+ for cons in $DEVICES; do
+ /usr/bin/setleds -D $NUMLOCK_CMD < "$pattern$cols"
+ done
+ ok
+ fi
+
power_option=""
if [ "$POWER_SAVE" ]; then
if [ "$BLANK_TIME" ]; then
Więcej informacji o liście dyskusyjnej pld-devel-pl