#!/bin/sh # Copyright 2008 Bernd Steinhauser <berniyh@exherbo.org> # 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 <<HELP Aufruf: $0 [-q] [Standard-X-Variante] Aktiviert die Standard-Tastaturbelegung. NEO-X-Variante: xkmbap in den meisten Fällen richtig (Standardeinstellung) xmodmap nur sinnvoll, wenn eine eigene Xmodmap als Standardbelegung verwendet wird Das Skript erkennt, falls sich der Benutzer nur auf einer Textkonsole befindet und ändert auch dort die Belegung (hierfür sind allerdings Rootrechte erforderlich!) -q, --quiet gibt – abgesehen von Fehlern – keine Meldungen aus Homepage: http://neo-layout.org/ HELP exit 0 } if [ -f "${NEO_CONFIG}" ]; then . "${NEO_CONFIG}" || die "Fehler beim Verwenden der Konfigurationsdatei ${NEO_CONFIG}" elif [ -f "${HOME}"/.neorc ]; then . "${HOME}"/.neorc || die "Fehler beim Verwenden der Konfigurationsdatei ${HOME}/.neorc" elif [ -f /etc/neo.conf ]; then . /etc/neo.conf || die "Fehler beim Verwenden der Konfigurationsdatei /etc/neo.conf" else $ECHO_e "${red}Keine Konfigurationsdatei für NEO gefunden.\nDas Verwenden der Standardwerte kann fehlschlagen!${normal}" >&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