blog · git · desktop · images · contact


XTerm-Farben ins Linux-VT übernehmen

2012-02-12

Vorweg: Es gibt einen Artikel im englischen Arch-Wiki, der dasselbe Ziel beschreibt. Dort allerdings auf User-Basis. Ich habe solche Einstellungen aber gerne global, deshalb gehe ich einen leicht anderen Weg.

Es geht um die Farben an den Linux-VTs, also an den Terminals, die über Strg+Alt+Fn erreichbar sind. Standardmäßig ist dort vorallem das Blau ganz schlecht zu erkennen. Bei der Gelegenheit will ich auch gleich – soweit möglich – das Farbschema meines XTerms übernehmen.

Konfigurieren lassen sich die Farben über Kernel-Parameter (für Rot und Grün analog):

vt.default_blu= [VT]
                Format: <blue0>,<blue1>,<blue2>,...,<blue15>
                Change the default blue palette of the console.
                This is a 16-member array composed of values
                ranging from 0-255.

Die Reihenfolge hier ist glücklicherweise dieselbe wie die des XTerms in der „~/.Xresources“. Die Zahlen sind nur anders angeordnet und dezimal. Ausgehend von meiner „~/.Xresources“, die so aussieht:

! ...

! Farben, based on Thayer:
! http://cinderwick.ca/files/configs/Xdefaults
! Black
XTerm*color0:      #000000
XTerm*color8:      #555753
! Red
XTerm*color1:      #ff6565
XTerm*color9:      #cf0000
! Green
XTerm*color2:      #93d44f
XTerm*color10:     #00cf00
! Yellow
XTerm*color3:      #eab93d
XTerm*color11:     #ffc123
! Blue
XTerm*color4:      #204a87
XTerm*color12:     #3465a4
! Mangenta
XTerm*color5:      #ce5c00
XTerm*color13:     #f57900
! Cyan
XTerm*color6:      #89b6e2
XTerm*color14:     #46a4ff
! White
XTerm*color7:      #cccccc
XTerm*color15:     #ffffff

! ...

Ähnlich wie im Wiki-Artikel kann man das ganz gut automatisiert auslesen und dabei gleich die Umrechnung zur Basis 10 vornehmen sowie die Zahlen mit Kommas getrennt aneinanderreihen. Am Ende werden drei Parameter ausgegeben, die man dann im Bootmanager seiner Wahl als Parameter anfügen kann. Die Zeile wird dann etwas lang, aber das macht ja nichts.

#!/bin/bash

declare -A decimals

for color in {0..15}
do
    for chan in {1..3}
    do
        decimals[$chan]=${decimals[$chan]}$(awk --non-decimal-data \
            '/^XTerm.color'$color':/ {
                printf(",%d", ("0x"substr($2, '$chan' * 2, 2)) + 0)
            }' ~/.Xresources)
    done
done

{
    echo "vt.default_red=${decimals[1]:1}"
    echo "vt.default_grn=${decimals[2]:1}"
    echo "vt.default_blu=${decimals[3]:1}"
} | tee /tmp/farben-neu

Ich lasse es sowohl direkt ausgeben als auch in eine Datei schreiben, damit ich es direkt in die Bootmanager-Konfiguration integrieren kann.

Ergebnis ist beispielsweise:

vt.default_red=0,255,147,234,32,206,137,204,85,207,0,255,52,245,70,255
vt.default_grn=0,101,212,185,74,92,182,204,87,0,207,193,101,121,164,255
vt.default_blu=0,101,79,61,135,0,226,204,83,0,0,35,164,0,255,255

Ein paar Vergleichsbilder:

Comments?