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