blob: b915005a587f66ac3de3649c1509942df6aa1420 (
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
|
#!/bin/sh
# 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
# colour definitions
normal="\033[0m"
red="\033[31m"
orange="\033[33m"
green="\033[32m"
if [ "foo`echo -e bar`" = "foobar" ];then
# GNU echo
ECHO_e="echo -e"
else
# POSIX echo
ECHO_e="echo"
fi
# Default values
STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap}
STD_XKBMAP=${STD_XKBMAP:-de}
STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys}
STD_XMODMAP=${STD_XMODMAP:-""}
STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}"
NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on}
die() {
$ECHO_e "${red}$@${normal}" >&2
$ECHO_e "${red}Die Belegung konnte nicht geändert werden.${normal}" >&2
exit 1
}
set_xmodmap() {
if [ -f "$@" ]; then
xmodmap "$@" || die "Fehler beim Laden der Xmodmap $@."
else
die "Die Xmodmap-Datei ${orange}$@${red} gibt es nicht."
fi
}
set_xkbmap() {
setxkbmap "$@" || die "Die xkbmap ${orange}$@${red} wurde nicht gefunden."
}
set_keymap() {
if [ "${EUID}" = 0 ]; then
loadkeys "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}."
else
sudo loadkeys "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern."
fi
}
help() {
cat <<HELP
Aufruf: $0 [-q] [Standard-X-Variante]
Aktiviert die Standard-Tastaturbelegung.
Neo-X-Variante:
xkmbap in den meisten Fällen richtig (Standardeinstellung)
xmodmap nur sinnvoll, wenn eine eigene Xmodmap als Standardbelegung 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
Homepage: http://neo-layout.org/
HELP
exit 0
}
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_e "${red}Keine Konfigurationsdatei für NEO gefunden.\nDas Verwenden der Standardwerte kann fehlschlagen!${normal}" >&2
fi
if [ -n "$SSH_CONNECTION" ]; then
die "In einer ssh-session kann die Belegung nicht geändert werden."
fi
while [ ! -z "$1" ]; do
case $1 in
-h | --help )
help
;;
-q | --quiet )
quiet=1
;;
* )
STD_X_VARIANTE=${1-$STD_X_VARIANTE}
shift $#
;;
esac
shift
done
if [ -z ${DISPLAY} ]; then
set_keymap "${STD_CONSOLE_KEYMAP}"
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
setleds -num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
else
setleds +num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
fi
else
for modifier in 51 94; do
xset r ${modifier} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepeat beim Modifier ${modifier}.${normal}" >&2
done
for deadkey in 21 35 49; do
xset r ${deadkey} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepead bei der toten Taste ${deakey}.${normal}" >&2
done
case "${STD_X_VARIANTE}" in
xkbmap)
[ $quiet ] || echo "Die Standardbelegung wird geladen…"
set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}"
;;
xmodmap)
if [ "${STD_XMODMAP}" ]; then
[ $quiet ] || echo "Die Standard-Xmodmap wird geladen…"
set_xmodmap "${STD_XMODMAP}"
else
$ECHO_e "${red}Es wurde keine Standard-Xmodmap definiert.${normal}" >&2
die "In der Regel ist ${green}uiae${red} ohne weitere Angaben erfolgreich."
fi
;;
*)
die "${orange}${STD_X_VARIANTE}${red} ist eine unbekannte X-Variante der Neo-Belegung."
;;
esac
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
numlockx on || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
else
numlockx off || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
fi
fi
if [ ! "$quiet" ]; then
echo
echo "Die Tastaturbelegung wurde auf die Standardbelegung geändert."
$ECHO_e "Durch ${green}asdf${normal} kehrt man wieder zur Neo-Belegung zurück."
fi
|