| 1 | #!/bin/sh |
|---|
| 2 | # Copyright 2008 Bernd Steinhauser <berniyh@exherbo.org> |
|---|
| 3 | # Copyright 2008 Benjamin Kellermann |
|---|
| 4 | # Copyright 2008 Pascal Hauck |
|---|
| 5 | # Copyright 2008 Erik Streb del Toro |
|---|
| 6 | # Distributed under the terms of the GNU General Public License v3 |
|---|
| 7 | |
|---|
| 8 | # colour definitions |
|---|
| 9 | normal="\033[0m" |
|---|
| 10 | red="\033[31m" |
|---|
| 11 | orange="\033[33m" |
|---|
| 12 | green="\033[32m" |
|---|
| 13 | |
|---|
| 14 | if [ "foo`echo -e bar`" = "foobar" ];then |
|---|
| 15 | # GNU echo |
|---|
| 16 | ECHO_e="echo -e" |
|---|
| 17 | else |
|---|
| 18 | # POSIX echo |
|---|
| 19 | ECHO_e="echo" |
|---|
| 20 | fi |
|---|
| 21 | |
|---|
| 22 | # Default values |
|---|
| 23 | STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap} |
|---|
| 24 | STD_XKBMAP=${STD_XKBMAP:-de} |
|---|
| 25 | STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys} |
|---|
| 26 | STD_XMODMAP=${STD_XMODMAP:-""} |
|---|
| 27 | STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}" |
|---|
| 28 | NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on} |
|---|
| 29 | die() { |
|---|
| 30 | $ECHO_e "${red}$@${normal}" >&2 |
|---|
| 31 | $ECHO_e "${red}Die Belegung konnte nicht geändert werden.${normal}" >&2 |
|---|
| 32 | exit 1 |
|---|
| 33 | } |
|---|
| 34 | |
|---|
| 35 | set_xmodmap() { |
|---|
| 36 | if [ -f "$@" ]; then |
|---|
| 37 | xmodmap "$@" || die "Fehler beim Laden der Xmodmap $@." |
|---|
| 38 | else |
|---|
| 39 | die "Die Xmodmap-Datei ${orange}$@${red} gibt es nicht." |
|---|
| 40 | fi |
|---|
| 41 | } |
|---|
| 42 | |
|---|
| 43 | set_xkbmap() { |
|---|
| 44 | setxkbmap "$@" || die "Die xkbmap ${orange}$@${red} wurde nicht gefunden." |
|---|
| 45 | } |
|---|
| 46 | |
|---|
| 47 | set_keymap() { |
|---|
| 48 | if [ "${EUID}" = 0 ]; then |
|---|
| 49 | loadkeys "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}." |
|---|
| 50 | else |
|---|
| 51 | sudo loadkeys "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern." |
|---|
| 52 | fi |
|---|
| 53 | } |
|---|
| 54 | |
|---|
| 55 | help() { |
|---|
| 56 | cat <<HELP |
|---|
| 57 | Aufruf: $0 [-q] [Standard-X-Variante] |
|---|
| 58 | Aktiviert die Standard-Tastaturbelegung. |
|---|
| 59 | |
|---|
| 60 | NEO-X-Variante: |
|---|
| 61 | xkmbap in den meisten Fällen richtig (Standardeinstellung) |
|---|
| 62 | xmodmap nur sinnvoll, wenn eine eigene Xmodmap als Standardbelegung verwendet wird |
|---|
| 63 | |
|---|
| 64 | Das Skript erkennt, falls sich der Benutzer nur auf einer Textkonsole befindet |
|---|
| 65 | und ändert auch dort die Belegung (hierfür sind allerdings Rootrechte erforderlich!) |
|---|
| 66 | |
|---|
| 67 | -q, --quiet gibt – abgesehen von Fehlern – keine Meldungen aus |
|---|
| 68 | |
|---|
| 69 | Homepage: http://neo-layout.org/ |
|---|
| 70 | HELP |
|---|
| 71 | exit 0 |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | while [ ! -z "$1" ]; do |
|---|
| 75 | case $1 in |
|---|
| 76 | -h | --help ) |
|---|
| 77 | help |
|---|
| 78 | ;; |
|---|
| 79 | -q | --quiet ) |
|---|
| 80 | quiet=1 |
|---|
| 81 | ;; |
|---|
| 82 | * ) |
|---|
| 83 | STD_X_VARIANTE=${1-$STD_X_VARIANTE} |
|---|
| 84 | shift $# |
|---|
| 85 | ;; |
|---|
| 86 | esac |
|---|
| 87 | shift |
|---|
| 88 | done |
|---|
| 89 | |
|---|
| 90 | if [ -f "${NEO_CONFIG}" ]; then |
|---|
| 91 | . "${NEO_CONFIG}" || die "Fehler beim Verwenden der Konfigurationsdatei ${NEO_CONFIG}" |
|---|
| 92 | elif [ -f "${HOME}"/.neorc ]; then |
|---|
| 93 | . "${HOME}"/.neorc || die "Fehler beim Verwenden der Konfigurationsdatei ${HOME}/.neorc" |
|---|
| 94 | elif [ -f /etc/neo.conf ]; then |
|---|
| 95 | . /etc/neo.conf || die "Fehler beim Verwenden der Konfigurationsdatei /etc/neo.conf" |
|---|
| 96 | else |
|---|
| 97 | $ECHO_e "${red}Keine Konfigurationsdatei für NEO gefunden.\nDas Verwenden der Standardwerte kann fehlschlagen!${normal}" >&2 |
|---|
| 98 | fi |
|---|
| 99 | |
|---|
| 100 | if [ -n "$SSH_CONNECTION" ]; then |
|---|
| 101 | die "In einer ssh-session kann die Belegung nicht geändert werden." |
|---|
| 102 | fi |
|---|
| 103 | |
|---|
| 104 | if [ -z ${DISPLAY} ]; then |
|---|
| 105 | set_keymap "${STD_CONSOLE_KEYMAP}" |
|---|
| 106 | |
|---|
| 107 | if [ "${NUM_LOCK_STATUS}" = "on" ]; then |
|---|
| 108 | setleds -num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 |
|---|
| 109 | else |
|---|
| 110 | setleds +num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 |
|---|
| 111 | fi |
|---|
| 112 | |
|---|
| 113 | else |
|---|
| 114 | for modifier in 51 94; do |
|---|
| 115 | xset r ${modifier} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepeat beim Modifier ${modifier}.${normal}" >&2 |
|---|
| 116 | done |
|---|
| 117 | for deadkey in 21 35 49; do |
|---|
| 118 | xset r ${deadkey} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepead bei der toten Taste ${deakey}.${normal}" >&2 |
|---|
| 119 | done |
|---|
| 120 | |
|---|
| 121 | |
|---|
| 122 | case "${STD_X_VARIANTE}" in |
|---|
| 123 | xkbmap) |
|---|
| 124 | [ $quiet ] || echo "Die Standardbelegung wird geladen…" |
|---|
| 125 | set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}" |
|---|
| 126 | ;; |
|---|
| 127 | xmodmap) |
|---|
| 128 | if [ "${STD_XMODMAP}" ]; then |
|---|
| 129 | [ $quiet ] || echo "Die Standard-Xmodmap wird geladen…" |
|---|
| 130 | set_xmodmap "${STD_XMODMAP}" |
|---|
| 131 | else |
|---|
| 132 | $ECHO_e "${red}Es wurde keine Standard-Xmodmap definiert.${normal}" >&2 |
|---|
| 133 | die "In der Regel ist ${green}uiae${red} ohne weitere Angaben erfolgreich." |
|---|
| 134 | fi |
|---|
| 135 | ;; |
|---|
| 136 | *) |
|---|
| 137 | die "${orange}${STD_X_VARIANTE}${red} ist eine unbekannte X-Variante der NEO-Belegung." |
|---|
| 138 | ;; |
|---|
| 139 | esac |
|---|
| 140 | |
|---|
| 141 | if [ "${NUM_LOCK_STATUS}" = "on" ]; then |
|---|
| 142 | numlockx on || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 |
|---|
| 143 | else |
|---|
| 144 | numlockx off || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 |
|---|
| 145 | fi |
|---|
| 146 | fi |
|---|
| 147 | |
|---|
| 148 | if [ ! "$quiet" ]; then |
|---|
| 149 | echo |
|---|
| 150 | echo "Die Tastaturbelegung wurde auf die Standardbelegung geändert." |
|---|
| 151 | $ECHO_e "Durch ${green}asdf${normal} kehrt man wieder zur NEO-Belegung zurück." |
|---|
| 152 | fi |
|---|