[[Getestet(general)]] {{{#!Wissen * [1]: [:Terminal: Ein Terminal öffnen] * [2]: [:Umgebungsvariable: Umgebungsvariablen setzen] * [3]: [:Editor: Einen Editor öffnen] * [4]: [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[TableOfContents(1)]] [[Bild(Wiki/Icons/terminal.png,76,links)]]Dieser Artikel beschreibt, wie man mit wenigen Handgriffen die Shell [:Bash:] bzw. das Prompt in der Shell etwas persönlicher gestaltet als mit dem gewöhnlichen Text "''@:~$''". Dies gilt natürlich auch bei Verwendung einer grafischen Oberfläche für das Prompt im Terminal [1]. Ein persönliches Prompt kann die Übersichtlichkeit fördern und wichtige Daten wie Temperaturen oder Lüfterdrehzahlen beinhalten. Das Prompt kann aber auch in eine einfache Zeichenkette geändert werden. Um dem Prompt noch etwas mehr Persönlichkeit zu geben, wird zusätzlich noch beschrieben, wie mit Farben gearbeitet wird. Dies kann ebenfalls zur Erhöhung der Übersichtlichkeit beitragen oder nur schön aussehen. = Zeichenkette = Das Prompt wird in der Variable `PS1` gespeichert [2]. Diese kann man mit {{{#!Befehl echo $PS1 }}} auslesen. Als Standard ist {{{#!Text ${debian_chroot:+($debian_chroot)}\u@\h:\w\$ }}} eingetragen. Was die einzelnen Sachen bedeuten wird später beschrieben. Da es sich um eine [:Umgebungsvariable:] handelt, kann diese auch überschrieben werden. Dies geschieht in einem ganz einfachen Fall mit mit einer Zeichenkette {{{#!Befehl PS1='> ' }}} Danach ist das Prompt nur noch das Relationszeichen "''>''". Es können aber auch Ausgaben von allen Befehlen in das Prompt mit einbezogen werden. {{{#!Befehl PS1='`pwd` > ' }}} So wird das aktuelle Verzeichnis gefolgt von dem Relationszeichen angezeigt. Neben den Befehlen gibt es eine Reihe von Variablen, die benutzt werden können: ||<#F9EAAF> '''Variable''' ||<#F9EAAF> '''Ausgabe''' || || `\a`|| das ASCII bell Zeichen (07) || || `\A`|| Uhrzeit im 24-Stunden Format (''hh:mm'') || || `\d`|| Datum in "''Wochentag Monat Tag''" z.B., "''Mit Mai 26''") || || `\e`|| ASCII escape Zeichen (033) || || `\h`|| Hostname auf dem die Shell läuft bis zum ersten "." || || `\H`|| Hostname komplett || || `\j`|| Anzahl der Jobs in der Shell || || `\l`|| Das tty, auf dem die Shell läuft || || `\n`|| Neue Zeile || || `\t`|| Uhrzeit im 24-Stunden Format (''hh:mm:ss'') || || `\T`|| Uhrzeit im 12-Stunden Format (''hh:mm:ss'') || || `\r`|| carriage return || || `\s`|| Name der verwendeten Shell (sh, bash, ..) || || `\u`|| Name des Nutzers, der die Shell gestartet hat || || `\v`|| Version der bash (z.B. 2.00) || || `\V`|| Release der bash, Version, Patchlevel || || `\w`|| momentanes Arbeitsverzeichnis || || `\W`|| letzte Komponente des Arbeitsverzeichnisses || ||<-2 rowbgcolor="#EEEEEE"> || || `\!` || Aktuelle History-Nummer || || `\#` || Aktuelle Befehls-Nummer || || `\$` || Wenn root ein "''#''", sonst ein "''$''" || || `\\` || Backslash || || `\nnn`|| Zeichen entsprechend der oktalen Zahl nnn || || `\[`|| Beginn einer Sequenz von nicht-darstellbaren Zeichen || || `\]`|| Ende einer Sequenz von nicht-darstellbaren Zeichen || || `\@`|| Aktuelle Zeit im 12-Stunden am/pm Format || Die Ausgabe von "''Uhrzeit user@rechner verzeichnis history-nummer >''" wird erzeugt durch {{{#!Befehl PS1='\A \u@\h \W \! >' }}} Diese Standard-Escape-Zeichen und Befehle kann man beliebig komplex schachteln. Zusätzlich können ganz normale alphanumerische Zeichen eingebaut werden. = Farben = Um das neu erstellte Prompt optisch noch ansprechender zu gestalten und nicht nur mit Informationen zu füttern, können noch Farben verwendet werden. Farbcodierungen werden dafür in den String zum setzen der PS1-Variable eingebaut. Farben machen durchaus Sinn und helfen die Übersichtlichkeit zu steigern, sofern man es nicht übertreibt. Um Interpretationsfehler seitens der Shell bei den Farben zu vermeiden, werden sie durch `\[` am Anfang und `\]` am Ende begrenzt. In dieser Eingrenzung werden Terminal-Kontroll-Sequenzen angegeben, welche mit `\033[` beginnen und auf `m` enden. Eine Farbdefinition behält solange ihre Gültigkeit, bis eine neue folgt. Die letzte angegebene Farbe ist die, in der auch die Benutzereingaben erfolgen. ||<#F9EAAF> Sequenz ||<#F9EAAF> Farbe || || `\[\033[0;30m\]` || schwarz || || `\[\033[1;30m\]` || dunkelgrau || || `\[\033[0;31m\]` || rot || || `\[\033[1;31m\]` || helles rot || || `\[\033[0;32m\]` || grün || || `\[\033[1;32m\]` || hellgrün || || `\[\033[0;33m\]` || braun || || `\[\033[1;33m\]` || gelb || || `\[\033[0;34m\]` || blau || || `\[\033[1;34m\]` || hellblau || || `\[\033[0;35m\]` || dunkellila || || `\[\033[1;35m\]` || helllila || || `\[\033[0;36m\]` || Dunkeltürkis|| || `\[\033[1;36m\]` || Türkis || || `\[\033[0;37m\]` || Hellgrau || || `\[\033[1;37m\]` || weiß || || `\[\033[0m\]` || farblos || Falls man die Hintergrundfarbe verändern möchte, findet man die entsprechenden Escape-Sequenzen hier: ||<#F9EAAF> Sequenz||<#F9EAAF> Hintergrundfarbe|| || `\[\033[XXm\]`|| Keine Hintergrundfarbe|| || `\[\033[40;XXm\]`|| Schwarzer Hintergrund|| || `\[\033[41;XXm\]`|| Roter Hintergrund|| || `\[\033[42;XXm\]`|| Grüner Hintergrund|| || `\[\033[43;XXm\]`|| Hellbrauner Hintergrund|| || `\[\033[44;XXm\]`|| Blauer Hintergrund|| || `\[\033[45;XXm\]`|| Lila Hintergrund|| || `\[\033[46;XXm\]`|| Türkis Hintergrund|| || `\[\033[47;XXm\]`|| Hellgrau Hintergrund|| Dies kann man jetzt alles kombinieren, jedoch werden die PS1-Variablen schnell sehr unübersichtlich. {{{#!Befehl PS1='\[\033[1;33m\]\t\[\033[0;32m\] \u > ' }}} erzeugt diese Ausgabe || Uhrzeit_in hh:mm:ss || user > || = Änderungen speichern = Damit die Änderungen dauerhaft sind, müssen diese gespeichert werden. Für den aktuellen Benutzer geschieht dies in seinem [:Homeverzeichnis:]. Dort wird die Datei '''~/.bashrc''' geöffnet und an das Ende wird der String `PS1='meinPrompt'` angefügt [3]. Nun muss man sich lediglich neu anmelden, damit die veränderte Datei eingelesen wird. Soll ein Prompt für alle Benutzer eines Systems gelten, so wird der Eintrag zur `PS1`-Variable in der Datei '''/etc/bash.bashrc''' angepasst. Auch hier ist ein Ab- und anschließendes Anmelden nötig, um die Änderungen wirksam zu machen. = Beispiele = Abschließend sind hier einige Beispiele für verschiedene Prompts zusammengestellt. == Beispiel 1 == {{{#!Befehl PS1='\[\033[0;32;40m\]\u@\H:\e[0m ' }}} || user@rechner || == Beispiel 2 == {{{#!Befehl PS1='\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] ' }}} || [ || username@rechnername:verzeichnis || ]|| $ || == Beispiel 3 == {{{#!Befehl PS1='\s\v \[\e[31m\]User \[\e[34m\]\u \[\e[31m\]on host \[\e[34m\]\h\[\e[31m\] in dir \[\e[34m\]\w\n\d \t> \[\e[37m\] ' }}} || shell-name version || User || username || on host || rechnername|| in dir|| verzeichnis|| ||<-7 rowbgcolor="#424542" style="color:#0000ff;"> wochentag monat hh:mm:ss>|| == Beispiel 4 == {{{#!Befehl PS1='\[\033[1;73m\][`date +%H:%M:%S`]\[\033[1;36m\][\[\033[1;34m\]\u\[\033[1;33m\]@\[\033[1;32m\]\h:\[\033[1;35m\]\w\[\033[1;36m\]]\[\033[1;31m\]\\$\[\033[0m\] ' }}} || [hh:mm:ss] || [|| username|| @|| rechnername: || verzeichnis|| ]|| $|| == Beispiel 5 == Dies ist etwas komplizierter und erfordert etwas Erklärung. Wenn man im Prompt eine Anzeige über den aktuellen Ladestand seines Akkus haben möchte, kann man dies auf folgende Weise tun. Man erstellt zuerst mit einem Editor ein Skript '''.battery.bash''' im [:Homeverzeichnis:] des Benutzers, das den Ladestand berechnet und ausgibt [3]. Anschließend wird die Ausgabe dieses Skripts in das Prompt integriert. Bei folgendem Inhalt der Datei '''~/.battery.bash''' müssen ggf. die Verzeichnisse für `BATTERY_DIR` und `AC_DIR` angepasst werden. {{{#!Text #!/bin/bash BATTERY_DIR=/proc/acpi/battery/BAT1 AC_DIR=/proc/acpi/ac_adapter/ADP1 if grep -q 'last full capacity' ${BATTERY_DIR}/info ; then FULL_BATTERY=$( awk '/last full capacity/ {print $4}' ${BATTERY_DIR}/info ) CURRENT_BATTERY=$( awk '/remaining capacity/ {print $3}' ${BATTERY_DIR}/state ) PERCENT=$(( ${CURRENT_BATTERY} * 100 / ${FULL_BATTERY} )) if grep -q on-line ${AC_DIR}/state; then echo "Netz $PERCENT%" else echo "Akku $PERCENT%" fi else echo "Ohne Akku" fi }}} Dem gespeicherten Skript werden nun Ausführungsrechte verliehen [4]: {{{#!Befehl chmod u+x ~/.battery.bash }}} Die Einbindung ins Prompt erfolgt über z.B. {{{#!Befehl PS1='\u@\h:\w_`~/.battery.bash`\$ ' }}} Es werden drei unterschiedliche Ausgaben erzeugt. Im reinen Akkubetrieb {{{#!Befehl username@rechnername:verzeichnis_Akku98% }}} Wenn sowohl Akku als auch Netzteil angeschlossen sind {{{#!Befehl username@rechnername:verzeichnis_Netz98% }}} Und im reinen Netzbetrieb {{{#!Befehl username@rechnername:verzeichnis_OhneAkku }}} = Auflösung ändern = Als erstes benötigt man spezielles Tool, um die Werte für den Framebuffer der Karte auslesen zu können. Dafür wird hier [:Gerätemanager#hwinfo:hwinfo] verwendet. Nach der Installation kann man die Framebufferwerte so auslesen: {{{#!Befehl sudo hwinfo --framebuffer }}} Man sollte dann so etwas sehen: {{{#!Befehl Mode 0x0300: 640x400 (+640), 8 bits Mode 0x0301: 640x480 (+640), 8 bits Mode 0x0303: 800x600 (+800), 8 bits Mode 0x0305: 1024x768 (+1024), 8 bits Mode 0x0307: 1280x1024 (+1280), 8 bits Mode 0x030e: 320x200 (+640), 16 bits Mode 0x030f: 320x200 (+1280), 24 bits }}} Um die Schrift auf gewöhnlichen Monitoren nicht zu verzerren, wählt man einen "8 bits" Wert. Möchte man eine Auflösung von 1024x768 Pixeln haben, dann sollte die Wahl "0x0305" sein. Man notiert sich also den Modus und öffnen dann die '''[:menu.lst:]''' in einem Editor mit Rootrechten [3]: Man sucht nun diesen Abschnitt: {{{#!Text ## additional options to use with the default boot option, but not with the ## alternatives ## e.g. defoptions=vga=791 resume=/dev/hda5 # defoptions=quiet splash }}} oder einen ähnlichen. Hinter `splash` ergänzt man nun noch `vga=0x0305`, dass das ganze dann so aussieht: {{{#!Text ## e.g. defoptions=vga=791 resume=/dev/hda5 # defoptions=quiet splash vga=0x0305 }}} Anschließend muss noch der Bootloader (GRUB) über die neue Eintragung in Kenntnis gesetzt werden: {{{#!Befehl sudo update-grub }}} Nach einem Neustart hat man jetzt eine höhere Auflösung. ---- * [:Kategorie/Shell:]