| 1 | #!/bin/bash |
|---|
| 2 | # Copyright 2008 Pascal Hauck <pascal.hauck@web.de> |
|---|
| 3 | |
|---|
| 4 | # NEO-Tastaturbelegung |
|---|
| 5 | |
|---|
| 6 | # ======= Installation ======= |
|---|
| 7 | # Um NEO auf Ihrem System zu (dauerhaft oder testweise) zu installieren, genügt es, dieses Skript auszuführen |
|---|
| 8 | # z.B. in der Konsole die folgenden beiden Zeilen eingeben: |
|---|
| 9 | # chmod u+x installiere_neo |
|---|
| 10 | # ./installiere_neo |
|---|
| 11 | # Für die restliche Installation weden mehrere Optionen angeboten. |
|---|
| 12 | # Nach der Installation und Eingabe von ›. starte_neo‹ oder nach dem nächsten Login ist: |
|---|
| 13 | # • ein Wechsel von NEO zu QWERTZ ist jederzeit mit ›uiae‹ leicht möglich und |
|---|
| 14 | # • ein Wechsel von QWERTZ zu NEO ist jederzeit mit ›asdf‹ ebenso leicht möglich |
|---|
| 15 | |
|---|
| 16 | # Wenn NEO nicht automatisch nach dem Login gestartet werden soll, genügt es, vor die Zeile |
|---|
| 17 | # asdf # mit einem # am Zeilenanfang bleibt QWERTZ das Standardlayout, sonst ist es NEO |
|---|
| 18 | # in der Datei $HOME/.profile ein # zu setzen |
|---|
| 19 | # Alternativ kann das Skript ›installiere_neo‹ ein weiteres mal aufgerufen werden |
|---|
| 20 | # ============================== |
|---|
| 21 | |
|---|
| 22 | |
|---|
| 23 | # ======= Deinstallation ======= |
|---|
| 24 | # Um NEO wieder zu deinstallieren, kann das Skript ›installiere_neo‹ ein weiteres Mal aufgerufen werden |
|---|
| 25 | # ============================== |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | # ========= Inhalte ============ |
|---|
| 29 | # Das Ausführen dieses Skripts erzeugt auf einfache Weise eine vollständige und saubere Installation für einen Benutzer eines Linuxsystems |
|---|
| 30 | # Die beinhalteten Komponenten sind: |
|---|
| 31 | # • Xmodmap-Tastaturbelegung |
|---|
| 32 | # • Textkonsolenbelegung |
|---|
| 33 | # • Compose-Erweiterung von NEO |
|---|
| 34 | # • die Skripte ›asdf‹, ›uiae‹, um die Belegung zwischen NEO und QWERTZ zu wechseln |
|---|
| 35 | # • die Skripte ›num‹ und ›neo‹, um ein Bild der Tastatur zu erzeugen |
|---|
| 36 | # • die Referenz |
|---|
| 37 | # • die Skripte ›wiemitneo‹ und ›beschreibe‹, um nach Erzeugungsmöglichkeit von Zeichen zu suchen |
|---|
| 38 | # • die Konfigurationsdatei neorc.conf |
|---|
| 39 | # ============================== |
|---|
| 40 | |
|---|
| 41 | # ======= Bemerkungen ========== |
|---|
| 42 | # Es wird immer das Standardverzeichnis $inst_dir verwendet |
|---|
| 43 | # Es gibt keine graphische Installation |
|---|
| 44 | # Dennoch kann dieses Skrip helfen, NEO auf eine einfache Weise zu installieren. |
|---|
| 45 | # Dieses Skript wird mit der Zeit verbessert werden. |
|---|
| 46 | # ============================== |
|---|
| 47 | |
|---|
| 48 | |
|---|
| 49 | # colours in the Bash |
|---|
| 50 | normal="\033[0m" |
|---|
| 51 | red="\033[31m" |
|---|
| 52 | green="\033[32m" |
|---|
| 53 | |
|---|
| 54 | inst_dir=$HOME/neo |
|---|
| 55 | |
|---|
| 56 | # remove the entry in $HOME/.profile |
|---|
| 57 | rmfromprofile() |
|---|
| 58 | { |
|---|
| 59 | grep -v "^\# NEO:$" $HOME/.profile | grep -v "asdf \# mit" | grep -v "asdf" > $HOME/profile.neo.tmp |
|---|
| 60 | rm /$HOME/.profile |
|---|
| 61 | mv $HOME/profile.neo.tmp $HOME/.profile |
|---|
| 62 | } |
|---|
| 63 | |
|---|
| 64 | # create directories, files and entries |
|---|
| 65 | create() |
|---|
| 66 | { |
|---|
| 67 | if [ -f $2 ] # if already exists |
|---|
| 68 | then |
|---|
| 69 | echo -e "Die Datei ${red}$2${normal} gibt es bereits – soll die bestehende Datei überschrieben werden? \c"; read -p "[J,N] " -e overwrite |
|---|
| 70 | if [ "$overwrite" = "J" ] # overwrite? |
|---|
| 71 | then |
|---|
| 72 | echo "Datei $2 wird überschrieben!" |
|---|
| 73 | rm -f $2 # remove if user wants to overwrite |
|---|
| 74 | else |
|---|
| 75 | echo -e "Datei ${red}$2${normal} gibt es schon → Installation abgebrochen" |
|---|
| 76 | exit |
|---|
| 77 | fi |
|---|
| 78 | fi |
|---|
| 79 | echo "Erstelle Datei $2" # create |
|---|
| 80 | $1 > $2 # call subroutine $1 and write to file $2 |
|---|
| 81 | } |
|---|
| 82 | |
|---|
| 83 | ## show options if NEO is not installed so far |
|---|
| 84 | install_options() |
|---|
| 85 | { |
|---|
| 86 | echo "Bislang gibt es kein vollständig konfiguriertes NEO auf Ihrem System" |
|---|
| 87 | echo |
|---|
| 88 | echo "Sie haben folgende Möglichkeiten:" |
|---|
| 89 | echo |
|---|
| 90 | echo " [1] NEO nur testen" |
|---|
| 91 | echo " Sie haben die Möglichkeit, NEO zu Testen, ihre Standardbelegung (in der Regel QWERTZ) bleibt erhalten" |
|---|
| 92 | echo |
|---|
| 93 | echo |
|---|
| 94 | echo " [2] NEO als Standardbelegung" |
|---|
| 95 | echo " Mit dieser Option wird NEO die neue Standardbelegung für diesen Benutzer und nach (nicht vor!) dem" |
|---|
| 96 | echo " Login automatisch aktiviert" |
|---|
| 97 | echo |
|---|
| 98 | echo |
|---|
| 99 | echo -e " Wenn ${green}installiere_neo${normal} ein weiteres Mal aufgerufen wird, haben weitere Optionen – z.B. die Deinstallation von NEO" |
|---|
| 100 | echo |
|---|
| 101 | |
|---|
| 102 | installoption="" |
|---|
| 103 | while [ ! $installoption ] # choose between QWERTZ or NEO as standard |
|---|
| 104 | do # switch with ›asdf‹ and ›uiae‹ |
|---|
| 105 | echo |
|---|
| 106 | read -p "Wählen Sie eine Option [1,2]: " -e installoption |
|---|
| 107 | case $installoption in |
|---|
| 108 | 2) |
|---|
| 109 | echo |
|---|
| 110 | echo "Nach dem Login wird NEO die Standardbelegung sein." |
|---|
| 111 | echo -e "Um dies zu ändern, kann ${green}installiere_neo${normal} ein weiteres Mal ausgeführt werden." |
|---|
| 112 | echo -e ${red} |
|---|
| 113 | read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen" |
|---|
| 114 | echo -e ${normal} |
|---|
| 115 | ;; |
|---|
| 116 | 1) |
|---|
| 117 | echo |
|---|
| 118 | echo "Das Standardlayout wird nicht verändert." |
|---|
| 119 | echo -e "Zu NEO kann man jederzeit mit der Abrollbewegung ${green}asdf${normal} wechseln." |
|---|
| 120 | echo -e ${red} |
|---|
| 121 | read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen" |
|---|
| 122 | echo -e ${normal} |
|---|
| 123 | ;; |
|---|
| 124 | *) |
|---|
| 125 | echo |
|---|
| 126 | echo "Bitte wählen Sie die Optionen 1, um NEO zu testen oder 2, um NEO zur Standardbelegung zu machen" |
|---|
| 127 | installoption="" |
|---|
| 128 | ;; |
|---|
| 129 | esac |
|---|
| 130 | done |
|---|
| 131 | |
|---|
| 132 | |
|---|
| 133 | echo |
|---|
| 134 | echo "Installation von NEO mit xmodmap wird gestartet…" |
|---|
| 135 | echo |
|---|
| 136 | echo |
|---|
| 137 | |
|---|
| 138 | # *** main installation process *** |
|---|
| 139 | # creating a directory $inst_dir |
|---|
| 140 | if [ -d $inst_dir ] |
|---|
| 141 | then |
|---|
| 142 | echo -e "Das Verzeichnis ${red}$inst_dir${normal} gibt es bereits – wird verwendet…" |
|---|
| 143 | else |
|---|
| 144 | echo -e "Erstelle $inst_dir" |
|---|
| 145 | mkdir $inst_dir |
|---|
| 146 | fi |
|---|
| 147 | |
|---|
| 148 | # creating NEO files in $inst_dir |
|---|
| 149 | create neo_xmodmap $inst_dir/neo_de.xmodmap |
|---|
| 150 | create neo_console $inst_dir/neo.map |
|---|
| 151 | create neo_asdf $inst_dir/asdf |
|---|
| 152 | chmod u+x $inst_dir/asdf |
|---|
| 153 | create neo_uiae $inst_dir/uiae |
|---|
| 154 | chmod u+x $inst_dir/uiae |
|---|
| 155 | create neo_referenz $inst_dir/neo20.txt |
|---|
| 156 | create neo_neo $inst_dir/neo |
|---|
| 157 | chmod u+x $inst_dir/neo |
|---|
| 158 | create neo_num $inst_dir/num |
|---|
| 159 | chmod u+x $inst_dir/num |
|---|
| 160 | create neo_wiemitneo $inst_dir/wiemitneo |
|---|
| 161 | chmod u+x $inst_dir/wiemitneo |
|---|
| 162 | create neo_beschreibe $inst_dir/beschreibe |
|---|
| 163 | chmod u+x $inst_dir/beschreibe |
|---|
| 164 | |
|---|
| 165 | echo "Ergängze die Compose-Erweiterung von NEO…" |
|---|
| 166 | create neo_compose $inst_dir/Compose.neo |
|---|
| 167 | if [ -f $HOME/.XCompose ] |
|---|
| 168 | then |
|---|
| 169 | echo -e "Die Datei ${red}$HOME/.XCompose${normal} gibt es bereits – soll die bestehende Datei überschrieben werden? \c"; read -p "[J,N] " -e overwrite |
|---|
| 170 | if [ "$overwrite" = "J" ] # overwrite? |
|---|
| 171 | then |
|---|
| 172 | echo "Datei $HOME/.XCompose wird überschrieben!" |
|---|
| 173 | cat /usr/share/X11/locale/en_US.UTF-8/Compose $inst_dir/Compose.neo > $HOME/.XCompose |
|---|
| 174 | else |
|---|
| 175 | echo -e "Datei ${red}$HOME/.XCompose${normal} bleibt erhalten, jedoch kann die Compos-Erweiterung von NEO nicht genutzt werden." |
|---|
| 176 | fi |
|---|
| 177 | else |
|---|
| 178 | cat /usr/share/X11/locale/en_US.UTF-8/Compose $inst_dir/Compose.neo > $HOME/.XCompose |
|---|
| 179 | fi |
|---|
| 180 | |
|---|
| 181 | create neorc $HOME/.neorc |
|---|
| 182 | |
|---|
| 183 | # entry in $HOME/.profile with NEO or QWERTZ as standard keyboard layout after login |
|---|
| 184 | case $installoption in |
|---|
| 185 | 2) |
|---|
| 186 | echo |
|---|
| 187 | echo "Nach dem Login wird NEO die Standardbelegung sein." |
|---|
| 188 | echo -e "Um dies zu ändern, kann ${green}installiere_neo${normal} ein weiteres Mal ausgeführt werden." |
|---|
| 189 | rmfromprofile |
|---|
| 190 | profile_neo >> $HOME/.profile |
|---|
| 191 | ;; |
|---|
| 192 | 1) |
|---|
| 193 | echo |
|---|
| 194 | echo "Das Standardlayout wird nich verändert." |
|---|
| 195 | rmfromprofile |
|---|
| 196 | profile_qwertz >> $HOME/.profile |
|---|
| 197 | ;; |
|---|
| 198 | esac |
|---|
| 199 | } |
|---|
| 200 | |
|---|
| 201 | # remove files for uninstall option |
|---|
| 202 | remove() |
|---|
| 203 | { |
|---|
| 204 | echo "Entferne $1" |
|---|
| 205 | rm $1 || echo -e "${red}Konnte die Datei $1 nicht entfernen!${normal}" |
|---|
| 206 | } |
|---|
| 207 | |
|---|
| 208 | # remove all directories, files and entries made by ›installiere_neo‹ |
|---|
| 209 | deinstall() |
|---|
| 210 | { |
|---|
| 211 | echo |
|---|
| 212 | echo |
|---|
| 213 | rmfromprofile |
|---|
| 214 | remove $HOME/.neorc |
|---|
| 215 | remove $inst_dir/starte_neo |
|---|
| 216 | remove $inst_dir/Compose.neo |
|---|
| 217 | remove $inst_dir/neo20.txt |
|---|
| 218 | remove $inst_dir/num |
|---|
| 219 | remove $inst_dir/neo |
|---|
| 220 | remove $inst_dir/uiae |
|---|
| 221 | remove $inst_dir/asdf |
|---|
| 222 | remove $inst_dir/neo.map |
|---|
| 223 | remove $inst_dir/neo_de.xmodmap |
|---|
| 224 | echo "Entferne $inst_dir/" |
|---|
| 225 | rmdir $inst_dir/ || echo -e "${red}Konnte das Verzeichenis $inst_dir/ nicht entfernen!${normal}" |
|---|
| 226 | } |
|---|
| 227 | |
|---|
| 228 | # show options if NEO is already installed |
|---|
| 229 | deinstall_options() |
|---|
| 230 | { |
|---|
| 231 | echo "Es gibt auf Ihrem System bereits eine Konfiguration für NEO." |
|---|
| 232 | echo |
|---|
| 233 | echo "Sollte NEO nur für diesen Benutzer installiert sein, haben folgende Möglichkeiten:" |
|---|
| 234 | echo |
|---|
| 235 | echo " [1] NEO zukünftig nicht mehr als Standardbelegung" |
|---|
| 236 | echo -e " NEO wird nicht länger direkt nach dem Login zur Verfügung stehen, wohl aber nach Eingabe von ${green}adsf${normal}." |
|---|
| 237 | echo |
|---|
| 238 | echo |
|---|
| 239 | echo " [2] NEO vollständig vom System entfernen" |
|---|
| 240 | echo " Dieso Option entfernt alle zuvor angelegten Verzeichnisse, Datein und Einträge zur NEO-Belegung" |
|---|
| 241 | echo |
|---|
| 242 | echo |
|---|
| 243 | echo -e " Diese Optionen funktionieren nur dann zuverlässig, wenn NEO auch mit ${green}installiere_neo${normal} installiert wurde" |
|---|
| 244 | echo |
|---|
| 245 | |
|---|
| 246 | deinstalloption="" |
|---|
| 247 | while [ ! $deinstalloption ] # choose between deleting NEO as standard layout or delete NEO at all |
|---|
| 248 | do # if deleted as standard layout only, ›asdf‹ is still working |
|---|
| 249 | echo |
|---|
| 250 | read -p "Wählen Sie eine Option [1,2]: " -e deinstalloption |
|---|
| 251 | case $deinstalloption in |
|---|
| 252 | 2) |
|---|
| 253 | echo |
|---|
| 254 | echo -e "Alle zuvor von ${green}installiere_neo${normal} vorgenommen Änderungen am System werden gelöscht!" |
|---|
| 255 | echo -e ${red} |
|---|
| 256 | read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen" |
|---|
| 257 | echo -e ${normal} |
|---|
| 258 | cd $inst_dir |
|---|
| 259 | ./uiae |
|---|
| 260 | deinstall # full deinstallation |
|---|
| 261 | echo |
|---|
| 262 | echo -e "Alle von ${green}installiere_neo${normal} gemachten Änderungen an Ihrem System wurden entfernt." |
|---|
| 263 | ;; |
|---|
| 264 | 1) |
|---|
| 265 | echo |
|---|
| 266 | echo "NEO wird als Standardbelegung entfernt" |
|---|
| 267 | echo -e "Zu NEO kann man weiterhin jederzeit mit der Abrollbewegung ${green}asdf${normal} wechseln." |
|---|
| 268 | echo -e ${red} |
|---|
| 269 | read -n1 -p "Drücke eine Taste um fortzufahren oder STRG+C zum Abbrechen" |
|---|
| 270 | echo -e ${normal} |
|---|
| 271 | echo |
|---|
| 272 | rmfromprofile # alter the entry in $HOME/.profile; first: remove old entry |
|---|
| 273 | profile_qwertz >> $HOME/.profile # write the new entry |
|---|
| 274 | echo |
|---|
| 275 | echo "Nach dem nächsten Login wird NEO nicht mehr die Standardbelegung sein. " |
|---|
| 276 | ;; |
|---|
| 277 | *) |
|---|
| 278 | echo |
|---|
| 279 | echo "Bitte wählen Sie die Optionen 1, um NEO nicht länger als Standardbelegung zu nutzen" |
|---|
| 280 | echo " oder 2, um NEO vollständig zu entfernen" |
|---|
| 281 | deinstalloption="" |
|---|
| 282 | ;; |
|---|
| 283 | esac |
|---|
| 284 | done |
|---|
| 285 | } |
|---|