#!/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 # colours in the Bash normal="\033[0m" red="\033[31m" orange="\033[33m" green="\033[32m" if [ -f "${NEO_CONFIG}" ]; then . "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}" elif [ -f "${HOME}"/.neorc ]; then . "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc" elif [ -f /etc/neo.conf ]; then . /etc/neo.conf || die "Failed to source /etc/neo.conf" else echo "No configuration file found. Using default values, this might fail!" fi # Default paths PATH_XMODMAP=${PATH_XMODMAP:-/usr/bin/xmodmap} PATH_SETXKBMAP=${PATH_SETXKBMAP:-/usr/bin/setxkbmap} PATH_LOADKEYS=${PATH_LOADKEYS:-loadkeys} PATH_SUDO=${PATH_SUDO:-/usr/bin/sudo} PATH_SETLEDS=${PATH_SETLEDS:-setleds} PATH_NUMLOCKX=${PATH_NUMLOCKX:-/usr/bin/numlockx} PATH_XSET=${PATH_XSET:-/usr/bin/xset} # Default values STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap} STD_XKBMAP=${STD_XKBMAP:-de} STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys} STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}" NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on} help() { cat <&2 echo -e "${red}Die Belegung konnte nicht geändert werden.${normal}" exit 1 } set_xmodmap() { if [ -e "${PATH_XMODMAP}" ]; then if [ -f "$@" ]; then "${PATH_XMODMAP}" "$@" || die "Failed to set xmodmap $@." else die "Cannot use $@ for xmodmap." fi else die "xmodmap not found, cannot set xmodmap." fi } set_xkbmap() { if [ -e "${PATH_SETXKBMAP}" ]; then "${PATH_SETXKBMAP}" "$@" || die "Failed to select xkbmap $@." else die "setxkbmap not found, cannot set xkbmap." fi } set_keymap() { if [ "${EUID}" = 0 ]; then "${PATH_LOADKEYS}" "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}." elif [ -e "${PATH_SUDO}" ]; then "${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern." else die "Die Belegung auf der Textkonsole kann nur mir Rootrechten geändert werden." fi } if [ -n "$SSH_CONNECTION" ]; then die "In einer ssh-session kann die Belegung nicht geändert werden." fi if [ -z ${DISPLAY} ]; then set_keymap "${STD_CONSOLE_KEYMAP}" if [ "${NUM_LOCK_STATUS}" = "on" ]; then "${PATH_SETLEDS}" -num || echo -e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 else "${PATH_SETLEDS}" +num || echo "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 fi else if [ -e "${PATH_XSET}" ]; then for modifier in 51 94; do "${PATH_XSET}" r ${modifier} || echo "Failed to set repeat for modifier ${modifier}." >&2 done for deadkey in 21 35 49; do "${PATH_XSET}" r ${deadkey} || echo "Failed to set repeat for deadkey ${deakey}." >&2 done else echo "xset not found, cannot set modifiers and dead keys." >&2 fi case "${STD_X_VARIANTE}" in xkbmap) set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}" ;; xmodmap) set_xkbmap de set_xmodmap "${STD_XMODMAP}" ;; *) die "Unknown standard X variant ${STD_X_VARIANTE}." ;; esac if [ -e "${PATH_NUMLOCKX}" ]; then if [ "${NUM_LOCK_STATUS}" = "on" ]; then "${PATH_NUMLOCKX}" on || die "Failed to set num lock status to on." else "${PATH_NUMLOCKX}" off || die "Failed to set num lock status to off." fi else die "numlockx not found, cannot turn off Numlock." fi fi