Inspiriert von K.Mandlas Post zu FbTerm, habe ich mich mal daran gewagt und mir diesen Framebuffer Terminal Emulator etwas genauer angeschaut.
Das ist FbTerm in Aktion und in der Tat, das ist nicht X!
FbTerm schafft es den Anschein zu erwecken, als ob man sich auf einem grafischen Desktop befände, indem es ein Programm wie fbi oder fbv dazu nutzen kann ein Hintergrundbild zu setzen.
Zumindest mit fbi hatte ich keinen Erfolg, aber vielleicht gibt es da draußen jemanden, der mehr Glück als ich damit hat.
Für mich funktionierte schließlich fbv, welches auch von den Entwicklern des Framebuffer Terminals vorgeschlagen wird. Riskiert man einen Blick auf man fbterm
findet sich dort schon ein vorgefertigtes Miniskript, mit welchem es möglich ist ein Bild gegen den Framebuffer darzustellen und das dann von fbterm quasi abgegriffen und als Hintergrundbild verwendet wird.
#!/bin/bash # fbterm-bi: a wrapper script to enable background image with fbterm # usage: fbterm-bi /path/to/image fbterm-options echo -ne "e[?25l" # hide cursor fbv -ciuker "$1" << EOF q EOF shift export FBTERM_BACKGROUND_IMAGE=1 exec fbterm "$@"
Eine kleine Hürde war das Installieren von fbv. Dieses kleine Programm kann zwar genauso wie fbi Bilder gegen den Framebuffer darstellen, wird aber seit sieben Jahren nicht mehr weiterentwickelt, weshalb es in Debian nicht mehr zur Verfügung steht.
Nicht immer muss aber hohes Alter gleichzeitig schlechte Software bedeuten. Ich lud den Quellcode von der Projektseite herunter und kompilierte fbv kurzerhand selbst.
./configure make
Zum erfolgreichen Übersetzen sollte man sich vorher die Entwicklerpakete für libjpeg, libungif und libpng herunterladen. Danach verschob ich die fbv Binärdatei manuell nach /usr/local/bin.
Um FbTerm schließlich mit einem beliebigen Hintergrundbild zu starten, kopiert man das Skript z.B. in eine Datei namens fbterm-bi, macht sie mit chmod u+x
ausführbar und führt das Ganze aus.
./fbterm-bi mein-hintergrund-bild.jpg
Innerhalb von fbterm wird man darauf hingewiesen, dass fbterm die Tastaturbelegung nicht ändern konnte, um die eigenen Tastaturkürzel ausführen zu können. Laut Handbuch kann man entweder fbterm mit setuid(0) Rechten ausstatten, mit dem der Prozess kurzzeitig Rechte erhält, die eigentlich nur root zustehen, um die Tastaturbelegung ändern zu können.
Die zweite Möglichkeit ist das Programm setcap aus dem Paket libcap2-bin zu benutzen, um nur einen klar definierten Teil der Root-Rechte auf FbTerm kurzzeitig übergehen zu lassen.
Mir erschien letzteres die bessere Methode zu sein, weswegen ich das vorgeschlagene Kommando ausführte.
setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm
Nun hat man auch als normaler Benutzer eines Systems Zugriff auf FbTerms Tastenkürzel. So ähnlich wie bei screen lassen sich weitere Fenster innerhalb von FbTerm mit STRG+ALT+c öffnen und mit STRG+ALT+d schließen. Mit STRG+ALT+Zahl lässt sich dann wieder zwischen Fenstern hin- und herwechseln. Besonders nützlich ist auch die eingebaute "History" Funktion SHIFT+Bildhoch bzw. SHIFT+Bildrunter, womit man die komplette Anzeige hoch - und runterscrollen kann.
Interessant wird es aber erst richtig mit einem Programm wie screen, womit sich der Bildschirm innerhalb von FbTerm teilen lässt oder man seine gesamten Anwendung einfach wieder abtrennen, in den Hintergrund bringen und auch wieder nach Bedarf hervorholen kann.
Ebenfalls bemerkenswert sind die Verwendung von fontconfig und der damit einhergehende Zugriff auf die gleichen Schriften, die auch in GTK oder QT Anwendungen eingesetzt werden. Die Schriftfarbe und -familie lässt sich leicht in der Konfigurationsdatei ~/.fbtermrc ändern.
So lässt sich mit ein paar Handgriffen selbst vollkommen überholte Hardware, die ausschließlich mit Konsolenanwendungen betrieben wird, schnell bunter und ansprechender machen. Da behaupte noch einer die Konsole sei langweilig. 🙂
Hi,
ein hervoragender Beitrag. Vielen Dank!
Welche Font benutzt Du denn? Bei mir sieht die Schrift irgendwie immer schlecht aus. Habe vor allem mit Mono und Terminus experimentiert. Kein Vergleich zu Deinen Schrift im Screen Beispiel (wenngleich dort ja eine Konsole in X abgelichtet wurde)
Viele Grüße
Martin
Hi Martin
Als Font benutze ich auch in FbTerm Terminus mit Schriftgröße 12. Der Eintrag in der .fbtermrc muss also lauten:
font-names=Terminus
font-size=12
Was meinst du mit in X abgelichtet? Das ist wirklich der Framebuffer. 😀
Ihr braucht kein fbv… Ihr müsst nur ein bild mit einem programm eurer Wahl im Framebuffer anzeigen und auf eine andere tty wechseln.
Mit
sleep 10; cat /dev/fb0 > bild
Sorgt ihr dafür dass nach 10 Sekunden ein Screenshot vom framebuffer (/dev/fb0) gemacht wird und in der Datei ‚bild‘ gespeichert wird.
Da wir diesen Befehl nicht in der tty ausführen, in der das bild angezeigt wird müssen wir innerhalb der 10 Sekunden in entsprechende tty wechseln. Nachdem die 10 Sekunden abgelaufen sind ist der Screenshot gespeichert. Nun können wir ihn jederzeit zum starten verwenden.
Mit
cat bild > /dev/fb0
könnt ihr das Bild wieder in den framebuffer zurückschreiben.
So könnt ihr nun fbterm starten:
export FBTERM_BACKGROUND_IMAGE=1; cat bild > /dev/fb0 ; exec fbterm „$@“
So braucht ihr lediglich ein beliebiges Programm um im Framebuffer etwas darzustellen und könnt somit auch fbi verwenden oder jeden beliebigen anderen framebufferinhalt.