| 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 | if [ -f "${NEO_CONFIG}" ]; then |
|---|
| 9 | . "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}" |
|---|
| 10 | elif [ -f "${HOME}"/.neorc ]; then |
|---|
| 11 | . "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc" |
|---|
| 12 | elif [ -f /etc/neo.conf ]; then |
|---|
| 13 | . /etc/neo.conf || die "Failed to source /etc/neo.conf" |
|---|
| 14 | else |
|---|
| 15 | echo "No configuration file found. Using default values, this might fail!" |
|---|
| 16 | fi |
|---|
| 17 | |
|---|
| 18 | # Default paths |
|---|
| 19 | PATH_XMODMAP=${PATH_XMODMAP:-/usr/bin/xmodmap} |
|---|
| 20 | PATH_SETXKBMAP=${PATH_SETXKBMAP:-/usr/bin/setxkbmap} |
|---|
| 21 | PATH_LOADKEYS=${PATH_LOADKEYS:-/usr/bin/loadkeys} |
|---|
| 22 | PATH_SUDO=${PATH_SUDO:-/usr/bin/sudo} |
|---|
| 23 | PATH_SETLEDS=${PATH_SETLEDS:-/usr/bin/setleds} |
|---|
| 24 | PATH_NUMLOCKX=${PATH_NUMLOCKX:-/usr/bin/numlockx} |
|---|
| 25 | PATH_XSET=${PATH_XSET:-/usr/bin/xset} |
|---|
| 26 | |
|---|
| 27 | # Default values |
|---|
| 28 | NEO_X_VARIANTE=${NEO_X_VARIANTE:-xkbmap} |
|---|
| 29 | NEO_XKBMAP=${NEO_XKBMAP:-de} |
|---|
| 30 | NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo} |
|---|
| 31 | NEO_XMODMAP="${NEO_XMODMAP:-/usr/share/neo-layout/xmodmap/neo_de.xmodmap}" |
|---|
| 32 | NEO_CONSOLE_KEYMAP="${NEO_CONSOLE_KEYMAP:-/usr/share/keymaps/i386/neo/neo.map}" |
|---|
| 33 | |
|---|
| 34 | die() { |
|---|
| 35 | echo "$@" >&2 |
|---|
| 36 | exit 1 |
|---|
| 37 | } |
|---|
| 38 | |
|---|
| 39 | set_xmodmap() { |
|---|
| 40 | if [ -e "${PATH_XMODMAP}" ]; then |
|---|
| 41 | if [ -f "$@" ]; then |
|---|
| 42 | "${PATH_XMODMAP}" "$@" || die "Failed to set xmodmap $@." |
|---|
| 43 | else |
|---|
| 44 | die "Cannot use $@ for xmodmap." |
|---|
| 45 | fi |
|---|
| 46 | else |
|---|
| 47 | die "xmodmap not found, cannot set xmodmap." |
|---|
| 48 | fi |
|---|
| 49 | } |
|---|
| 50 | |
|---|
| 51 | set_xkbmap() { |
|---|
| 52 | if [ -e "${PATH_SETXKBMAP}" ]; then |
|---|
| 53 | "${PATH_SETXKBMAP}" "$@" || die "Failed to select xkbmap $@." |
|---|
| 54 | else |
|---|
| 55 | die "setxkbmap not found, cannot set xkbmap." |
|---|
| 56 | fi |
|---|
| 57 | } |
|---|
| 58 | |
|---|
| 59 | set_keymap() { |
|---|
| 60 | if [ -e "${PATH_LOADKEYS}" ]; then |
|---|
| 61 | if [ -f "$@" ]; then |
|---|
| 62 | if [ "${EUID}" = 0 ]; then |
|---|
| 63 | "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap $@." |
|---|
| 64 | elif [ -e "${PATH_SUDO}" ]; then |
|---|
| 65 | "${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap using sudo." |
|---|
| 66 | else |
|---|
| 67 | die "You need root priviliges to change the keymap." |
|---|
| 68 | fi |
|---|
| 69 | else |
|---|
| 70 | die "keymap file $@ does not exist." |
|---|
| 71 | fi |
|---|
| 72 | else |
|---|
| 73 | die "loadkeys not found, cannot set keymap." |
|---|
| 74 | fi |
|---|
| 75 | } |
|---|
| 76 | |
|---|
| 77 | if [ -n "$SSH_CONNECTION" ]; then |
|---|
| 78 | die "Cannot set keybord layout in a ssh session." |
|---|
| 79 | fi |
|---|
| 80 | |
|---|
| 81 | if [ -z ${DISPLAY} ]; then |
|---|
| 82 | set_keymap "${NEO_CONSOLE_KEYMAP}" |
|---|
| 83 | |
|---|
| 84 | if [ -e "${PATH_SETLEDS}" ]; then |
|---|
| 85 | "${PATH_SETLEDS}" -num || die "Failed to set NUM status." |
|---|
| 86 | else |
|---|
| 87 | die "setleds does not exist, cannot set NUM status." |
|---|
| 88 | fi |
|---|
| 89 | else |
|---|
| 90 | if [ -e "${PATH_NUMLOCKX}" ]; then |
|---|
| 91 | "${PATH_NUMLOCKX}" off || die "Failed to turn off Numlock." |
|---|
| 92 | else |
|---|
| 93 | die "numlockx not found, cannot turn off Numlock." |
|---|
| 94 | fi |
|---|
| 95 | |
|---|
| 96 | if [ -e "${PATH_XSET}" ]; then |
|---|
| 97 | for modifier in 51 94; do |
|---|
| 98 | "${PATH_XSET}" -r ${modifier} || die "Failed to unset repeat for modifier ${modifier}." |
|---|
| 99 | done |
|---|
| 100 | for deadkey in 21 35 49; do |
|---|
| 101 | "${PATH_XSET}" -r ${deadkey} || die "Failed to unset repeat for deadkey ${deakey}." |
|---|
| 102 | done |
|---|
| 103 | else |
|---|
| 104 | die "xset not found, cannot set modifiers and dead keys." |
|---|
| 105 | fi |
|---|
| 106 | |
|---|
| 107 | case "${NEO_X_VARIANTE}" in |
|---|
| 108 | xkbmap) |
|---|
| 109 | set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}" |
|---|
| 110 | ;; |
|---|
| 111 | xmodmap) |
|---|
| 112 | set_xkbmap ie |
|---|
| 113 | set_xmodmap "${NEO_XMODMAP}" |
|---|
| 114 | ;; |
|---|
| 115 | *) |
|---|
| 116 | die "Unknown Neo X variant ${NEO_X_VARIANTE}." |
|---|
| 117 | ;; |
|---|
| 118 | esac |
|---|
| 119 | fi |
|---|
| 120 | |
|---|