root/linux/bin/uiae @ 1420

Revision 1420, 4.2 KB (checked in by ben, 4 years ago)

num neo uiae und asdf angeglichen, kleine bugfixes

  • Property svn:executable set to *
Line 
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
9normal="\033[0m"
10red="\033[31m"
11orange="\033[33m"
12green="\033[32m"
13
14if [ "foo`echo -e bar`" = "foobar" ];then
15  # GNU echo
16  ECHO_e="echo -e"
17else
18  # POSIX echo
19  ECHO_e="echo"
20fi
21
22# Default values
23STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap}
24STD_XKBMAP=${STD_XKBMAP:-de}
25STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys}
26STD_XMODMAP=${STD_XMODMAP:-""}
27STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}"
28NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on}
29die() {
30        $ECHO_e "${red}$@${normal}" >&2
31        $ECHO_e "${red}Die Belegung konnte nicht geändert werden.${normal}" >&2
32        exit 1
33}
34
35set_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
43set_xkbmap() {
44        setxkbmap "$@" || die "Die xkbmap ${orange}$@${red} wurde nicht gefunden."
45}
46
47set_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
55help() {
56cat <<HELP
57Aufruf: $0 [-q] [Standard-X-Variante]
58Aktiviert 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
69Homepage: http://neo-layout.org/
70HELP
71exit 0
72}
73
74while [ ! -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
88done
89
90if [ -f "${NEO_CONFIG}" ]; then
91        . "${NEO_CONFIG}" || die "Fehler beim Verwenden der Konfigurationsdatei ${NEO_CONFIG}"
92elif [ -f "${HOME}"/.neorc ]; then
93        . "${HOME}"/.neorc || die "Fehler beim Verwenden der Konfigurationsdatei ${HOME}/.neorc"
94elif [ -f /etc/neo.conf ]; then
95        . /etc/neo.conf || die "Fehler beim Verwenden der Konfigurationsdatei /etc/neo.conf"
96else
97        $ECHO_e "${red}Keine Konfigurationsdatei für NEO gefunden.\nDas Verwenden der Standardwerte kann fehlschlagen!${normal}" >&2
98fi
99
100if [ -n "$SSH_CONNECTION" ]; then
101        die "In einer ssh-session kann die Belegung nicht geändert werden."
102fi
103
104if [ -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
113else
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
146fi
147
148if [ ! "$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."
152fi
Note: See TracBrowser for help on using the browser.