Farbige Texte in den Konsolen

In diesem Blog geht es um rein kosmetische Änderungen. Allerdings wird man im täglichen Gebrauch feststellen, dass auch diese Kleinigkeiten einen praktischen Nutzen haben.

Da ich mich mit diesem Thema nur innerhalb von Ubuntu beschäftigt habe, gehe ich auch nur auf diese Distribution ein. Im Regelfall sollten die Änderungen aber auf alle Debian basierte Distributionen anwendbar sein.

Es geht um Farbige Textausgaben in den Konsolen. Der erste Punkt sind die Bootmeldungen beim Hochfahren des Systems. Diese sind nur sichtbar wenn man keinen Boot-Splash benutzt, sondern sich die Textmeldungen anzeigen lässt.
Ein bequemer Weg den Boot-Splash ein- oder auszuschalten ist das Programm Startup-Manager, welches sich über Synaptic bequem installieren lässt. Es handelt sich dabei um ein grafisches Frontend für den GRUB Boot-Loader, der bei Ubuntu verwendet wird.
Neben dem besagten Boot-Splash lassen sich noch viele weitere Dinge einstellen, wie Passwortschutz oder das Standard Betriebssystem.

Einstellen der Anzeige beim Bootvorgang
Wer diese Einstellung lieber von Hand vornehmen möchte, der muss die Datei “menu.lst” bearbeiten. Diese Datei gehört zum GRUB Boot-Loader und liegt im Verzeichnis “/boot/grub“.
Es handelt sich dabei um eine Systemdatei und man benötigt Super-User-Rechte um sie zu bearbeiten. Wer sich nicht sicher ist was er tut, sollte die Finger davon lassen. Sollte die “menu.lst” falsch konfiguriert sein, lässt sich das System nicht mehr booten!

Als erstes sollte man sich eine Sicherheitskopie anlegen.
cd /boot/grub
cp ./menu.lst ./menu.lst.bkp
Da die Änderungen erst beim nächsten Neustart aktiv werden, kann man somit die Datei wieder herstellen. Falls einem der Fehler vorher bewusst wird. Oder erst danach, mithilfe einer Rettungs-CD, b.z.w. der Ubuntu-CD, falls man die Live-CD Version besitzt.
Jetzt kann man die Datei öffnen. Entweder mit “sudo vim ./menu.lst“, falls man aus der Shell arbeitet oder mit “sudo gedit ./menu.lst” wenn man sich in Gnome befindet.

Dann heißt es nach unten scrollen, bis man die Einträge der Betriebssysteme findet, die einem beim Start des Systems angeboten werden. Zum Beispiel:

title        Ubuntu 8.04.1, kernel 2.6.24-19-generic
root        (hd0,1)
kernel        /boot/vmlinuz-2.6.24-19-generic root=xxx ro quiet splash
initrd        /boot/initrd.img-2.6.24-19-generic

Die beiden fett geschriebenen Optionen sind hierbei ausschlaggebend. Die Option “quiet” unterdrückt die Ausgabe von Textmeldungen beim Booten. Für das Splash Bild ist die Option “splash” verantwortlich.
Möchte ich also nur die Textmeldungen sehen so brauche ich nur beide Optionen löschen. Es ist aber auch eine Kombination möglich. Wird nur “quiet” gelöscht, so wird das Splash Bild und der Text angezeigt.
Ist die Datei geändert braucht man nur zu speichern und dann das System neu zu starten

Da das jetzt geklärt ist mache ich erstmal mit dem ungefährlicheren Thema weiter. Das Einfärben der Boot-Meldungen folgt dann weiter unten.

Einfärben des Gnome-Terminals
Leider kommt Ubuntu sehr farblos daher, zumindest was die Terminals angeht. Das macht sich besonders bemerkbar wenn man komplexe Arbeiten verrichten muss, wie das Kompilieren von Programmen beispielsweise. So sieht der Gnome-Terminal normalerweise aus:

Gnome Terminal ohne Farben

Gnome Terminal ohne Farben

(Bitte nicht von dem Grün irritieren lassen. Es handelt sich dabei nur um ein Schema, welches die Standardfarben ersetzt.)
Das Problem hier liegt darin, dass man Schwierigkeiten bekommt zu erkennen wo die Ausgabe eines Befehls anfängt und wo sie aufhört. Zudem muss man den Eingabe Prompt auch erst suchen.
Wie man sieht ist der “ls” Befehl bereits farbig, was schon mal eine Erleichterung darstellt, da sich schnell erkennen lässt was Dateien und was Verzeichnisse sind.

Um dem Terminal nun Farben zu geben muss eine Datei im Benutzerverzeichnis geändert werden. Das heißt zum einen, dass man keine Super-User-Rechte benötigt. Zum Anderen aber auch das sich die Änderung nur auf den betreffenden Benutzer bezieht.
Die Datei heißt “.bashrc“. Der Punkt am Anfang des Dateinamens bedeutet, dass die Datei versteckt ist.
Nun gilt es erst einmal ein Backup zu erstellen, mit “cp ./.bashrc ./.bashrc.bkp“, und dann die Datei öffnen mit dem Editor der Wahl, z.B. “gedit ./.bashrc“.

Glücklicherweise gestaltet sich das Vorgehen nun relativ leicht, da die nötigen Code-Zeilen schon in der Datei enthalten sind, jedoch auskommentiert. Bei Zeile 25 sollte man folgenden Text finden:

# set a fancy prompt (non-color, unless we know we “want” color)
case “$TERM” in
xterm-color)
PS1=’${debian_chroot:+($debian_chroot)}\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ ‘
;;
*)
PS1=’${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ‘
;;
esac

# Comment in the above and uncomment this below for a color prompt
#PS1=’${debian_chroot:+($debian_chroot)}\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ ‘

Wie die fett gedruckte Zeile uns bereits mitteilt reicht es aus, den oberen Bereich auszukommentieren und im Gegenzug das “#” bei der letzten Zeile zu entfernen. Das Ganze sollte dann so aussehen:

# set a fancy prompt (non-color, unless we know we “want” color)
#case “$TERM” in
#xterm-color)
# PS1=’${debian_chroot:+($debian_chroot)}\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ ‘
# ;;
#*)
# PS1=’${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ‘
# ;;
#esac

# Comment in the above and uncomment this below for a color prompt
PS1=’${debian_chroot:+($debian_chroot)}\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ ‘

Wenn man die Datei jetzt speichert und einen neuen Terminal öffnet, bekommt man eine farbige Ausgabe.

Gnome Terminal mit Farben

Gnome Terminal mit Farben

Wie man sieht ist nun der Prompt eingefärbt, was es leicht macht die Ausgaben der einzelnen Befehle auseinander zu halten.

Wem der farbige “ls” Befehl fehlt, der kann die Zeile ” alias ls=’ls –color=auto’ ” (ohne die ” aber mit ‘) in die Datei “.bashrc” einfügen.

Einfärben der Virtuellen Konsole
Um die Farben, die gerade dem Gnome-Terminal hinzugefügt wurden, auch in den Virtuellen Konsolen benutzen zu können, ist mit unter nicht mal eine Änderung vonnöten. Je nachdem wie das System konfiguriert ist wird die Datei “.bashrc” auch für diese Konsole benutzt.
Ob dem so ist lässt sich leicht prüfen indem man auf eine der Konsolen wechselt. (STRG + ALT + F1 bis F6)
Nachdem man sich dort eingeloggt hat sieht man entweder einen farbigen Prompt oder nicht. Falls nicht ist nur eine kleine Änderung nötig. (Mit STRG + ALT + F7 geht es wieder auf den Desktop)

Hierzu muss man nur die Datei “.bashrc” in die Datei “.profile” im eigenen Home-Verzeichnis einbinden.
Dazu öffnet man “.profile” mit einem Editor und fügt folgende Zeilen ein:

if [ -n “$BASH_VERSION” ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi

Danach die Datei einfach speichern und erneut auf einer Virtuellen Konsole einloggen. Nun sollte man die selben Farben sehen wie im Gnome-Terminal. D.h. die Farben sind ähnlich, da die Virtuelle Konsole weniger Farben darstellt.

Einfärben der Boot Meldungen
Eigentlich triff es die Überschrift nicht ganz. Denn ich färbe nicht die ganzen Meldungen ein, sondern nur die Erfolgsmeldungen die man auf der rechten Bildschirmhälfte sieht. Man bekommt also ein grünes “done” oder ein rotes “failed” zu sehen, statt den einfarbigen Varianten. Wer sich wundert … ja, es heißt eigentlich “ok” und nicht “done”. Ich bevorzuge aber diesen Text, aus persönlicher Vorliebe.

Achtung: Hier wird wieder an System-Dateien gearbeitet. Ein Fehler hier und das System bootet nicht mehr. Wer sich nicht sicher ist sollte also die Finger davon lassen.

Der Schlüssel zum Erfolg ist die Datei “lsb-base-logging.sh” im Verzeichnis “/etc“. Bitte unbedingt eine Sicherungs-Kopie der Datei erstellen! Danach die Datei mit Super-User-Rechten in einem Editor öffnen.
sudo gedit /etc/lsb-base-logging.sh

Danach muss man die Funktion “log_end_msg ()” suchen und dort etwas nach unten scrollen, bis man diesen Text findet:

if [ “$1” -eq 0 ]; then
echo “[ OK ]”
else
printf ‘[‘
$TPUT setaf 1 # red
printf fail
$TPUT op # normal
echo ‘]’
fi

Wie man sehen kann wird bereits Rot für das Wort “fail” verwendet. Bei einem Erfolg wird jedoch keine Farbe verändert. ( echo “[ OK ])
Die Farben werden mit dem Befehl “$TPUT setaf 1 geändert, wobei die Zahl den Farbwert bestimmt.
$TPUT setaf 1  –  Rot
$TPUT setaf 2  –  Grün
$TPUT setaf 3  –  Braun
$TPUT setaf 4  –  Blau
$TPUT setaf 5  –  Pink
$TPUT setaf 6  –  Cyan
$TPUT op  –  Standard Farbe, meistens Weiß

Um nun die grüne Erfolgsmeldung zu bekommen kopiert man den unteren Bereich, also alles zwischen “else” und “fi“, und ersetzt damit die Zeile “echo “[ OK ]”“. Dann muss man nur noch die Farbe ändern, indem man die Zahl in der Zeile “$TPUT setaf 1” ändert. In unserem Beispiel also in die “2“.
Als Zweites sollte man den Text, der ausgegeben wird, noch anpassen. Er wird in der Zeile “printf fail” festgelegt. Statt “fail” kann man dann entweder “ok” oder “done” einsetzen. Ist man fertig sollte es so aussehen:

if [ “$1” -eq 0 ]; then
printf ‘[‘
$TPUT setaf 2 # green
printf done
$TPUT op # normal
echo ‘]’

else
printf ‘[‘
$TPUT setaf 1 # red
printf fail
$TPUT op # normal
echo ‘]’
fi

Hinweis: Um diese Änderungen auch zu sehen, muss im GRUB der Boot-Splash deaktiviert werden, wie weiter oben beschrieben. Wird “splash” ohne die Option “quiet” benutzt, so sind zwar Textmeldungen sichtbar, jedoch in dem Farb-Schema des Splash-Themes. Es müssen also beide Optionen in der “menu.lst” entfernt werden.

Zum Schluss noch der Hinweis, dass man die beschriebenen Änderungen zum Einfärben des Gnome-Terminals und der Virtuellen Konsolen auch systemweit vornehmen kann. Der “.bashrc” Datei im Home-Verzeichnis entspricht dabei die Datei “/etc/bash.bashrc” für den Gnome-Terminal. Da diese Datei allerdings einen anderen Inhalt hat, muss man hier nach einer Zeile suchen die mit “PS1=” beginnt, und diese Zeile mit der erstetzen, die in der “./bashrc” auskommentiert wurde.
(PS1=’${debian_chroot:+($debian_chroot)}\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ ‘)

Das Gegenstück zur “.profile” Datei ist die Datei “/etc/profile“. Diese muss im Regelfall jedoch nicht geändert werden, da hier die Datei “bash.bashrc” bereits eingebunden wird.

Quellen und Links
Der Bereich “Einfärben der Boot-Meldungen” beruht auf diesem Artikel auf UbuntuUsers.de. Dort finden sich auch noch weiterführende Informationen zum Thema.

Des weiteren möchte ich auf einen Artikel auf Softpedia hinweisen, der zwar in Englischer Sprache ist, sich jedoch viel tiefer mit den Farben der Terminals befasst.

This entry was posted in Ubuntu and tagged , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s