#!/bin/sh # Copyright 2008 Bernd Steinhauser # Copyright 2008 Benjamin Kellermann # Copyright 2008 Pascal Hauck # Copyright 2008 Erik Streb del Toro # Distributed under the terms of the GNU General Public License v3 # colour definitions normal="\033[0m" red="\033[31m" orange="\033[33m" green="\033[32m" if [ "foo`echo -e bar`" = "foobar" ];then # GNU echo ECHO_e="echo -e" else # POSIX echo ECHO_e="echo" fi # Default values STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap} STD_XKBMAP=${STD_XKBMAP:-de} STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys} STD_XMODMAP=${STD_XMODMAP:-""} STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}" NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on} die() { $ECHO_e "${red}$@${normal}" >&2 $ECHO_e "${red}Die Belegung konnte nicht geändert werden.${normal}" >&2 exit 1 } set_xmodmap() { if [ -f "$@" ]; then xmodmap "$@" || die "Fehler beim Laden der Xmodmap $@." else die "Die Xmodmap-Datei ${orange}$@${red} gibt es nicht." fi } set_xkbmap() { setxkbmap "$@" || die "Die xkbmap ${orange}$@${red} wurde nicht gefunden." } set_keymap() { if [ "${EUID}" = 0 ]; then loadkeys "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}." else sudo loadkeys "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern." fi } help() { cat <&2 fi if [ -n "$SSH_CONNECTION" ]; then die "In einer ssh-session kann die Belegung nicht geändert werden." fi while [ ! -z "$1" ]; do case $1 in -h | --help ) help ;; -q | --quiet ) quiet=1 ;; * ) STD_X_VARIANTE=${1-$STD_X_VARIANTE} shift $# ;; esac shift done if [ -z ${DISPLAY} ]; then set_keymap "${STD_CONSOLE_KEYMAP}" if [ "${NUM_LOCK_STATUS}" = "on" ]; then setleds -num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 else setleds +num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 fi else for modifier in 51 94; do xset r ${modifier} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepeat beim Modifier ${modifier}.${normal}" >&2 done for deadkey in 21 35 49; do xset r ${deadkey} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepead bei der toten Taste ${deakey}.${normal}" >&2 done case "${STD_X_VARIANTE}" in xkbmap) [ $quiet ] || echo "Die Standardbelegung wird geladen…" set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}" ;; xmodmap) if [ "${STD_XMODMAP}" ]; then [ $quiet ] || echo "Die Standard-Xmodmap wird geladen…" set_xmodmap "${STD_XMODMAP}" else $ECHO_e "${red}Es wurde keine Standard-Xmodmap definiert.${normal}" >&2 die "In der Regel ist ${green}uiae${red} ohne weitere Angaben erfolgreich." fi ;; *) die "${orange}${STD_X_VARIANTE}${red} ist eine unbekannte X-Variante der Neo-Belegung." ;; esac if [ "${NUM_LOCK_STATUS}" = "on" ]; then numlockx on || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 else numlockx off || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 fi fi if [ ! "$quiet" ]; then echo echo "Die Tastaturbelegung wurde auf die Standardbelegung geändert." $ECHO_e "Durch ${green}asdf${normal} kehrt man wieder zur Neo-Belegung zurück." fi