2008-10-07 16:50:46 +02:00
|
|
|
|
#!/bin/sh
|
2008-10-02 15:38:05 +02:00
|
|
|
|
# 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
|
2008-09-09 11:45:54 +02:00
|
|
|
|
|
2009-01-10 13:38:13 +01:00
|
|
|
|
# colour definitions
|
2009-01-08 14:56:10 +01:00
|
|
|
|
normal="\033[0m"
|
|
|
|
|
red="\033[31m"
|
|
|
|
|
orange="\033[33m"
|
|
|
|
|
green="\033[32m"
|
|
|
|
|
|
2009-01-09 19:56:04 +01:00
|
|
|
|
if [ "foo`echo -e bar`" = "foobar" ];then
|
|
|
|
|
# GNU echo
|
|
|
|
|
ECHO_e="echo -e"
|
|
|
|
|
else
|
|
|
|
|
# POSIX echo
|
|
|
|
|
ECHO_e="echo"
|
|
|
|
|
fi
|
|
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
|
# Default values
|
|
|
|
|
STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap}
|
|
|
|
|
STD_XKBMAP=${STD_XKBMAP:-de}
|
|
|
|
|
STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys}
|
2009-01-09 12:30:38 +01:00
|
|
|
|
STD_XMODMAP=${STD_XMODMAP:-""}
|
2008-10-06 17:00:13 +02:00
|
|
|
|
STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}"
|
2008-10-02 15:38:05 +02:00
|
|
|
|
NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on}
|
2009-01-15 13:04:49 +01:00
|
|
|
|
|
2009-01-10 13:38:13 +01:00
|
|
|
|
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
|
|
|
|
|
}
|
2008-09-11 10:52:18 +02:00
|
|
|
|
|
2009-01-08 14:56:10 +01:00
|
|
|
|
help() {
|
|
|
|
|
cat <<HELP
|
2009-01-09 12:30:38 +01:00
|
|
|
|
Aufruf: $0 [-q] [Standard-X-Variante]
|
2009-01-08 14:56:10 +01:00
|
|
|
|
Aktiviert die Standard-Tastaturbelegung.
|
|
|
|
|
|
2010-05-06 00:10:41 +02:00
|
|
|
|
Neo-X-Variante:
|
2009-01-09 20:50:39 +01:00
|
|
|
|
xkmbap in den meisten Fällen richtig (Standardeinstellung)
|
|
|
|
|
xmodmap nur sinnvoll, wenn eine eigene Xmodmap als Standardbelegung verwendet wird
|
2009-01-09 12:30:38 +01:00
|
|
|
|
|
2009-01-09 20:50:39 +01:00
|
|
|
|
Das Skript erkennt, falls sich der Benutzer nur auf einer Textkonsole befindet
|
|
|
|
|
und ändert auch dort die Belegung (hierfür sind allerdings Rootrechte erforderlich!)
|
2009-01-09 12:30:38 +01:00
|
|
|
|
|
2009-01-08 14:56:10 +01:00
|
|
|
|
-q, --quiet gibt – abgesehen von Fehlern – keine Meldungen aus
|
|
|
|
|
|
|
|
|
|
Homepage: http://neo-layout.org/
|
|
|
|
|
HELP
|
|
|
|
|
exit 0
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-15 13:04:49 +01:00
|
|
|
|
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
|
|
|
|
|
|
2009-01-09 20:50:39 +01:00
|
|
|
|
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
|
|
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
|
if [ -z ${DISPLAY} ]; then
|
2009-01-08 14:56:10 +01:00
|
|
|
|
set_keymap "${STD_CONSOLE_KEYMAP}"
|
2008-10-02 15:38:05 +02:00
|
|
|
|
|
2009-01-08 15:15:39 +01:00
|
|
|
|
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
|
2009-01-09 19:56:04 +01:00
|
|
|
|
setleds -num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
|
2008-09-09 11:45:54 +02:00
|
|
|
|
else
|
2009-01-09 19:56:04 +01:00
|
|
|
|
setleds +num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
|
2008-09-09 11:45:54 +02:00
|
|
|
|
fi
|
2009-01-08 15:15:39 +01:00
|
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
|
else
|
2009-01-09 10:06:16 +01:00
|
|
|
|
for modifier in 51 94; do
|
2009-01-09 19:56:04 +01:00
|
|
|
|
xset r ${modifier} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepeat beim Modifier ${modifier}.${normal}" >&2
|
2009-01-09 10:06:16 +01:00
|
|
|
|
done
|
|
|
|
|
for deadkey in 21 35 49; do
|
2009-01-09 19:56:04 +01:00
|
|
|
|
xset r ${deadkey} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepead bei der toten Taste ${deakey}.${normal}" >&2
|
2009-01-09 10:06:16 +01:00
|
|
|
|
done
|
|
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
|
|
2008-10-06 17:00:13 +02:00
|
|
|
|
case "${STD_X_VARIANTE}" in
|
2008-10-02 15:38:05 +02:00
|
|
|
|
xkbmap)
|
2009-01-09 12:30:38 +01:00
|
|
|
|
[ $quiet ] || echo "Die Standardbelegung wird geladen…"
|
2008-10-02 15:38:05 +02:00
|
|
|
|
set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}"
|
|
|
|
|
;;
|
|
|
|
|
xmodmap)
|
2009-01-09 12:30:38 +01:00
|
|
|
|
if [ "${STD_XMODMAP}" ]; then
|
|
|
|
|
[ $quiet ] || echo "Die Standard-Xmodmap wird geladen…"
|
|
|
|
|
set_xmodmap "${STD_XMODMAP}"
|
|
|
|
|
else
|
2009-01-09 19:56:04 +01:00
|
|
|
|
$ECHO_e "${red}Es wurde keine Standard-Xmodmap definiert.${normal}" >&2
|
2009-01-09 14:24:37 +01:00
|
|
|
|
die "In der Regel ist ${green}uiae${red} ohne weitere Angaben erfolgreich."
|
2009-01-09 12:30:38 +01:00
|
|
|
|
fi
|
2008-10-02 15:38:05 +02:00
|
|
|
|
;;
|
|
|
|
|
*)
|
2010-05-06 00:10:41 +02:00
|
|
|
|
die "${orange}${STD_X_VARIANTE}${red} ist eine unbekannte X-Variante der Neo-Belegung."
|
2008-10-02 15:38:05 +02:00
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
2009-01-09 10:06:16 +01:00
|
|
|
|
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
|
2009-01-09 19:56:04 +01:00
|
|
|
|
numlockx on || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
|
2008-09-09 11:45:54 +02:00
|
|
|
|
else
|
2009-01-09 19:56:04 +01:00
|
|
|
|
numlockx off || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
|
2008-09-09 11:45:54 +02:00
|
|
|
|
fi
|
2008-07-16 20:31:52 +02:00
|
|
|
|
fi
|
|
|
|
|
|
2009-01-09 12:30:38 +01:00
|
|
|
|
if [ ! "$quiet" ]; then
|
|
|
|
|
echo
|
|
|
|
|
echo "Die Tastaturbelegung wurde auf die Standardbelegung geändert."
|
2010-05-06 00:10:41 +02:00
|
|
|
|
$ECHO_e "Durch ${green}asdf${normal} kehrt man wieder zur Neo-Belegung zurück."
|
2009-01-09 13:01:23 +01:00
|
|
|
|
fi
|