diff options
Diffstat (limited to '')
-rwxr-xr-x | linux/bin/asdf | 151 |
1 files changed, 100 insertions, 51 deletions
diff --git a/linux/bin/asdf b/linux/bin/asdf index 1eb479a..5c50717 100755 --- a/linux/bin/asdf +++ b/linux/bin/asdf @@ -1,71 +1,120 @@ #!/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 +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}/neo.conf" +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 -################################################################################ -####################### persönliche Einstellungen ############################## -################################################################################ -# hier einstellen, welche Variante von Neo geladen werden soll: -# xkbmap, xmoadmap, xprog, alternative, evdev -NEO_X_VARIANTE="xkbmap" - -# hier angeben, wo sich die Neo-Dateien befinden: -PFAD="$HOME/neo" - -# Ort, wo sich die Konsolen-Belegungen befinden: -CONSOLE_KEYMAP="$PFAD/neo.map" -################################################################################ -################################################################################ -################################################################################ +# Default paths +PATH_XMODMAP=${PATH_XMODMAP:-/usr/bin/xmodmap} +PATH_SETXKBMAP=${PATH_SETXKBMAP:-/usr/bin/setxkbmap} +PATH_LOADKEYS=${PATH_LOADKEYS:-/usr/bin/loadkeys} +PATH_SUDO=${PATH_SUDO:-/usr/bin/sudo} +PATH_SETLEDS=${PATH_SETLEDS:-/usr/bin/setleds} +PATH_NUMLOCKX=${PATH_NUMLOCKX:-/usr/bin/numlockx} +PATH_XSET=${PATH_XSET:-/usr/bin/xset} +# Default values +NEO_X_VARIANTE=${NEO_X_VARIANTE:-xkbmap} +NEO_XKBMAP=${NEO_XKBMAP:-de} +NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo} +NEO_XMODMAP="${NEO_XMODMAP:-/usr/share/neo-layout/xmodmap/neo_de.xmodmap}" +NEO_CONSOLE_KEYMAP="${NEO_CONSOLE_KEYMAP:-/usr/share/keymaps/i386/neo/neo.map}" -XMODMAP="$PFAD/neo_de.xmodmap" -XMODMAP_XPROG="$PFAD/neo_de_x-prog.xmodmap" -XMODMAP_ALTERNATIVE="$PFAD/neo_de_alternative.xmodmap" -XMODMAP_EVDEV="$PFAD/neo_de_evdev.xmodmap" +die() { + echo "$@" >&2 + 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 +} -NEO_X_VARIANTE=${1-$NEO_X_VARIANTE} +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 [ -e "${PATH_LOADKEYS}" ]; then + if [ -f "$@" ]; then + if [ "${EUID}" = 0 ]; then + "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap $@." + elif [ -e "${PATH_SUDO}" ]; then + "${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap using sudo." + else + die "You need root priviliges to change the keymap." + fi + else + die "keymap file $@ does not exist." + fi + else + die "loadkeys not found, cannot set keymap." + fi +} if [ -n "$SSH_CONNECTION" ]; then - echo -n "Dude, du bist in einer SSH-Session. Wie soll ich das " - echo "Tastaturlayout hier ändern?" - exit 1 + die "Cannot set keybord layout in a ssh session." fi -if [ -z "$DISPLAY" ]; then - echo -n "Um das Tastaturlayout auf der Textkonsole zu ändern, muss man" - echo " root-Rechte besitzen!" - sudo loadkeys $CONSOLE_KEYMAP - setleds +num + +if [ -z ${DISPLAY} ]; then + set_keymap "${NEO_CONSOLE_KEYMAP}" + + if [ -e "${PATH_SETLEDS}" ]; then + "${PATH_SETLEDS}" -num || die "Failed to set NUM status." + else + die "setleds does not exist, cannot set NUM status." + fi else - numlockx off - xset -r 51; xset -r 94 # Modifier - xset -r 21; xset -r 35; xset -r 49 # tote Tasten (dead keys) - - case $NEO_X_VARIANTE in + if [ -e "${PATH_NUMLOCKX}" ]; then + "${PATH_NUMLOCKX}" off || die "Failed to turn off Numlock." + else + die "numlockx not found, cannot turn off Numlock." + fi + + if [ -e "${PATH_XSET}" ]; then + for modifier in 51 94; do + "${PATH_XSET}" -r ${modifier} || die "Failed to unset repeat for modifier ${modifier}." + done + for deadkey in 21 35 49; do + "${PATH_XSET}" -r ${deadkey} || die "Failed to unset repeat for deadkey ${deakey}." + done + else + die "xset not found, cannot set modifiers and dead keys." + fi + + case "${NEO_X_VARIANTE}" in xkbmap) - setxkbmap de neo + set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}" ;; xmodmap) - setxkbmap ie - xmodmap $XMODMAP - ;; - xprog) - setxkbmap ie - xmodmap $XMODMAP_XPROG - ;; - alternative) - setxkbmap ie - xmodmap $XMODMAP_ALTERNATIVE - ;; - evdev) - setxkbmap ie - xmodmap $XMODMAP_EVDEV + set_xkbmap ie + set_xmodmap "${NEO_XMODMAP}" ;; *) - echo -n "Die Variante »${NEO_X_VARIANTE}« ist keine " - echo "bekannte X-Variante des NEO-Layouts." - exit 1 + die "Unknown Neo X variant ${NEO_X_VARIANTE}." ;; esac fi + |