#!/bin/sh set -e # Source debconf library. . /usr/share/debconf/confmodule # The same as /usr/bin/which - in order to make "which" available before # /usr is mounted which () { local IFS IFS=: for i in $PATH; do if [ -x "$i/$1" ]; then echo "$i/$1" return 0 fi done return 1 } # In d-i the config script is not executed automatically if [ -f /usr/share/console-setup/keyboard-configuration.config ]; then /usr/share/console-setup/keyboard-configuration.config || exit $? fi keyboard_present () { local kern kbdpattern class subclass protocol kern=`uname -r` case "$kern" in 2.0*|2.1*|2.2*|2.3*|2.4*|2.5*) # can't check keyboard presence return 0; ;; esac [ -d /sys/bus/usb/devices ] || return 0 for d in /sys/bus/usb/devices/*:*; do class=$(cat "$d/bInterfaceClass") # 03 = Human Interface Device subclass=$(cat "$d/bInterfaceSubClass") # 01 = Boot Interface Subclass protocol=$(cat "$d/bInterfaceProtocol") # 01 = Keyboard case "$class:$subclass:$protocol" in 03:01:01) return 0 ;; esac done # For Bluetooth keyboards one has to check the class of the device # -- it has to be 0x000540 or 0x002540. I don't how to make the # required test, so instead we test (unreliably) for a string # bluetooth.*keyboard in /proc/bus/input/devices. [ -f /proc/bus/input/devices ] || return 0 kbdpattern="AT Set \|AT Translated Set\|AT Raw Set" kbdpattern="$kbdpattern\|Atari Keyboard" kbdpattern="$kbdpattern\|Amiga Keyboard" kbdpattern="$kbdpattern\|HIL keyboard" kbdpattern="$kbdpattern\|ADB keyboard" kbdpattern="$kbdpattern\|Sun Type" kbdpattern="$kbdpattern\|bluetooth.*keyboard" if grep -i "$kbdpattern" /proc/bus/input/devices >/dev/null; then return 0 fi return 1 } # keyboard_present () { # if there is a keyboard; then # return 0 # else # return 1 # fi # } CONFIGFILE=/etc/default/keyboard if [ "$1" = "configure" -a ! -L "$CONFIGFILE" ]; then db_get keyboard-configuration/modelcode model="$RET" db_get keyboard-configuration/layoutcode layout="$RET" db_get keyboard-configuration/variantcode variant="$RET" db_get keyboard-configuration/optionscode options="$RET" if [ ! -e $CONFIGFILE ]; then cat /usr/share/console-setup/keyboard \ 2>/dev/null >$CONFIGFILE || true fi # Ensure we do not mess up the config file's ownership and permissions. cp -a -f $CONFIGFILE $CONFIGFILE.tmp # If the admin deleted or commented some variables but then set # them via debconf, (re-)add them to the conffile. for var in XKBMODEL XKBLAYOUT XKBVARIANT XKBOPTIONS BACKSPACE; do if ! grep "^ *${var}=" $CONFIGFILE >/dev/null; then echo "${var}=" >>$CONFIGFILE fi done sed \ -e "s|^ *XKBMODEL=.*|XKBMODEL=\"$model\"|" \ -e "s|^ *XKBLAYOUT=.*|XKBLAYOUT=\"$layout\"|" \ -e "s|^ *XKBVARIANT=.*|XKBVARIANT=\"$variant\"|" \ -e "s|^ *XKBOPTIONS=.*|XKBOPTIONS=\"$options\"|" \ -e "s|^ *BACKSPACE=.*|BACKSPACE=\"${BACKSPACE:-guess}\"|" \ <$CONFIGFILE >$CONFIGFILE.tmp mv -f $CONFIGFILE.tmp $CONFIGFILE db_set keyboard-configuration/store_defaults_in_debconf_db true fi if \ [ -d /lib/debian-installer.d ] && keyboard_present then if [ "$DISPLAY" ] && which setxkbmap >/dev/null; then setxkbmap -option '' -model "$model" "$layout" "$variant" "$options" else case "`uname`" in GNU) [ ! -f /var/run/hurd-console.pid ] || kill `cat /var/run/hurd-console.pid` ;; *) setupcon --force --save ;; esac fi fi if ! [ -d /lib/debian-installer.d ]; then dpkg-maintscript-helper rm_conffile \ /etc/init.d/keyboard-setup 1.138~ -- "$@" dpkg-maintscript-helper rm_conffile \ /etc/init.d/console-setup 1.138~ -- "$@" fi