root/linux/bin/asdf @ 1410

Revision 1410, 4.9 KB (checked in by pascal, 4 years ago)

Befehle nicht mehr in Variablen

  • Property svn:executable set to *
Line 
1#!/bin/bash
2# Copyright 2008 Bernd Steinhauser <berniyh@exherbo.org>
3# Copyright 2008 Benjamin Kellermann
4# Copyright 2008 Pascal Hauck
5# Copyright 2008 Erik Streb del Toro
6# Distributed under the terms of the GNU General Public License v3
7
8#prevent CapsLock while ›asdf‹ is running
9#xmodmap -e "clear Lock" 2> /dev/null
10
11# colours in the Bash
12normal="\033[0m"
13red="\033[31m"
14orange="\033[33m"
15green="\033[32m"
16
17if [ -f "${NEO_CONFIG}" ]; then
18        . "${NEO_CONFIG}" || die "Fehler beim Verwenden der Konfigurationsdatei ${NEO_CONFIG}"
19elif [ -f "${HOME}"/.neorc ]; then
20        . "${HOME}"/.neorc || die "Fehler beim Verwenden der Konfigurationsdatei ${HOME}/.neorc"
21elif [ -f /etc/neo.conf ]; then
22        . /etc/neo.conf || die "Fehler beim Verwenden der Konfigurationsdatei /etc/neo.conf"
23else
24        echo "${red}Keine Konfigurationsdatei für NEO gefunden. Das Verwenden der Standardwerte kann fehlschlagen!${normal}"
25fi
26
27
28# Default values
29NEO_XKBMAP=${NEO_XKBMAP:-de}
30NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo}
31NEO_XMODMAP=${NEO_XMODMAP:-$HOME/neo/neo_de.xmodmap}
32NEO_XMODMAP_XPROG=${NEO_XMODMAP_XPROG:-$HOME/neo/neo_de_x-prog.xmodmap}
33NEO_XMODMAP_ALTERNATIVE=${NEO_XMODMAP_ALTERNATIVE:-$HOME/neo/neo_de_alternative.xmodmap}
34NEO_XMODMAP_EVDEV=${NEO_XMODMAP_EVDEV:-$HOME/neo/neo_de_evdev.xmodmap}
35NEO_CONSOLE_KEYMAP=${NEO_CONSOLE_KEYMAP:-$HOME/neo/neo.map}
36
37help() {
38cat <<HELP
39Aufruf: $0 [-q] [NEO-X-Variante]
40Aktiviert die NEO-Tastaturbelegung.
41
42  NEO-X-Variante        als NEO-X-Variante kann verwendet werden:
43                                xkmbap          i.d.R. wenn Rootrechte vorhanden sind
44                                xmodmap         i.d.R. wenn NEO nur für einen Benutzer verwendet werden soll
45                                alternative     sollte geladen werden, wenn das Laden der Xmodmap fehl schlägt
46                                xprog           falls ältere X-Programme (wie xedit oder xfig) verwendet werden
47                                evdev           falls der evdev-Treiber verwendet wird
48
49                        Das Skript erkennt, falls sich der Benutzer nur auf einer Textkonsole befindet und ändert
50                        auch dort die Belegung (hierfür sind allerdings Rootrechte erforderlich!)
51
52  -q, --quiet           gibt – abgesehen von Fehlern – keine Meldungen aus
53
54NEO-Tastaturbelegung
55Homepage: http://neo-layout.org/
56
57HELP
58exit 0
59}
60
61die() {
62        echo -e "${red}$@${normal}" >&2
63        echo -e "${red}Die Belegung konnte nicht auf NEO geändert werden.${normal}"
64        exit 1
65}
66
67die2() {
68        set_xkbmap de
69        die "Fehler beim Laden der Xmodmap $@."
70}
71
72numlock_manually() {
73        echo -e "${orange}$1${normal}" >&2
74        echo -e "Bitte jetzt ${orange}NumLock${normal} von Hand auf ${orange}$2${normal} schalten und ${orange}Enter${normal} drücken um fortzufahren…" >&2
75        read enter
76}
77
78set_xmodmap() {
79        if [ -f "$@" ]; then
80                set_xkbmap lv
81                xmodmap "$@" || die2 $@
82        else
83                die "Die Xmodmap-Datei $@ gibt es nicht."
84        fi
85}
86
87set_xkbmap() {
88        setxkbmap "$@" || die "Die xkbmap $@ wurde nicht gefunden."
89}
90
91set_keymap() {
92        if [ -f "$@" ]; then
93                if [ "${EUID}" = 0 ]; then
94                        loadkeys "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}."
95                else
96                        sudo loadkeys "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern."
97                fi
98        else
99                die "Die keymap-Datei ${orange}$@${red} gibt es nicht."
100        fi
101}
102
103
104while [ ! -z "$1" ]; do
105        case $1 in
106                -h | --help )
107                        help
108                        ;;
109                -q | --quiet )
110                        quiet=1
111                        ;;
112                * )
113                        NEO_X_VARIANTE=${1-$NEO_X_VARIANTE}
114                        shift $#
115                        ;;
116        esac
117        shift
118done
119
120
121if [ -n "$SSH_CONNECTION" ]; then
122        die "In einer ssh-session kann die Belegung nicht geändert werden."
123fi
124
125if [ -z ${DISPLAY} ]; then
126        setleds +num || numlock_manually "Fehler beim setzen des Status von NumLock." an
127        setleds -caps
128        set_keymap "${NEO_CONSOLE_KEYMAP}"
129else
130        numlockx off || numlock_manually "Fehler beim setzen des Status von NumLock." aus
131
132        for modifier in 51 94; do
133                xset -r ${modifier} || echo "Fehler beim Ausschalten von Autorepeat beim Modifier ${modifier}." >&2
134        done
135        for deadkey in 21 35 49; do
136                xset -r ${deadkey} || echo "Fehler beim Ausschalten von Autorepead bei der toten Taste ${deakey}." >&2
137        done
138
139        case "${NEO_X_VARIANTE}" in
140                xkbmap)
141                        [ $quiet ] || echo "Die xkbmap wird geladen…"
142                        set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
143                        ;;
144                xmodmap)
145                        [ $quiet ] || echo "Das Laden der Xmodmap kann einige Sekunden dauern…"
146                        set_xmodmap "${NEO_XMODMAP}"
147                        ;;
148                xprog)
149                        [ $quiet ] || echo "Das Laden der Xmodmap (Variante für X-Programme) kann einige Sekunden dauern…"
150                        set_xmodmap "${NEO_XMODMAP_XPROG}"
151                        ;;
152                alternative)
153                        [ $quiet ] || echo "Das Laden der alternativen Xmodmap kann einige Sekunden dauern…"
154                        set_xmodmap "${NEO_XMODMAP_ALTERNATIVE}"
155                        ;;
156                evdev)
157                        [ $quiet ] || echo "Das Laden der Xmodmap (evdev-Variante) kann einige Sekunden dauern…"
158                        set_xmodmap "${NEO_XMODMAP_EVDEV}"
159                        ;;
160                *)
161                        die "${NEO_X_VARIANTE} ist eine unbekannte X-Variante der NEO-Belegung."
162                        ;;
163        esac
164fi
165
166if [ ! "$quiet" ]; then
167        echo
168        echo "Die Tastaturbelegung wurde auf NEO geändert."
169        echo -e "Mit ${green}neo${normal} und ${green}num${normal} erhält man ein Bild der NEO-Belegung."
170        echo -e "Durch ${green}uiae${normal} kehrt man wieder zur Standardbelegung zurück."
171fi
Note: See TracBrowser for help on using the browser.