summaryrefslogtreecommitdiffstats
path: root/linux/bin/uiae
blob: 65a93a03729a08098bffb72694ebae2a7f7eb5ab (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
#!/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


# colours in the Bash
normal="\033[0m"
red="\033[31m"
orange="\033[33m"
green="\033[32m"

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
STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap}
STD_XKBMAP=${STD_XKBMAP:-de}
STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys}
STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}"
NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on}

help() {
cat <<HELP
Aufruf: $0 [-q]
Aktiviert die Standard-Tastaturbelegung.

  -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 geändert werden.${normal}"
	exit 1
}

set_xmodmap() {
	if [ -e "${PATH_XMODMAP}" ]; then
		if [ -f "$@" ]; then
			"${PATH_XMODMAP}" "$@" || 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
		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

}

if [ -n "$SSH_CONNECTION" ]; then
	die "In einer ssh-session kann die Belegung nicht geändert werden."
fi

if [ -z ${DISPLAY} ]; then
	set_keymap "${STD_CONSOLE_KEYMAP}"

	if [ -e "${PATH_SETLEDS}" ]; then
		if [ "${NUM_LOCK_STATUS}" = "on" ]; then
			"${PATH_SETLEDS}" -num || echo -e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
		else
			"${PATH_SETLEDS}" +num || echo "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
		fi
	else
		echo "${orange}Der Befehl ${red}setleds${orange} wurde nicht gefunden. Darum kann der Status von NumLock nicht automatisch geändert werden.${normal}" >&2
	fi
else
	if [ -e "${PATH_XSET}" ]; then
		for modifier in 51 94; do
			"${PATH_XSET}" r ${modifier} || echo "Failed to set repeat for modifier ${modifier}." >&2
		done
		for deadkey in 21 35 49; do
			"${PATH_XSET}" r ${deadkey} || echo "Failed to set repeat for deadkey ${deakey}." >&2
		done
	else
		echo "xset not found, cannot set modifiers and dead keys." >&2
	fi

	case "${STD_X_VARIANTE}" in
		xkbmap)
			set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}"
			;;
		xmodmap)
			set_xkbmap de
			set_xmodmap "${STD_XMODMAP}"
			;;
		*)
			die "Unknown standard X variant ${STD_X_VARIANTE}."
			;;
	esac

	if [ -e "${PATH_NUMLOCKX}" ]; then
		if [ "${NUM_LOCK_STATUS}" = "on" ]; then
			"${PATH_NUMLOCKX}" on || die "Failed to set num lock status to on."
		else
			"${PATH_NUMLOCKX}" off || die "Failed to set num lock status to off."
		fi
	else
		die "numlockx not found, cannot turn off Numlock."
	fi
fi