#!/bin/bash # 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 #prevent CapsLock while ›asdf‹ is running xmodmap -e "clear Lock" 2> /dev/null # colours in the Bash 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 help() { cat <<HELP Aufruf: $0 [-q] [NEO-X-Variante] Aktiviert die NEO-Tastaturbelegung. NEO-X-Variante: xkmbap i.d.R. wenn Rootrechte vorhanden sind xmodmap i.d.R. wenn NEO nur für einen Benutzer verwendet werden soll alternative sollte geladen werden, wenn das Laden der Xmodmap fehl schlägt xprog falls ältere X-Programme (wie xedit oder xfig) verwendet werden evdev falls der evdev-Treiber 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 } while [ ! -z "$1" ]; do case $1 in -h | --help ) help ;; -q | --quiet ) quiet=1 ;; * ) NEO_X_VARIANTE=${1-$NEO_X_VARIANTE} shift $# ;; esac shift done 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 # Default values NEO_XKBMAP=${NEO_XKBMAP:-de} NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo} NEO_XMODMAP=${NEO_XMODMAP:-$HOME/neo/neo_de.xmodmap} NEO_XMODMAP_XPROG=${NEO_XMODMAP_XPROG:-$HOME/neo/neo_de_x-prog.xmodmap} NEO_XMODMAP_ALTERNATIVE=${NEO_XMODMAP_ALTERNATIVE:-$HOME/neo/neo_de_alternative.xmodmap} NEO_XMODMAP_EVDEV=${NEO_XMODMAP_EVDEV:-$HOME/neo/neo_de_evdev.xmodmap} NEO_CONSOLE_KEYMAP=${NEO_CONSOLE_KEYMAP:-$HOME/neo/neo.map} die() { $ECHO_e "${red}$@${normal}" >&2 $ECHO_e "${red}Die Belegung konnte nicht auf NEO geändert werden.${normal}" >&2 exit 1 } die2() { set_xkbmap de die "Fehler beim Laden der Xmodmap $@." } numlock_manually() { $ECHO_e "${orange}$1${normal}" >&2 $ECHO_e "Bitte jetzt ${orange}NumLock${normal} von Hand auf ${orange}$2${normal} schalten und ${orange}Enter${normal} drücken um fortzufahren…" >&2 read enter } set_xmodmap() { if [ -f "$@" ]; then set_xkbmap lv xmodmap "$@" || die2 $@ 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 [ -f "$@" ]; then 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 else die "Die keymap-Datei ${orange}$@${red} gibt es nicht." fi } if [ -n "$SSH_CONNECTION" ]; then die "In einer ssh-session kann die Belegung nicht geändert werden." fi if [ -z ${DISPLAY} ]; then setleds +num || numlock_manually "Fehler beim setzen des Status von NumLock." an setleds -caps set_keymap "${NEO_CONSOLE_KEYMAP}" else numlockx off || numlock_manually "Fehler beim setzen des Status von NumLock." aus for modifier in 51 94; do xset -r ${modifier} || $ECHO_e "${orange}Fehler beim Ausschalten von Autorepeat beim Modifier ${modifier}.${normal}" >&2 done for deadkey in 21 35 49; do xset -r ${deadkey} || $ECHO_e "${orange}Fehler beim Ausschalten von Autorepead bei der toten Taste ${deakey}.${normal}" >&2 done if [ -z $NEO_X_VARIANTE ]; then if [ -f $NEO_XMODMAP ]; then NEO_X_VARIANTE=xmodmap else NEO_X_VARIANTE=xkbmap fi fi case "${NEO_X_VARIANTE}" in xkbmap) [ $quiet ] || echo "Die xkbmap wird geladen…" set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}" ;; xmodmap) [ $quiet ] || echo "Das Laden der Xmodmap kann einige Sekunden dauern…" set_xmodmap "${NEO_XMODMAP}" ;; xprog) [ $quiet ] || echo "Das Laden der Xmodmap (Variante für X-Programme) kann einige Sekunden dauern…" set_xmodmap "${NEO_XMODMAP_XPROG}" ;; alternative) [ $quiet ] || echo "Das Laden der alternativen Xmodmap kann einige Sekunden dauern…" set_xmodmap "${NEO_XMODMAP_ALTERNATIVE}" ;; evdev) [ $quiet ] || echo "Das Laden der Xmodmap (evdev-Variante) kann einige Sekunden dauern…" set_xmodmap "${NEO_XMODMAP_EVDEV}" ;; *) die "${NEO_X_VARIANTE} ist eine unbekannte X-Variante der NEO-Belegung." ;; esac fi if [ ! "$quiet" ]; then echo echo "Die Tastaturbelegung wurde auf NEO geändert." $ECHO_e "Mit ${green}neo${normal} und ${green}num${normal} erhält man ein Bild der NEO-Belegung." $ECHO_e "Durch ${green}uiae${normal} kehrt man wieder zur Standardbelegung zurück." fi