18 Nov 2008

Farbiges TTY mit höherer Auflösung (Kubuntu)

Submitted by blizzz

Neulich hat meine Freundin bei Sebas eine hübsch angepasste TTY gesehen: mit höherer Auflösung und farbiger Eingabeaufforderung/Prompt. Da ich zur Zeit im Urlaub und bei ihr bin, sollte ich mich mal schlau machen und es ihr einrichten. Gesagt getan; und habs auch bei mir eingerichtet. Und so gehts:

Farbige Prompt

Standardmäßig sieht die prompt bei Kubuntu bekanntermaßen wie folgt aus:

benutzer@hostname:/aktueller/Pfad$

Das Aussehen wird definiert durch die Umgebungsvariable PS1. Die Standardeinstellung, die obige Ausgabe erzeugt, ist

'${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Sieht komplizierter aus als es ist ;) Den ersten Teil können wir vernachlässigen, das \u steht für den Benutzer, das \h für den Computernamen, das \w für das aktuelle Verzeichnis mit Pfad und das \$ sorgt dafür, dass fallweise # (bei root) oder $ (ansonsten) angezeigt werden. Eine Tabelle der weiteren Sequenzen/Platzhalter findet sich unter diesem Link; das es sich dabei um eine Gentoo-Seite handelt ist unerheblich.

Dieses soll für das TTY, eine Login-Shell, geändert werden. Wenn sich dort ein Benutzer anmeldet, wird die Datei ~/.profile eingelesen, sofern sie existiert, ansonsten werden Standardwerte verwendet. Bei Kubuntu gibt es diese Datei nicht im Benutzerverzeichnis, liegt aber in der Standardausführung bereit. Diese wird als erstes in das Benutzerverzeichnis kopiert:

cp /etc/skel/.profile ~

In dieser Datei erhält die Umgebungsvariable nun einen neuen Wert. Dort kann man nicht nur die angezeigten Werte ändern (Sequenzen s. Tabelle im oberen Link), sondern auch die Farben. 8 Farben können in normalem und im fetten Stil verwendet werden, für Vorder- wie auch für den Hintergrund. Jede Farbe hat dabei einen Code, der aus Abbildung 1.1 aus demselben Link entnommen werden kann. Die untereinanderstehenden Werte sind dabei diejenigen für den Vordergrund, die horizontal angeordneten für den Hintergrund.

Um einen fabrigen Abschnitt zu definieren, verwendet man die Sequenz \e[Xm, wobei das X durch die Farbangabe (oder durch Semikolon separierten Angaben) ersetzt wird. Fettdruck wird durch die ergänzende Angabe von 1 erzeugt (z.B. \e[34;1m). Mit \e[0m wird das ganze zurückgesetzt.

Zudem muss jede dieser Sequenz als nicht druckbares Zeichen gekennzeichnet sein (sonst funktioniert das Blättern in der vorangegangenen Befehlen nicht mehr). Das geschieht durch das einschließen einer Farbsequenz in \[ und \]

Genug der Theorie: damit der Benutzername (\u) in fettem Blau erscheint, wird aus

\u
\[\e[34;1m\]\u\[\

Einen dicken roten Computername erzeugt man so:

\[\e[31;1m\]\h

So kann für jeden gewünschten Abschnitt voran gegangen werden. Ich habe mir ein eine Ausgabe eingerichtet, in der die Uhrzeit in Cyan voransteht, der Benutzer in Blau, der Rechnername in Rot, der Pfad in Gelb und die Trennzeichen in Grün dargestellt werden. Das ganze sieht bei mir dann so aus:

\[\e[36;1m\]\t \[\e[34;1m\]\u\[\e[32m\]@\[\e[31;1m\]\h\[\e[32m\]:\[\e[33;1m\]\w\[\e[32m\]$\[\e[0m\]

Das Zurücksetzen der Farbeinstellungen am Ende ist wichtig, um wieder die standardmäßige Schrift zu erhalten.

Hat man sich nun das gewünschte Design zusammengestellt, sollte man es zunächst nochmal testen, bevor man es in der Datei speichert. Dazu gibt man in der Konsole folgendes ein (es muss jetzt nicht auf der TTY sein):

export PS1="${debian_chroot:+($debian_chroot)}FORMATIERUNG "

Wobei FORMATIERUNG durch das gerade erzeugte Design ersetzt wird. Die Änderung wird in der aktiven Shell direkt wirksam. Sind die Farben so wie gewünscht? Kann man gewohnt nach oben blättern? Wenn nicht, die Einstellungen überprüfen. Passt alles, kann der getätigte Befehl nun an die ~/.profile angehangen werden. Beim nächsten Login in der TTY werden die Farbeinstellungen wirksam.

Möchte man dies auch in der normalen Konsole (incl. Yakuake u.a.) unter KDE haben, wird die Zeile ans Ende der ~/.bashrc eingefügt. Existiert diese nicht, dann kopiert man sie zunächst aus /etc/skel/ ins Benutzerverzeichnis.

Auflösung der TTY

Unter Kubuntu erscheint die TTY in einer niedrigen Auflösung von 640x480. Es ist nicht unbedingt hübsch, vor allem sieht man gerade bei großen Ausgaben nicht viel. Man kann jedoch einen Bootparameter setzen, um diese zu ändern.

Auch hier wird für die passende Auflösung mitsamt der Farbeigenschaften ein Code benötigt. Eine Tabelle dieser befindet sich auf dieser Hilfeseite von Ubuntu. Bspw. hat die Auflösung 1024x768 mit einer Farbtiefe von 24Bit den Code 792.

Nun öffnet man die Datei /boot/grub/menu.lst mit root-Rechten im Editor seiner Wahl (für den Fall eines Falles sollte man sich mit einem Konsoleneditor auskennen um es ggf. rückgängig machen zu können). Jeder Kernelzeile, die nicht zu einem recovery mode gehört, wird nun

vga=CODE

hinzugefügt, wobei CODE entsprechend ersetzt wird. Nach einem Neustart sollte die gewünschte Auflösung verwendet werden (sofern diese von der Hardware unterstützt wird versteht sich).

Falls jetzt aber das Kubuntu-Logo (USplash) verzerrt ist, beißt sich diese Konfiguration mit der der TTY. Aber auch dafür gibt es eine Lösung. Dazu öffnet man /etc/usplash.conf mit Root-Rechten und ersetzt die Werte bei xres und yres mit denen der TTY-Auflösung. Anschließend noch

sudo update-initramfs -u

ausführen, dann sollte auch dieses wieder passen.

So siehts aus

Nach paar mal Enter drücken ;)
Farbige TTY

Update

Bdgraue hat mich darauf aufmerksam gemacht, dass unklar ist, was in der ~/.profile stehen soll. Meine sieht folgendermaßen aus:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
 
# the default umask is set in /etc/profile
#umask 022
 
# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f ~/.bashrc ]; then
        . ~/.bashrc
    fi
fi
 
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi
 
export PS1="${debian_chroot:+($debian_chroot)}\[\e[36;1m\]\t \[\e[34;1m\]\u\[\e[32m\]@\[\e[31;1m\]\h\[\e[32m\]:\[\e[33;1m\]\w\[\e[32m\]$\[\e[0m\] "

Commander hat überdem (erstes Kommentar) einige wertvolle Tipps geliefert, die man sich zu Gemüte führen sollte.

Update 2

Nach einigen weiteren Tests, genügt es

  1. die export -Zeile in die .bashrc zu schreiben
  2. die /etc/skel/.profile nach ~ zu kopieren und so zu belassen

wenn im Benutzerverzeichnis keine .profile liegt, wird auch die .bashrc nicht eingebunden, andernfalls schon.

Comments

Ich würde die Farben jeweils nur in der .bashrc definieren, weil es ja auch nur für die Bash gilt.

Und den vga Parameter sollte man lieber in der menu.lst unter
# defoptions=
definieren, weil er dann auch nach dem nächsten Kernelupdate (welches ja ein update-grub ausführt) vorhanden sein wird.

Danke dir für die Tipps, ich habe im Update darauf verwiesen.

Add new comment