| 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 "Failed to source ${NEO_CONFIG}" |
|---|
| 17 | elif [ -f "${HOME}"/.neorc ]; then |
|---|
| 18 | . "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc" |
|---|
| 19 | elif [ -f /etc/neo.conf ]; then |
|---|
| 20 | . /etc/neo.conf || die "Failed to source /etc/neo.conf" |
|---|
| 21 | else |
|---|
| 22 | echo "No configuration file found. Using default values, this might fail!" |
|---|
| 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_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}" |
|---|
| 31 | NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on} |
|---|
| 32 | |
|---|
| 33 | help() { |
|---|
| 34 | cat <<HELP |
|---|
| 35 | Aufruf: $0 [-q] |
|---|
| 36 | Aktiviert die Standard-Tastaturbelegung. |
|---|
| 37 | |
|---|
| 38 | -q, --quiet gibt – abgesehen von Fehlern – keine Meldungen aus |
|---|
| 39 | |
|---|
| 40 | NEO-Tastaturbelegung |
|---|
| 41 | Homepage: http://neo-layout.org/ |
|---|
| 42 | |
|---|
| 43 | HELP |
|---|
| 44 | exit 0 |
|---|
| 45 | } |
|---|
| 46 | |
|---|
| 47 | die() { |
|---|
| 48 | echo -e "${red}$@${normal}" >&2 |
|---|
| 49 | echo -e "${red}Die Belegung konnte nicht geändert werden.${normal}" |
|---|
| 50 | exit 1 |
|---|
| 51 | } |
|---|
| 52 | |
|---|
| 53 | set_xmodmap() { |
|---|
| 54 | if [ -f "$@" ]; then |
|---|
| 55 | xmodmap "$@" || die "Failed to set xmodmap $@." |
|---|
| 56 | else |
|---|
| 57 | die "Cannot use $@ for xmodmap." |
|---|
| 58 | fi |
|---|
| 59 | } |
|---|
| 60 | |
|---|
| 61 | set_xkbmap() { |
|---|
| 62 | setxkbmap "$@" || die "Failed to select xkbmap $@." |
|---|
| 63 | } |
|---|
| 64 | |
|---|
| 65 | set_keymap() { |
|---|
| 66 | if [ "${EUID}" = 0 ]; then |
|---|
| 67 | loadkeys "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}." |
|---|
| 68 | else |
|---|
| 69 | sudo loadkeys "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern." |
|---|
| 70 | fi |
|---|
| 71 | } |
|---|
| 72 | |
|---|
| 73 | if [ -n "$SSH_CONNECTION" ]; then |
|---|
| 74 | die "In einer ssh-session kann die Belegung nicht geändert werden." |
|---|
| 75 | fi |
|---|
| 76 | |
|---|
| 77 | if [ -z ${DISPLAY} ]; then |
|---|
| 78 | set_keymap "${STD_CONSOLE_KEYMAP}" |
|---|
| 79 | |
|---|
| 80 | if [ "${NUM_LOCK_STATUS}" = "on" ]; then |
|---|
| 81 | setleds -num || echo -e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 |
|---|
| 82 | else |
|---|
| 83 | setleds +num || echo "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2 |
|---|
| 84 | fi |
|---|
| 85 | |
|---|
| 86 | else |
|---|
| 87 | for modifier in 51 94; do |
|---|
| 88 | xset r ${modifier} || echo "Failed to set repeat for modifier ${modifier}." >&2 |
|---|
| 89 | done |
|---|
| 90 | for deadkey in 21 35 49; do |
|---|
| 91 | xset r ${deadkey} || echo "Failed to set repeat for deadkey ${deakey}." >&2 |
|---|
| 92 | done |
|---|
| 93 | |
|---|
| 94 | |
|---|
| 95 | case "${STD_X_VARIANTE}" in |
|---|
| 96 | xkbmap) |
|---|
| 97 | set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}" |
|---|
| 98 | ;; |
|---|
| 99 | xmodmap) |
|---|
| 100 | set_xkbmap de |
|---|
| 101 | set_xmodmap "${STD_XMODMAP}" |
|---|
| 102 | ;; |
|---|
| 103 | *) |
|---|
| 104 | die "Unknown standard X variant ${STD_X_VARIANTE}." |
|---|
| 105 | ;; |
|---|
| 106 | esac |
|---|
| 107 | |
|---|
| 108 | if [ "${NUM_LOCK_STATUS}" = "on" ]; then |
|---|
| 109 | numlockx on || die "Failed to set num lock status to on." |
|---|
| 110 | else |
|---|
| 111 | numlockx off || die "Failed to set num lock status to off." |
|---|
| 112 | fi |
|---|
| 113 | fi |
|---|
| 114 | |
|---|