#!/bin/sh # Set keymap and xkeymap usage() { cat<< EOF vkmapset - set keymap for X11 and hopefully the console too usage: vxkbset EOF } vdir=`dirname $0` . $vdir/vasm-functions check_root XORG_LIST=/etc/X11/xkb/rules/xorg.lst XORG_CONF=/etc/X11/xorg.conf XORG_VESA=/etc/X11/xorg.conf-vesa KMAP_CONF=/etc/rc.d/rc.keymap # var we want to set KEY_MODEL="" KEY_LAYOUT="" ## Map from xkb list (/etc/X11/xkb) to kmap (/usr/share/kbd/keymaps) ## Somebody complete this this please ## The fields xkb : kmap : Description xkb_kbd() { cat < $KMAP_CONF #!/bin/sh # /etc/rc.d/rc.keymap # Made by vxkbset on `date '+%a %b %e %Y'` # This file is called from: /etc/rc.d/rc.M if [ -x /usr/bin/loadkeys ]; then # You may load another keyboard keymap e.g. 'loadkeys fr' = french etc. # The keymaps are in the /usr/lib/kbd/keymaps/i386 directory. loadkeys $KEYMAP # This is so you can open other consoles using the left-[Alt] & [Up]-arrow key. echo "alt keycode 103 = Spawn_Console" | /usr/bin/loadkeys fi EOF chmod +x /etc/rc.d/rc.keymap else chmod -x /etc/rc.d/rc.keymap fi } set_xkb() { ## Change KEYBOARD_LAYOUT sed -i \ "s!.*## KEYBOARD_LAYOUT! Option \"XkbLayout\" \"$KEY_LAYOUT\" ## KEYBOARD_LAYOUT!" \ $1 ## Change KEYBOARD_MODEL sed -i \ "s!.*## KEYBOARD_MODEL! Option \"XkbModel\" \"$KEY_MODEL\" ## KEYBOARD_MODEL!" \ $1 } ################################################################## # SET KEY MODEL build_menu_modelx() { STATE=2 while read LINE; do case $STATE in 2) if [[ "$LINE" =~ "^! *model *$" ]] ; then STATE=1 fi ;; 1) if [[ "$LINE" =~ "^ *[[:alnum:]]* *[[:alpha:]]" ]]; then STATE=0 KNAME=`echo $LINE | cut -f1 -d ' '` KDESC=`echo $LINE | cut -f2- -d ' '` echo "'$KNAME'" "'$KDESC'" '\' else break fi ;; 0) if [[ "$LINE" =~ "^ *[[:alnum:]]* *[[:alnum:]]" ]]; then KNAME=`echo $LINE | cut -f1 -d ' '` KDESC=`echo $LINE | cut -f2- -d ' '` echo "'$KNAME'" "'$KDESC'" '\' else break fi ;; esac done return $STATE } menu_modelx() { TITLE="SET KEYBOARD MODEL" TEXT="\n This wizard set the keyboard model and layout for X-Window and, if possible, for text console as well. Please select your keyboard model:" DIMENSION="20 76 11" echo '$DCMD --backtitle "$BACKTITLE" --title "$TITLE" \' > $fmenu if [ "$CMD" ]; then echo '--separator " " \' >> $fmenu fi echo '--menu "$TEXT" $DIMENSION \' >> $fmenu if ! build_menu_modelx < $XORG_LIST >> $fmenu ; then msgbox "Cannot find X11 keymap list" "ERROR" return 255 fi echo '2> $freply' >> $fmenu . $fmenu status=$? [ $status != 0 ] && return $status KEY_MODEL=`cat $freply` return 0 } ################################################################## # SET KEY LAYOUT build_menu_layoutx() { STATE=2 while read LINE; do case $STATE in 2) if [[ "$LINE" =~ "^! *layout *$" ]] ; then STATE=1 fi ;; 1) if [[ "$LINE" =~ "^ *[[:alnum:]]* *[[:alpha:]]" ]]; then STATE=0 KNAME=`echo $LINE | cut -f1 -d ' '` KDESC=`echo $LINE | cut -f2- -d ' '` echo "'$KNAME'" "'$KDESC'" '\' else break fi ;; 0) if [[ "$LINE" =~ "^ *[[:alnum:]]* *[[:alnum:]]" ]]; then KNAME=`echo $LINE | cut -f1 -d ' '` KDESC=`echo $LINE | cut -f2- -d ' '` echo "'$KNAME'" "'$KDESC'" '\' else break fi ;; esac done return $STATE } menu_layoutx() { TITLE="SELECT KEYBOARD LAYOUT" TEXT="\n Please select your keyboard layout:" DIMENSION="20 76 11" echo '$WCMD --backtitle "$BACKTITLE" --title "$TITLE" \' > $fmenu if [ "$CMD" ]; then echo '--separator " " \' >> $fmenu fi echo '--menu "$TEXT" $DIMENSION \' >> $fmenu if ! build_menu_layoutx < $XORG_LIST >> $fmenu ; then msgbox "Cannot find X11 keymap list" "ERROR" return 255 fi echo '2> $freply' >> $fmenu . $fmenu status=$? [ $status != 0 ] && return $status KEY_LAYOUT=`cat $freply` return 0 } menu_finish() { infobox "Setting up keyboard ... DONE" [ -f $XORG_CONF ] && set_xkb $XORG_CONF [ -f $XORG_VESA ] && set_xkb $XORG_VESA set_kmap sleep 2 clean_exit 0 } ################################################################# # Main program wizard menu_modelx menu_layoutx menu_finish clean_exit $?