| 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_X_VARIANTE=${1-$NEO_X_VARIANTE} |
|---|
| 30 | NEO_XKBMAP=${NEO_XKBMAP:-de} |
|---|
| 31 | NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo} |
|---|
| 32 | NEO_XMODMAP=${NEO_XMODMAP:-$HOME/neo/neo_de.xmodmap} |
|---|
| 33 | NEO_XMODMAP_XPROG=${NEO_XMODMAP_XPROG:-$HOME/neo/neo_de_x-prog.xmodmap} |
|---|
| 34 | NEO_XMODMAP_ALTERNATIVE=${NEO_XMODMAP_ALTERNATIVE:-$HOME/neo/neo_de_alternative.xmodmap} |
|---|
| 35 | NEO_XMODMAP_EVDEV=${NEO_XMODMAP_EVDEV:-$HOME/neo/neo_de_evdev.xmodmap} |
|---|
| 36 | NEO_CONSOLE_KEYMAP=${NEO_CONSOLE_KEYMAP:-$HOME/neo/neo} # for $HOME/neo/neo.map (without the „.map“) |
|---|
| 37 | |
|---|
| 38 | die() { |
|---|
| 39 | echo "$@" >&2 |
|---|
| 40 | exit 1 |
|---|
| 41 | } |
|---|
| 42 | |
|---|
| 43 | set_xmodmap() { |
|---|
| 44 | if [ -e "${PATH_XMODMAP}" ]; then |
|---|
| 45 | if [ -f "$@" ]; then |
|---|
| 46 | set_xkbmap ie |
|---|
| 47 | "${PATH_XMODMAP}" "$@" || ( set_xkbmap de ; die "Failed to set xmodmap $@." ) |
|---|
| 48 | else |
|---|
| 49 | die "Cannot use $@ for xmodmap." |
|---|
| 50 | fi |
|---|
| 51 | else |
|---|
| 52 | die "xmodmap not found, cannot set xmodmap." |
|---|
| 53 | fi |
|---|
| 54 | } |
|---|
| 55 | |
|---|
| 56 | set_xkbmap() { |
|---|
| 57 | if [ -e "${PATH_SETXKBMAP}" ]; then |
|---|
| 58 | "${PATH_SETXKBMAP}" "$@" || die "Failed to select xkbmap $@." |
|---|
| 59 | else |
|---|
| 60 | die "setxkbmap not found, cannot set xkbmap." |
|---|
| 61 | fi |
|---|
| 62 | } |
|---|
| 63 | |
|---|
| 64 | set_keymap() { |
|---|
| 65 | if [ -e "${PATH_LOADKEYS}" ]; then |
|---|
| 66 | if [ -f "$@" ]; then |
|---|
| 67 | if [ "${EUID}" = 0 ]; then |
|---|
| 68 | "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap $@." |
|---|
| 69 | elif [ -e "${PATH_SUDO}" ]; then |
|---|
| 70 | "${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap using sudo." |
|---|
| 71 | else |
|---|
| 72 | die "You need root priviliges to change the keymap." |
|---|
| 73 | fi |
|---|
| 74 | else |
|---|
| 75 | die "keymap file $@ does not exist." |
|---|
| 76 | fi |
|---|
| 77 | else |
|---|
| 78 | die "loadkeys not found, cannot set keymap." |
|---|
| 79 | fi |
|---|
| 80 | } |
|---|
| 81 | |
|---|
| 82 | if [ -n "$SSH_CONNECTION" ]; then |
|---|
| 83 | die "Cannot set keybord layout in a ssh session." |
|---|
| 84 | fi |
|---|
| 85 | |
|---|
| 86 | if [ -z ${DISPLAY} ]; then |
|---|
| 87 | set_keymap "${NEO_CONSOLE_KEYMAP}" |
|---|
| 88 | |
|---|
| 89 | if [ -e "${PATH_SETLEDS}" ]; then |
|---|
| 90 | "${PATH_SETLEDS}" +num || die "Failed to set NUM status." |
|---|
| 91 | else |
|---|
| 92 | die "setleds does not exist, cannot set NUM status." |
|---|
| 93 | fi |
|---|
| 94 | else |
|---|
| 95 | if [ -e "${PATH_NUMLOCKX}" ]; then |
|---|
| 96 | "${PATH_NUMLOCKX}" off || die "Failed to turn off Numlock." |
|---|
| 97 | else |
|---|
| 98 | die "numlockx not found, cannot turn off Numlock." |
|---|
| 99 | fi |
|---|
| 100 | |
|---|
| 101 | if [ -e "${PATH_XSET}" ]; then |
|---|
| 102 | for modifier in 51 94; do |
|---|
| 103 | "${PATH_XSET}" -r ${modifier} || die "Failed to unset repeat for modifier ${modifier}." |
|---|
| 104 | done |
|---|
| 105 | for deadkey in 21 35 49; do |
|---|
| 106 | "${PATH_XSET}" -r ${deadkey} || die "Failed to unset repeat for deadkey ${deakey}." |
|---|
| 107 | done |
|---|
| 108 | else |
|---|
| 109 | die "xset not found, cannot set modifiers and dead keys." |
|---|
| 110 | fi |
|---|
| 111 | |
|---|
| 112 | case "${NEO_X_VARIANTE}" in |
|---|
| 113 | xkbmap) |
|---|
| 114 | set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}" |
|---|
| 115 | ;; |
|---|
| 116 | xmodmap) |
|---|
| 117 | set_xmodmap "${NEO_XMODMAP}" |
|---|
| 118 | ;; |
|---|
| 119 | xprog) |
|---|
| 120 | set_xmodmap "${NEO_XMODMAP_XPROG}" |
|---|
| 121 | ;; |
|---|
| 122 | alternative) |
|---|
| 123 | set_xmodmap "${NEO_XMODMAP_ALTERNATIVE}" |
|---|
| 124 | ;; |
|---|
| 125 | evdev) |
|---|
| 126 | set_xmodmap "${NEO_XMODMAP_EVDEV}" |
|---|
| 127 | ;; |
|---|
| 128 | *) |
|---|
| 129 | die "Unknown Neo X variant ${NEO_X_VARIANTE}." |
|---|
| 130 | ;; |
|---|
| 131 | esac |
|---|
| 132 | fi |
|---|
| 133 | |
|---|