root/linux/bin/asdf @ 1389

Revision 1389, 6.1 KB (checked in by pascal, 4 years ago)

fehlende Zeile zur Compose eingefügt

  • Property svn:executable set to *
Line 
1#!/bin/bash
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
10normal="\033[0m"
11red="\033[31m"
12green="\033[32m"
13
14if [ -f "${NEO_CONFIG}" ]; then
15        . "${NEO_CONFIG}" || die "Fehler beim Verwenden der Konfigurationsdatei ${NEO_CONFIG}"
16elif [ -f "${HOME}"/.neorc ]; then
17        . "${HOME}"/.neorc || die "Fehler beim Verwenden der Konfigurationsdatei ${HOME}/.neorc"
18elif [ -f /etc/neo.conf ]; then
19        . /etc/neo.conf || die "Fehler beim Verwenden der Konfigurationsdatei /etc/neo.conf"
20else
21        echo "${red}Keine Konfigurationsdatei für NEO gefunden. Das Verwenden der Standardwerte kann fehlschlagen!${normal}"
22fi
23
24# Default paths
25PATH_XMODMAP=${PATH_XMODMAP:-/usr/bin/xmodmap}
26PATH_SETXKBMAP=${PATH_SETXKBMAP:-/usr/bin/setxkbmap}
27PATH_LOADKEYS=${PATH_LOADKEYS:-/usr/bin/loadkeys}
28PATH_SUDO=${PATH_SUDO:-/usr/bin/sudo}
29PATH_SETLEDS=${PATH_SETLEDS:-/usr/bin/setleds}
30PATH_NUMLOCKX=${PATH_NUMLOCKX:-/usr/bin/numlockx}
31PATH_XSET=${PATH_XSET:-/usr/bin/xset}
32
33# Default values
34NEO_XKBMAP=${NEO_XKBMAP:-de}
35NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo}
36NEO_XMODMAP=${NEO_XMODMAP:-$HOME/neo/neo_de.xmodmap}
37NEO_XMODMAP_XPROG=${NEO_XMODMAP_XPROG:-$HOME/neo/neo_de_x-prog.xmodmap}
38NEO_XMODMAP_ALTERNATIVE=${NEO_XMODMAP_ALTERNATIVE:-$HOME/neo/neo_de_alternative.xmodmap}
39NEO_XMODMAP_EVDEV=${NEO_XMODMAP_EVDEV:-$HOME/neo/neo_de_evdev.xmodmap}
40NEO_CONSOLE_KEYMAP=${NEO_CONSOLE_KEYMAP:-$HOME/neo/neo.map}
41
42help() {
43cat <<HELP
44Aufruf: $0 [-q] [NEO-X-Variante]
45Aktiviert die NEO-Tastaturbelegung.
46
47  NEO-X-Variante        als NEO-X-Variante kann verwendet werden:
48                                xkmbap          i.d.R. wenn Rootrechte vorhanden sind
49                                xmodmap         i.d.R. wenn NEO nur für einen Benutzer verwendet werden soll
50                                alternative     sollte geladen werden, wenn das Laden der Xmodmap fehl schlägt
51                                xprog           falls ältere X-Programme (wie xedit oder xfig) verwendet werden
52                                evdev           falls der evdev-Treiber verwendet wird
53
54                        Das Skript erkennt, falls sich der Benutzer nur auf einer Textkonsole befindet und ändert
55                        auch dort die Belegung (hierfür sind allerdings Rootrechte erforderlich!)
56
57  -q, --quiet           gibt – abgesehen von Fehlern – keine Meldungen aus
58
59NEO-Tastaturbelegung
60Homepage: http://neo-layout.org/
61
62HELP
63exit 0
64}
65
66die() {
67        echo -e "${red}$@${normal}" >&2
68        exit 1
69}
70
71die2() {
72        set_xkbmap de
73        die "Fehler beim Laden der Xmodmap $@."
74}
75
76numlock_manually() {
77        echo "$1" >&2
78        echo "Bitte jetzt NumLock von Hand auf $2 schalten und ›Enter‹ drücken um fortzufahren…" >&2
79        read enter
80}
81
82set_xmodmap() {
83        if [ -e "${PATH_XMODMAP}" ]; then
84                if [ -f "$@" ]; then
85                        set_xkbmap lv
86                        "${PATH_XMODMAP}" "$@" || die2 $@
87                else
88                        die "Die Xmodmap-Datei $@ gibt es nicht."
89                fi
90        else
91                die "Der Befehl ›xmodmap‹ wurde nicht gefunden, die Belegung kann nicht verändert werden."
92        fi
93}
94
95set_xkbmap() {
96        if [ -e "${PATH_SETXKBMAP}" ]; then
97                "${PATH_SETXKBMAP}" "$@" || die "Die xkbmap $@ wurde nicht gefunden."
98        else
99                die "Der Befehl ›setxkbmap‹ wurde nicht gefunden, die Belegung kann nicht verändert werden."
100        fi
101}
102
103set_keymap() {
104        if [ -e "${PATH_LOADKEYS}" ]; then
105                if [ -f "$@" ]; then
106                        if [ "${EUID}" = 0 ]; then
107                                "${PATH_LOADKEYS}" "$@" || die "Fehler beim Laden der Keymap $@."
108                        elif [ -e "${PATH_SUDO}" ]; then
109                                "${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Fehler bei der Verwendung von ›sudo‹, um die Belegung zu ändern."
110                        else
111                                die "Die Belegung auf der Textkonsole kann nur mir Rootrechten geändert werden."
112                        fi
113                else
114                        die "Die keymap-Datei $@ gibt es nicht."
115                fi
116        else
117                die "Der Befehl ›loadkeys‹ wurde nicht gefunden, die Belegung kann nicht verändert werden."
118        fi
119}
120
121
122while [ ! -z "$1" ]; do
123        case $1 in
124                -h | --help )
125                        help
126                        ;;
127                -q | --quiet )
128                        quiet=1
129                        ;;
130                * )
131                        NEO_X_VARIANTE=${1-$NEO_X_VARIANTE}
132                        shift $#
133                        ;;
134        esac
135        shift
136done
137
138
139if [ -n "$SSH_CONNECTION" ]; then
140        die "In einer ssh-session kann die Belegung nicht geändert werden."
141fi
142
143if [ -z ${DISPLAY} ]; then
144        set_keymap "${NEO_CONSOLE_KEYMAP}"
145
146        if [ -e "${PATH_SETLEDS}" ]; then
147                "${PATH_SETLEDS}" +num || numlock_manually "Fehler beim setzen des Status von NumLock." an
148        else
149                numlock_manually "Der Befehl ›setleds‹ wurde nicht gefunden. Darum kann der Status von NumLock nicht automatisch geändert werden." an
150        fi
151else
152        if [ -e "${PATH_NUMLOCKX}" ]; then
153                "${PATH_NUMLOCKX}" off || numlock_manually "Fehler beim setzen des Status von NumLock." aus
154        else
155                numlock_manually "Der Befehl ›numlockx‹ wurde nicht gefunden. Darum kann der Status von NumLock nicht automatisch geändert werden." aus
156        fi
157
158        if [ -e "${PATH_XSET}" ]; then
159                for modifier in 51 94; do
160                        "${PATH_XSET}" -r ${modifier} || echo "Fehler beim Ausschalten von Autorepeat beim Modifier ${modifier}." >&2
161                done
162                for deadkey in 21 35 49; do
163                        "${PATH_XSET}" -r ${deadkey} || echo "Fehler beim Ausschalten von Autorepead bei der toten Taste ${deakey}." >&2
164                done
165        else
166                echo "Der Befehl ›xset‹ wurde nicht gefunden. Der Status von autorepeat kann für Modifier und tote Tasten nicht geändert werden." >&2
167        fi
168
169        case "${NEO_X_VARIANTE}" in
170                xkbmap)
171                        [ $quiet ] || echo "Die xkbmap wird geladen…"
172                        set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
173                        ;;
174                xmodmap)
175                        [ $quiet ] || echo "Das Laden der Xmodmap kann einige Sekunden dauern…"
176                        set_xmodmap "${NEO_XMODMAP}"
177                        ;;
178                xprog)
179                        [ $quiet ] || echo "Das Laden der Xmodmap (Variante für X-Programme) kann einige Sekunden dauern…"
180                        set_xmodmap "${NEO_XMODMAP_XPROG}"
181                        ;;
182                alternative)
183                        [ $quiet ] || echo "Das Laden der alternativen Xmodmap kann einige Sekunden dauern…"
184                        set_xmodmap "${NEO_XMODMAP_ALTERNATIVE}"
185                        ;;
186                evdev)
187                        [ $quiet ] || echo "Das Laden der Xmodmap (evdev-Variante) kann einige Sekunden dauern…"
188                        set_xmodmap "${NEO_XMODMAP_EVDEV}"
189                        ;;
190                *)
191                        die "${NEO_X_VARIANTE} ist eine unbekannte X-Variante der NEO-Belegung."
192                        ;;
193        esac
194fi
195
196if [ ! "$quiet" ]; then
197        echo
198        echo "Die Tastaturbelegung wurde auf NEO geändert."
199        echo -e "Mit ${green}neo${normal} und ${green}num${normal} erhält man ein Bild der NEO-Belegung."
200        echo -e "Durch ${green}uiae${normal} kehrt man wieder zur Standardbelegung zurück."
201fi
Note: See TracBrowser for help on using the browser.