[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