Am Anfang war das Logo

Eigene Boot-Screens unter Linux

Praxis & Tipps | Praxis

Aktuelle Distributionen schmücken sich mit einem grafischen Boot-Screen an Stelle des schnöden ‘lilo:’-Prompts. Aber wäre ein eigenes Bild an dieser Stelle nicht viel schöner?

Aufmacher

Die Zeiten, in denen Linux seinen Bootprozess schmucklos im Textmodus absolvierte, sind vorbei. Bunt muss es sein - und das fängt schon beim Linux-Loader Lilo an. Viele Distributionen haben den Linux-eigenen Bootmanager so erweitert, dass er sein Startmenü vor einer ansehnlichen Hintergrundgrafik darstellt. Aber der engagierte Linuxer gibt sich natürlich nicht mit dem Splash Screen des Distributors zufrieden, sondern will nach dem Anschalten des PC sein eigenes Wunschbild sehen.

Das ist auch bei den meisten aktuellen Distributionen möglich - nur das Wie unterscheidet sich beträchtlich. Red Hat 7.x macht es dem Anwender recht einfach: Das in /etc/lilo.conf in der Zeile ‘message=...’ angegebene File muss lediglich eine PCX-Grafik enthalten, dann wird sie statt einer Textmeldung dargestellt. Allerdings muss diese Grafik mehrere Bedingungen erfüllen: Die Größe ist auf 320 x 200 Pixel beschränkt, das Bild muss im 256-Farben-Modus vorliegen, und die Datei muss kleiner als 64 KByte sein.

Wer nun aber schnell eine solche PCX-Grafik erstellt und in Lilo einbindet, wird wahrscheinlich eine unschöne Überraschung erleben. Die Chancen stehen gut, dass Lilo etwa einen knallroten Rahmen um den neuen Splash Screen zeichnet, die Menüeinträge in neongrün malt oder Auswahlbalken und Schrift unlesbar in derselben Farbe darstellt.

Die Wurzel des Übels ist der 256-Farben-Modus. Jeder Bildpunkt besteht hier aus einem Byte mit einem Wert zwischen 0 und 255. Welche Farbe bei einem bestimmten Wert auf den Schirm kommt, legt eine Farbtabelle mit RGB-Einträgen fest. Der Lilo-Patch von Red Hat verwendet den Paletteneintrag 0 für den Rahmen, die Farbe 127 für normalen Text und die Farbe 255 für selektierten Text. Beim Erstellen eines PCX-Files muss der Anwender dafür Sorge tragen, dass an diesen Stellen der Farbtabelle vernünftige Farben stehen.

Doch damit nicht genug: Beim Zeichnen des Auswahlbalkens bestimmt der Lilo-Grafikpatch für jedes Pixel im Menübereich den aktuellen Palettenwert, nimmt diesen Wert XOR 0x80 und verwendet die Farbe, die in der Palette an dieser Stelle steht. Der Menübereich beginnt dabei in der Bildzeile 18, benötigt pro Menüeintrag zehn Bildzeilen und reicht in x-Richtung von Pixel 192 bis Pixel 302. Tauchen hier beispielsweise die Werte 30, 52 und 140 auf, so wird der Menübalken mit den Paletteneinträgen 158, 180 und 12 gemalt. Auch dort müssen also geeignete Farben stehen.

Das Bild selbst kann man beispielsweise mit Gimp erstellen. Wichtig vor dem Speichern als PCX-Datei ist lediglich, dass man die Grafik auf 320 x 200 Pixel skaliert und sie in den Palettenmodus überführt. Der Befehl ‘Bild - Modus - Indiziert...’ öffnet eine Dialogbox, in der Sie unter anderem die Anzahl der zu verwendenden Farben in der Palette festlegen können. Im Dialog ‘Indizierte Farbpalette’ können Sie anschließend einzelne Paletteneinträge verändern und neue hinzufügen.

Um Ihnen diese mühselige Arbeit abzunehmen, finden Sie auf [[#literatur 1]] das Programm ‘pcx2lilo’ (siehe Kasten ‘Palettenbastler’). Dieses Tool liest eine PCX-Datei im korrekten Format (320 x 200 Pixel, 256-Farben-Modus) ein, bestimmt die Farben im Menübereich und trägt an den richtigen Stellen passende Farben für Text und Auswahlbalken in die Palette ein. Die resultierende Datei können Sie anschließend in den Bootmanager einbinden (siehe Kasten ‘Lilo aufpoliert’).

Damit die Transformation klappt, müssen freilich noch freie Plätze in der Palette vorhanden sein - pcx2lilo benötigt einen für jede Farbe im Menübereich plus drei Einträge für Text, selektierten Text und den Rahmen. Übertreiben Sie es also beim ‘Indizieren’ nicht mit der Anzahl der benutzten Farben. Wie viele freie Paletteneinträge nötig sind, hängt davon ab, wie bunt der Menübereich ist: Kommen dort fast alle Farbtöne des Bildes vor, kann es bereits mit 130 indizierten Farben eng werden; ist der Menübereich einfarbig, sollten auch an die 250 Einträge in der Palette keine Probleme bereiten. Um ein gut lesbares Bootmenü zu erhalten, empfiehlt es sich, den gesamten Menübereich durchgängig in eher hellen oder eher dunklen Farben zu halten.

Wer die SuSE-Distribution einsetzt, hat gleichzeitig Glück und Pech. Glück, da der Lilo-Patch in SuSE 7.2 PCX-Dateien bis zu einer Auflösung von 640 x 480 Pixeln akzeptiert und so deutlich ansehnlichere Splash Screens zu Wege bringt. Zudem lässt sich die Position des Menüs frei wählen, und man kann zusätzlich Bildschirmbereiche für die Ausgabe der zu einem Menüpunkt gehörenden Boot-Optionen sowie Lilo-Fehlermeldungen definieren. Die Kehrseite der großen Freiheit ist eine umfangreiche, komplexe und fehleranfällige Konfigurationsdatei, die auf jeden befremdlich wirken dürfte, der mit Stack-orientierten Sprachen à la PostScript nicht per Du ist.

Genauere Informationen dazu findet man im README aus dem standardmäßig installierten gfxboot-Paket sowie in den Beispielen des Pakets gfxboot-devel. Einige einfache Änderungen an der Konfigurationsdatei, die allerdings einen einfarbigen Menübereich voraussetzen, sind in [[#literatur 2]] beschrieben. Wenn man über diese Vorschläge hi-nausgeht, sollte man sehr genau wissen, was man tut: Das SuSE-Tool ‘mkbootmsg’ aus dem gfxboot-devel-Paket erzeugt aus der PCX-Grafik und der Konfigurationsdatei Code, den Lilo beim Start direkt ausführt. Bei Fehlern in der Konfigurationsdatei kann es leicht passieren, dass der Linux-Loader beim Start abstürzt und sich das System nicht mehr booten lässt. Bei Experimenten ist man daher gut beraten, eine funktionierende Bootdiskette greifbar zu haben.

Auch bei SuSE nehmen freie Palettenplätze in der Grafik die Text- und Balkenfarben auf. Welche das sind, lässt sich weitgehend über die Konfigurationsdatei festlegen. Das Konfigurationsbeispiel im gfxboot-devel-Paket etwa verwendet die ersten freien Palettenplätze für die Variablen menu.text.normal und menu.text.select und weist ihnen die Farben schwarz (Rot-, Grün- und Blauwert jeweils 0, also 0x000000) und weiß (0xffffff) zu.

Auch für den Auswahlbalken definiert die Konfigurationsdatei einen Palettenplatz (menu.bar.color) samt Farbe. Jedoch wird nicht der gesamte Balken in dieser Farbe dargestellt: Der SuSE-Code bestimmt die Anzahl der Paletteneinträge zwischen diesem Platz und dem Wert der linken oberen Ecke des Menübereichs (definiert in menu.bar.bg.color). Diese Differenz legt für jede Farbe im Menübereich fest, mit welchem Paletteneintrag der Balken gemalt wird. Ein Beispiel: Ist der Palettenplatz von menu.text.color 200 und der der linken oberen Ecke 30, erhält der Balken über einem Menüpixel mit dem Wert 50 die Farbe des Paletteneintrags 220.

Für SuSE-Anwender steht auf [[#literatur 1]] das Programm pcx2suse bereit, das die nötigen Palettenmanipulationen übernimmt und die Text- und Balkenfarben korrekt in die Palette einträgt. Dabei behandelt das Tool die Pixel mit x-Koordinaten zwischen 384 und 604 ab Bildzeile 36 als Menübereich. Das resultierende File wandelt man mit ‘mkbootmsg’ in das korrekte Format für Lilo um. Eine passende Konfigurationsdatei (minimal.config) liegt pcx2suse bei. In der ersten Zeile dieses Files (‘%% image ...’) müssen Sie noch Namen und Auflösung Ihrer Bilddatei eintragen. Über die Einträge ‘/menu.start.x n def’ und ‘/menu.start.y n def’ am Ende der Datei lässt sich die Position des Menübereichs verändern - dann müssen Sie allerdings auch die Konstanten START_X, START_Y und END_Y in pcx2suse.c anpassen.

Leider funktioniert weder ‘pcx2suse’ noch die in [[#literatur 2]] beschriebene Vorgehensweise mit dem Lilo von SuSE 7.1. Hier kommt ein anderer Patch zum Einsatz, für den allerdings bereits ein fertiges Gimp-Plug-in samt Anleitung existiert [[#literatur 3]]. Unter dieser Adresse findet man auch den Patch für die Lilo-Version 21.7.3, der alle nicht allzu alten Distributionen mit einen grafischen Splash Screen nachrüstet. Die SuSE-Support-Datenbank hält eine Hilfestellung zum Umgang mit dem dort verwendeten ‘mklilomsg’ bereit [[#literatur 4]].

Auf [[#literatur 1]] finden Sie neben den Programmen für die Palettenmanipulationen auch einige vorbereitete Boot-Screens zum Download. Die Red-Hat-Variante enthält dabei das fertige PCX-Bild, das sich direkt in den Lilo einbinden lässt; die SuSE-Version besteht aus PCX-Bild und Konfigurationsdatei für SuSEs ‘mkbootmsg’. Ein Aufruf dieses Tools erzeugt die neue message-Datei für Lilo.

Schöner ist freilich ein selbst gestaltetes Bild. Wenn Ihnen ein besonders ansprechendes Werk gelingt: Mailen Sie das Bild an splashscreen@heise.de. Red-Hat-Boot-Screens schicken Sie bitte als mit ‘pcx2lilo’ behandelte PCX-Datei, SuSE-Screens als vorbereitete PCX-Datei mit passendem ‘mkbootmsg’-File. Wäh-rend der nächsten Wochen werden wir die gelungensten Splash Screens auf [[#literatur 1]] zum Download bereit stellen. Hier finden Sie auch ein Diskussionsforum, in dem Sie Tricks für bessere Boot-Screens austauschen können.

Auch Mandrake 8 kann übrigens mit einem grafischen Boot-Screen aufwarten. Hier dient eine BMP-Datei als Vorlage. Das Lilo-Paket installiert eine knappe Dokumentation sowie das Programm ‘bmp2mdk’ zum Umwandeln einer BMP-Grafik in eine Lilo-taugliche Message-Datei in /usr/share/doc/lilo. Wie der Mandrake-Lilo die Farbpalette handhabt, haben wir nicht mehr näher untersucht - hier tut sich dem interessierten Leser eine noch weitgehend unerforschte Spielwiese auf. (odi)

[1] www.heise.de/ct/projekte/splashscreen/

[2] http://sdb.suse.de/de/sdb/html/jkoeke_bootgrafik_72.html

[3] www.13thfloor.at/Software/lilo-splash/

[4] http://sdb.suse.de/de/sdb/html/jkoeke_bootgrafik.html

[#anfang Seitenanfang]


Die Vorgehensweise, um Lilo eine neue Bootgrafik unterzuschieben, ist immer gleich: Die (falls nötig, mit den Tools der Distribution vorbereitete) Grafik kopiert man in das Verzeichnis /boot. Anschließend muss der Name dieser Datei in die ‘message’-Zeile in /etc/lilo.conf eingetragen werden, also etwa:

 message=/boot/mein_bild.pcx 

Vor dem Reboot darf man nicht vergessen, den Lilo-Installer /sbin/lilo aufzurufen. Wer auf Nummer sicher gehen will, erzeugt zuvor eine Bootdiskette, indem er mit dd if=/boot/vmlinuz of=/boot/fd0 einfach den Kernel auf eine Floppy schreibt.

[#anfang Seitenanfang]


Auf [[#literatur 1]] finden Sie die Programme ‘pcx2lilo’ (Red Hat 7.x) und ‘pcx2suse’ (SuSE 7.2). Beide Programme kompilieren Sie einfach mit

 gcc -o Programmname Programmname.c 

pcx2lilo und pcx2suse nehmen zwei Kommandozeilenoptionen entgegen: Den Namen der zu bearbeitenden PCX-Datei (256-Farbpalettenmodus; 320 x 200 Pixel für Red Hat, 640 x 400 oder 640 x 480 für SuSE) und (mit ‘-n’ gekennzeichnet) die Anzahl der Lilo-Menüeinträge. Anhand dieses Wertes berechnen die Programme die Größe des Menübereichs und bestimmen die darin vorkommenden Farben. Je nach Helligkeit des Menübereichs kommen für Auswahlbalken und Schrift dunkle oder helle Farben zum Einsatz.

Die Programme tragen die benötigten Farben für Text und Auswahlbalken in die Farbpalette ein und schreiben das veränderte Bild auf die Standardausgabe, von wo sich die Daten mittels Output-Umleitung in eine Datei sichern lassen, also beispielsweise:

 pcx2lilo -n 4 newboot.pcx > newboot.lilo 

Kommentare