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
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
if [ -f "${NEO_CONFIG}" ]; then
|
|
|
|
. "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}"
|
|
|
|
elif [ -f "${HOME}"/.neorc ]; then
|
2008-10-02 18:04:31 +02:00
|
|
|
. "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc"
|
2008-10-02 15:38:05 +02:00
|
|
|
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
|
2008-09-11 22:19:52 +02:00
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
# 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}
|
2008-09-11 10:52:18 +02:00
|
|
|
|
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}
|
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}
|
2008-09-11 10:52:18 +02:00
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
die() {
|
|
|
|
echo "$@" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
2008-07-16 20:31:52 +02:00
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
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
|
|
|
|
}
|
2008-09-15 13:49:20 +02:00
|
|
|
|
2008-10-02 15:38:05 +02:00
|
|
|
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
|
|
|
|
}
|
2008-09-15 13:49:20 +02:00
|
|
|
|
2008-07-16 20:31:52 +02:00
|
|
|
if [ -n "$SSH_CONNECTION" ]; then
|
2008-10-02 15:38:05 +02:00
|
|
|
die "Cannot set keybord layout in a ssh session."
|
2008-07-16 20:31:52 +02:00
|
|
|
fi
|
2008-10-02 15:38:05 +02:00
|
|
|
|
|
|
|
if [ -z ${DISPLAY} ]; then
|
|
|
|
set_keymap "${NEO_CONSOLE_KEYMAP}"
|
|
|
|
|
|
|
|
if [ -e "${PATH_SETLEDS}" ]; then
|
|
|
|
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
|
2009-01-05 00:11:36 +01:00
|
|
|
"${PATH_SETLEDS}" -num || echo "Failed to set num lock status to on." >&2
|
2008-10-02 15:38:05 +02:00
|
|
|
else
|
2009-01-05 00:11:36 +01:00
|
|
|
"${PATH_SETLEDS}" +num || echo "Failed to set num lock status to off." >&2
|
2008-10-02 15:38:05 +02:00
|
|
|
fi
|
2008-09-09 11:45:54 +02:00
|
|
|
else
|
2009-01-05 00:11:36 +01:00
|
|
|
echo "setleds does not exist, cannot set NUM status." >&2
|
2008-09-09 11:45:54 +02:00
|
|
|
fi
|
2008-10-02 15:38:05 +02:00
|
|
|
else
|
|
|
|
if [ -e "${PATH_XSET}" ]; then
|
|
|
|
for modifier in 51 94; do
|
2009-01-05 00:11:36 +01:00
|
|
|
"${PATH_XSET}" r ${modifier} || echo "Failed to set repeat for modifier ${modifier}." >&2
|
2008-10-02 15:38:05 +02:00
|
|
|
done
|
|
|
|
for deadkey in 21 35 49; do
|
2009-01-05 00:11:36 +01:00
|
|
|
"${PATH_XSET}" r ${deadkey} || echo "Failed to set repeat for deadkey ${deakey}." >&2
|
2008-10-02 15:38:05 +02:00
|
|
|
done
|
2008-09-09 11:45:54 +02:00
|
|
|
else
|
2009-01-05 00:11:36 +01:00
|
|
|
echo "xset not found, cannot set modifiers and dead keys." >&2
|
2008-09-09 11:45:54 +02:00
|
|
|
fi
|
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)
|
|
|
|
set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}"
|
|
|
|
;;
|
|
|
|
xmodmap)
|
|
|
|
set_xkbmap de
|
|
|
|
set_xmodmap "${STD_XMODMAP}"
|
|
|
|
;;
|
|
|
|
*)
|
2008-10-06 17:00:13 +02:00
|
|
|
die "Unknown standard X variant ${STD_X_VARIANTE}."
|
2008-10-02 15:38:05 +02:00
|
|
|
;;
|
|
|
|
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
|
2008-09-09 11:45:54 +02:00
|
|
|
else
|
2008-10-02 15:38:05 +02:00
|
|
|
die "numlockx not found, cannot turn off Numlock."
|
2008-09-09 11:45:54 +02:00
|
|
|
fi
|
2008-07-16 20:31:52 +02:00
|
|
|
fi
|
|
|
|
|