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