#!/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-mini/keyboard-configuration.config ]; then /usr/share/console-setup-mini/keyboard-configuration.config || exit $? fi keyboard_present () { local kern kbdpattern class subclass protocol kern=`uname -r` case "$kern" in 1*|2.0*|2.1*|2.2*|2.3*|2.4*|2.5*) # can't check keyboard presence return 0; ;; esac [ -f /proc/bus/input/devices ] || return 0 kbdpattern='' kbdpattern="$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" if grep -i "$kbdpattern" /proc/bus/input/devices >/dev/null; then return 0 fi [ -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 return 1 } # keyboard_present () { # if there is a keyboard; then # return 0 # else # return 1 # fi # } CONFIGFILE=/etc/default/keyboard if [ "$1" = "configure" ]; 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 \ /usr/share/console-setup-mini/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; 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\"|" \ <$CONFIGFILE >$CONFIGFILE.tmp mv -f $CONFIGFILE.tmp $CONFIGFILE db_set keyboard-configuration/store_defaults_in_debconf_db true fi if type plymouth >/dev/null && plymouth --ping; then # setting the keymap breaks with plymouth in raw mode, and setting the # font will currently also break if on vgacon if type setupcon >/dev/null 2>&1; then setupcon --save-only fi elif keyboard_present; then if [ "$DISPLAY" ] && which setxkbmap >/dev/null; then setxkbmap -option '' -model "$model" "$layout" "$variant" "$options" || true # setting the font corrupts X if type setupcon >/dev/null 2>&1; then setupcon --save-only setupcon --force -k cat >&2 </dev/null 2>&1; then setupcon --force --save fi fi fi # Automatically added by dh_installinit update-rc.d -f console-setup remove >/dev/null || exit $? # End automatically added section # Automatically added by dh_installudev if [ "$1" = configure ]; then if [ -e "/etc/udev/rules.d/85_keyboard-configuration.rules" ]; then echo "Preserving user changes to /etc/udev/rules.d/85-keyboard-configuration.rules ..." if [ -e "/etc/udev/rules.d/85-keyboard-configuration.rules" ]; then mv -f "/etc/udev/rules.d/85-keyboard-configuration.rules" "/etc/udev/rules.d/85-keyboard-configuration.rules.dpkg-new" fi mv -f "/etc/udev/rules.d/85_keyboard-configuration.rules" "/etc/udev/rules.d/85-keyboard-configuration.rules" fi fi # End automatically added section if type update-initramfs >/dev/null 2>&1; then update-initramfs -u fi exit 0