home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / sbin / install-keymap < prev    next >
Encoding:
Text File  |  2006-07-06  |  4.7 KB  |  174 lines

  1. #!/bin/sh
  2.  
  3. # Copyright (c) 1999-2001 Yann Dirson <dirson@debian.org>
  4.  
  5.  
  6. CONFDIR=/etc/console
  7. CONFFILEROOT=boottime
  8. KMAPEXT=kmap
  9.  
  10. # Set up i18n if possible
  11. TEXTDOMAIN=install-keymap
  12. export TEXTDOMAIN
  13.  
  14. if [ -x /usr/bin/gettext ]
  15. then
  16.    GETTEXT="/usr/bin/gettext -e -s"
  17. else
  18.    GETTEXT="echo -e"
  19. fi
  20.  
  21. if [ $# != 1 ]
  22. then
  23.     $GETTEXT >&2 "Usage: install-keymap [ keymap_file | NONE | KERNEL ]"
  24.     exit 1
  25. fi
  26.  
  27. if [ "$1" =  "--help" ]
  28. then
  29.     $GETTEXT "Usage: install-keymap [ keymap_file | NONE | KERNEL ]"
  30.     exit 0
  31. fi
  32. if [ "$1" = "--version" ]
  33. then
  34.    VERSION=`dpkg -l console-common | tail -n 1 | awk '{print $3}' `
  35.    #  This string can not be localized, and it is not worth trying to
  36.    echo "install-keymap: (console-common) " $VERSION
  37.    exit 0
  38. fi
  39.  
  40. keymap="$1"
  41. if [ "$keymap" = NONE ]
  42. then
  43.     exit 0
  44. fi
  45.  
  46. CONSOLE_TYPE=`fgconsole 2>/dev/null`
  47. if  [ "$?" != "0" ]
  48. then
  49.    $GETTEXT >&2 "Deferring virtual terminal setup until console accessible."
  50.    exit 0
  51. fi
  52.  
  53. check_if_serial_console()
  54. {
  55.     if [ $CONSOLE_TYPE = "serial" ] 
  56.     then
  57.        $GETTEXT >&2 "Warning: cannot install keymap on a serial console.\n deferring until non-serial console present."
  58.        exit 0
  59.     fi
  60. }
  61.  
  62. if [ ! -x /bin/loadkeys ]
  63. then
  64.   $GETTEXT >&2 "Warning: no console utilities installed yet.\n deferring keymap setting until either console-tools or kbd is installed."
  65.   exit 0
  66. fi
  67.  
  68. do_preserving_keymap()
  69. # execute shell command-line preserving the keymap
  70. {
  71.     # save keymap
  72.     TMP=`tempfile`
  73.     if ! /usr/bin/dumpkeys >${TMP}; then
  74.         check_if_serial_console
  75.     $GETTEXT >&2 "Failed to dump keymap!"
  76.     $GETTEXT >&2 "This might be because your console cannot be opened.  Perhaps you don't have\na video card, are connected via the serial console or ssh.\nNot loading keymap!"
  77.  
  78.          rm -f ${TMP}
  79.          exit 0
  80.     fi
  81.  
  82.     if ! (eval "$*" && /bin/loadkeys -q ${TMP}); then
  83.          check_if_serial_console
  84.          $GETTEXT >&2 "Failed to preserve keymap!"
  85.          rm -f ${TMP}
  86.          exit 0
  87.     fi
  88.  
  89.     rm -f ${TMP}
  90. }
  91.  
  92.  # Be extra safe
  93. mkdir -p ${CONFDIR}
  94.  
  95. NEW=`tempfile --suffix .gz`
  96. CONFFILE=${CONFDIR}/${CONFFILEROOT}.${KMAPEXT}.gz
  97. OLD_CONFFILE=${CONFDIR}/${CONFFILEROOT}.old.${KMAPEXT}.gz
  98.  
  99.  
  100. backup()
  101. {
  102.     # If symlink, then don't overwrite, just provide new one
  103.     if [ -h ${CONFFILE} ]
  104.     then
  105.     mv $NEW ${CONFFILE}.dpkg
  106.     $GETTEXT >&2 "conffile ${CONFFILE} is a symlink : not overwriting"
  107.     $GETTEXT >&2 "It is recommended that ${CONFFILE} is not a symlink; instead\nedit /etc/console-tools/remap to include any local changes."
  108.     $GETTEXT >&2 "The new keymap has been placed in ${CONFFILE}.dpkg ;\nPlease move it as required."
  109.     fi
  110.     
  111.     # Keep a backup if no backup already exists
  112.     [ -f ${CONFFILE} -a ! -f ${OLD_CONFFILE} ] && 
  113.     mv ${CONFFILE} ${OLD_CONFFILE}
  114.     # Also backup this one, although it should probably not exist
  115.     [ -f ${CONFFILE}%.gz} -a ! -r ${OLD_CONFFILE%.gz} ] && 
  116.     mv ${CONFFILE%.gz} ${OLD_CONFFILE%.gz}
  117.     
  118.     if [ "$keymap" != KERNEL -a -f ${NEW} ]
  119.     then
  120.     mv $NEW $CONFFILE
  121.     fi
  122.     # Make sure perms are correct 
  123.     [ -f ${CONFFILE} ] && chmod -f 644 ${CONFFILE} || true
  124.     [ -f ${OLD_CONFFILE} ] && chmod -f 644 ${OLD_CONFFILE} || true
  125. }
  126.  
  127. if [ "$keymap" = KERNEL ]
  128. then
  129.     backup
  130.     rm -f ${CONFFILE}
  131. else
  132.     if [ "`dpkg --print-installation-architecture`" = "arm" ] && 
  133.     grep -i '^Hardware.*: \(Acorn-\|RiscStation-\)' /proc/cpuinfo >/dev/null &&
  134.     find /usr/share/keymaps/i386/ -type f -name ${keymap} -o \
  135.             -name ${keymap}.gz -o -name ${keymap}.kmap.gz
  136.     then
  137.     # we're pretty sure now we were asked to load a PC keymap on a RiscPC
  138.     $GETTEXT >&2 "Notice: doing keycode translation to use PC keymap on RiscPC"
  139.     TRANSLATOR=/usr/share/console/ps2-to-riscpc
  140.     else
  141.     TRANSLATOR=cat
  142.     fi
  143.  
  144.     # Running the translator at this point is the best way to look for problems, but
  145.     # running it prior to "loadkeys" (where it would belong really) is mostly not possible
  146.     # because of include files and include-like directives.
  147.     # It may turn out that we really need to do keymap-file expansion differently because
  148.     # of this.  Sigh.
  149.     do_preserving_keymap "loadkeys -q $keymap ; dumpkeys | $TRANSLATOR | gzip -9n > $NEW"
  150.  
  151.     # if diff is available, use it to install only if needed
  152.     if [ -r $CONFFILE -a -x /usr/bin/diff ]
  153.     then
  154.     if diff -q $CONFFILE $NEW >/dev/null
  155.     then
  156.         rm $NEW
  157.     else
  158.         backup
  159.     fi
  160.     else
  161.     backup
  162.     fi
  163.  
  164.     if ! /bin/loadkeys -q $CONFFILE; then
  165.         $GETTEXT >&2 "Failed to load keymap!"
  166.     fi
  167.     # Store md5sum. debconf code uses this to track keymaps it has installed,
  168.     # so it doesn't change ones installeed by user. Its compressed, so we
  169.     # don't want to use the usual conffiles mechanism.
  170.     . /usr/share/debconf/confmodule
  171.     MD=`md5sum $CONFFILE | cut -f1 -d' ' `
  172.     db_set console-data/bootmap-md5sum $MD
  173. fi
  174.