blob: 897432c25731ec11dbfeaa85010816f365091d41 (
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
|
#!/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
if [ -f "${NEO_CONFIG}" ]; then
. "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}"
elif [ -f "${HOME}"/.neorc ]; then
. "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc"
elif [ -f /etc/neo.conf ]; then
. /etc/neo.conf || die "Failed to source /etc/neo.conf"
else
echo "No configuration file found. Using default values, this might fail!"
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_X_VARIANTE=${NEO_X_VARIANTE:-xkbmap}
NEO_X_VARIANTE=${1-$NEO_X_VARIANTE}
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}
die() {
echo "$@" >&2
exit 1
}
numlock_manually() {
echo "$1" >&2
echo "Please turn Numlock $2 now and press ›Enter‹ to continue." >&2
read enter
}
set_xmodmap() {
if [ -e "${PATH_XMODMAP}" ]; then
if [ -f "$@" ]; then
set_xkbmap lv
"${PATH_XMODMAP}" "$@" || ( set_xkbmap de ; die "Failed to set xmodmap $@." )
else
die "Cannot use $@ for xmodmap."
fi
else
die "xmodmap not found, cannot set xmodmap."
fi
}
set_xkbmap() {
if [ -e "${PATH_SETXKBMAP}" ]; then
"${PATH_SETXKBMAP}" "$@" || die "Failed to select xkbmap $@."
else
die "setxkbmap not found, cannot set xkbmap."
fi
}
set_keymap() {
if [ -e "${PATH_LOADKEYS}" ]; then
if [ -f "$@" ]; then
if [ "${EUID}" = 0 ]; then
"${PATH_LOADKEYS}" "$@" || die "Failed to set keymap $@."
elif [ -e "${PATH_SUDO}" ]; then
"${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap using sudo."
else
die "You need root priviliges to change the keymap."
fi
else
die "keymap file $@ does not exist."
fi
else
die "loadkeys not found, cannot set keymap."
fi
}
if [ -n "$SSH_CONNECTION" ]; then
die "Cannot set keybord layout in a ssh session."
fi
if [ -z ${DISPLAY} ]; then
set_keymap "${NEO_CONSOLE_KEYMAP}"
if [ -e "${PATH_SETLEDS}" ]; then
"${PATH_SETLEDS}" +num || numlock_manually "Failed to set NUM status." on
else
numlock_manually "setleds does not exist, cannot set NUM status." on
fi
else
if [ -e "${PATH_NUMLOCKX}" ]; then
"${PATH_NUMLOCKX}" off || numlock_manually "Failed to turn off Numlock." off
else
numlock_manually "numlockx not found, cannot turn off Numlock." off
fi
if [ -e "${PATH_XSET}" ]; then
for modifier in 51 94; do
"${PATH_XSET}" -r ${modifier} || echo "Failed to unset repeat for modifier ${modifier}." >&2
done
for deadkey in 21 35 49; do
"${PATH_XSET}" -r ${deadkey} || echo "Failed to unset repeat for deadkey ${deakey}." >&2
done
else
echo "xset not found, cannot set modifiers and dead keys." >&2
fi
case "${NEO_X_VARIANTE}" in
xkbmap)
set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
;;
xmodmap)
set_xmodmap "${NEO_XMODMAP}"
;;
xprog)
set_xmodmap "${NEO_XMODMAP_XPROG}"
;;
alternative)
set_xmodmap "${NEO_XMODMAP_ALTERNATIVE}"
;;
evdev)
set_xmodmap "${NEO_XMODMAP_EVDEV}"
;;
*)
die "Unknown Neo X variant ${NEO_X_VARIANTE}."
;;
esac
fi
|