Die Shell austauschen: Der Wechsel von bash zu zsh

Als letzten Schritt zu meinem Konsolensetup mit Debian Squeeze auf dem Thinkpad 600, habe ich mich entschieden die Bash gegen zsh auszutauschen. In der Regel habe ich keine Probleme mit Bash und alles was ich brauche finde ich auch dort.
Mit dieser Einstellung kommt man natürlich nicht weiter, weswegen ich mir schon im Februar beim Ausprobieren von Grml vorgenommen habe die Zsh-Shell näher anzuschauen. Nicht von ungefähr sind deswegen Grmls .zshrc und .zshrc.local mein Ausgangspunkt um mehr über Zsh zu lernen.

wget -O .zshrc http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
wget -O .zshrc.local http://git.grml.org/f/grml-etc-core/etc/skel/.zshrc

Grml selbst hat Zsh zu einem Hauptbestandteil der eigenen Linuxdistribution erklärt und ein kleines Unterprojekt namens zsh-lovers geschaffen, damit Tipps und Tricks besser vermittelt werden können.
Da ich selbst noch am Anfang stehe, hier nur die auffallendsten Veränderungen bei Zsh, die einem sofort ins Auge springen.
Tab Completion. Die Autovervollständigung von Zsh ist um Längen besser als das bei Bash der Fall ist. Die Bash Completion ist wirklich gut, aber wenn man Zsh gesehen hat, möchte man am liebsten nichts anderes mehr haben. Zsh hat Menüs, in denen man mit den Pfeiltasten navigieren kann. Die Optionen von aptitude werden mit Erklärung übersichtlich angezeigt. Zsh zeigt zum Beispiel mit kill[Tab] die Prozesse an, die der jeweilige Nutzer beenden darf und ermöglicht es bequem mit den Pfeiltasten zwischen ihnen zu navigieren.
Autokorrektur. Tippfehler werden automatisch von zsh korrigiert. Aus atiptude wird aptitude.
Trotz dieser Verbesserungen fühlt sich Zsh nicht wie etwas vollkommen Neues zu Bash an. STRG+R oder STRG+L funktionieren genauso. Zsh lässt sich im Moment genauso wie die Bash benutzen, ohne dass ich hier eine große Veränderung spüre.

Zsh installallieren

    1. aptitude install zsh
    2. Die Login-Shell für jeden Benutzer mit dem Kommando chsh ändern und auf /bin/zsh verweisen.

Allgemein: chsh -s /bin/zsh USER

Nach dem Aus- und wieder Einloggen in tty hat man danach bei Debian und Ubuntu Zsh als neue Shell eingestellt. Mal schauen wie sie sich in der Zukunft schlagen wird. Im Moment macht Zsh auf jeden Fall Spaß und die Umstellung war nicht wirklich schwierig. Außerdem lassen sich nun problemlos Dateien mit Vim und Vils umändern. 🙂

Vim: Effizientes Editieren von Text als Gewohnheit

Es ist Zeit mal ein paar Worte über Vim zu verlieren. Wie ich an mancher Stelle schon mehr oder weniger angedeutet habe, ist Vim mittlerweile mein bevorzugter Editor geworden, wenn es um das Schreiben und Verändern neuer Texte geht. Das war nicht immer so. Genauer gesagt konnte ich anfangs wenig mit ihm anfangen, wobei sich hier die Erinnerungen mit Vi vermischen, der mir als Linuxeinsteiger immer empfohlen wurde, wenn es um das Ändern von Systemeinstellungen ging. Irgendwann gewöhnte ich mich schließlich an die Besonderheiten von Vim und gab schließlich nur noch intuitiv vim Dateiname ein, wenn ich ein Dokument bearbeiten wollte.
Ich denke die unterschiedliche Wahrnehmung von Vim in der Öffentlichkeit ergibt sich aus den verschiedenen Blickwinkeln der einerseits euphorischen Vimpropheten und den sogenannten Durchschnittsbenutzern, die lediglich ein paar Worte in einem Textdokument ändern möchten. Tatsächlich finden sich die größten Befürworter im Lager der fortgeschrittenen Technikfreaks, oft Programmierer und Poweruser, die einen großen Teil ihrer Zeit schon hinter dem Rechner verbracht haben und selbst schon nicht mehr merken, wenn sie Fachbegriffe so verwenden als seien sie mittlerweile in die Allgemeinsprache übergegangen.
Beide Standpunkte lassen sich zusammenführen. Das Problem bei Software wie Vim ist, die übrigens dieses Jahr schon ihren 20. Geburtstag gefeiert hat!, dass man oft nicht weiß, wie man sich ihr am besten nähern soll. Auf linuxundich.de wurde das Thema vor kurzem auch angesprochen, weswegen ich vor allem die Links in den Kommentaren und das sehr nützliche interaktive Webtutorial hier noch einmal vorstellen möchte.

Anfänger

Ich selbst würde mich als fortgeschrittenen Anfänger bezeichnen, weil ich bis letztes Jahr nicht mehr über Vim wusste als die Informationen, die in den folgenden Anfängertutorials vermittelt werden. In der Regel reichen diese Tipps und Tricks auch vollkommen aus, um Vim schon effektiv bedienen zu können, ohne auch nur eine Ahnung von den bücherfüllenden Features für Fortgeschrittene und Experten haben zu müssen.
Der erste Anlaufpunkt sollte der in Vim eingebaute Vimtutor sein, den man einfach durch Eingabe von vimtutor in der Kommandozeilte starten kann. In ungefährt 30 Minuten lässt sich diese deutschsprachige Schritt-für-Schritt Anleitung durcharbeiten, wonach man die Grundkonzepte von Vim kennengelernt hat. Als Alternative oder Ergänzung bietet sich das schon erwähnte interaktive Webtutorial an.

Fortgeschrittene

Vims überragende Eigenschaften erschließen sich oft nur für Programmierer und Poweruser, die täglich mit mehreren Dutzend Dateien und tausenden Zeilen Code arbeiten müssen. Um diese Verzückung verstehen zu können, sollte man sich zuerst einmal ein paar Videos zu Vim anschauen. Verheimlichen will ich dabei auch nicht, dass der größte Teil der Dokumentation nur in Englisch verfügbar ist, diese aber exzellent und umfassend ist. Einfach mal im Kommandomodus :help eingeben.

  • Derek Wyatt hat eine Serie von Screencasts erstellt, die einfache Konzepte und fortgeschrittene Techniken von Vim auf seine humorvolle Art vermitteln.
  • Auf vimcasts.org werden ebenfalls in mehreren ausgezeichneten Screencasts die Fähigkeiten von Vim demonstriert.
  • Immer einen Blick Wert ist das Vim Wiki und die darin befindlichen Referenzen zu anderen Vim Tutorials.
  • Da ich zu den Leuten gehöre, die immer noch gerne klassische Bücher lesen, kann ich auch vim 7 Ge-Packt von Reinhard Wobst empfehlen.
  • Was könnte besser sein als dem Vim-Meister Bram Moolenaar persönlich bei seiner Präsentation zu Vim "7 Habits for effective Text Editing 2.0" zu folgen?

Egal was andere über Vim erzählen, wenn dir dein bestehender Editor gefällt und er für dich funktioniert, solltest du dabei bleiben. Ansonsten empfehle ich Vim. 😉

wyrd und remind: Kalender und Terminplaner für die Konsole

Wyrd ist ein Frontend für remind, welches wiederum ein fortschrittliches Kalender- und Alarmprogramm für UNIX-artige Systeme ist. Warum du es benutzen solltest? Zitat des Wyrd Entwicklers: "Weil du keine Lust hast auf dein aufgeblasenes Kalenderprogramm zu warten"
Natürlich kann ich ihm hier nur zustimmen. Sicher, in der heutigen Zeit sind alle Computer so weit entwickelt, dass es schier unmöglich erscheint, dass irgendwelche Art von Software einen modernen Rechenknecht in die Knie zwingen könnte. Mit Sicherheit wird dieser Computerkauf der letzte gewesen sein. Schwer vorstellbar, dass dieser Rechner einmal zu langsam für die Büroarbeit, meine E-Mails und Terminplanung sein sollte. Dachte man vor 30 Jahren.
Nein, das Problem beim Finden des richtigen Terminplaners ist nicht die Hardware, sondern du. Oder besser gesagt die Person, für die du einen Kalender führst. Es müssen nicht zwangsläufig die eigenen Termine sein, an die man sich und andere erinnern soll und nicht immer hat man die Wahl, welche Anwendungen man zum Erinnern benutzen darf. Die Methoden reichen dabei von der Wiedervorlagemappe, über Outlook, Lotus Notes, den Terminplaner im Blackberry, das andere Smartphone, das neue Tablet, bis hin zu Evolution in Gnome, Thunderbird Lightning und schließlich wyrd plus remind.
Terminplaner sind nicht gerade die spannendsten Anwendungen. Je nach dem wie beschäftigt du bist sind sie entweder essentiell wichtig, um nicht den Überblick zu verlieren oder bestenfalls ein nettes Gimmick auf deinem Desktop.
Ich habe mir nie groß den Kopf darüber zerbrochen, warum es gerade diese oder jene Anwendung war. Sie erfüllte zum jeweiligen Zeitpunkt einfach ihren Zweck. Gerade für Privates brauche ich hier keine ausschweifenden Funktionen. In der Regel genügt mir nun das Lightning Addon von Thunderbird/Icedove und im Moment bin ich dabei Gefallen an wyrd zu finden.
Wie schon gesagt ist das Prinzip eines Terminplaners recht simpel. Schon vor Jahren hat sich jemand die Mühe gemacht remind zu schreiben. Mit dessen Syntax lässt sich jede Art von Termin beschreiben. Ein Beispiel:

REM Jul 10 +14 Annas Geburtstag %b
REM Jul 5 2011 *14 +2 AT 14:00 + 10 DURATION 2:00 AFTER MSG zweiwöchentliches Vereinstreffen

Die erste Zeile zeigt die wiederkehrende Aufgabe sich einen Geburtstag merken zu wollen. Mit REM wird die Erinnerung definiert. Zuerst folgt das Datum des Geburtstags. +14 bedeutet, dass man vierzehn Tage vor dem Termin eine Erinnerung erhalten möchte und das dann die Nachricht "Annas Geburtstag in 14 Tagen" angezeigt werden soll. %b ist der Platzhalter für die Anzahl der Tage bis zu diesem Termin, die kontinuierlich heruntergezählt werden.
Im zweiten Beispiel wird wieder eine Erinnerung mit REM definiert. Beginnend vom 5. Juli 2011 wird alle vierzehn Tage (*14) ein Vereinstreffen einberufen. Man möchte zwei Tage vor dem jeweiligen Termin eine Erinnerung erhalten (+2). Das Treffen findet immer um 14.00 Uhr statt. Zehn Minuten davor möchte man erneut daran erinnert werden (+10). Das Treffen dauert zwei Stunden (2:00). Fällt der Termin auf einen Feiertag wird er auf den nächstmöglichen Tag gelegt. (AFTER)
Nach diesem Prinzip funktioniert remind. Die Syntax ist noch wesentlich umfangreicher und so mächtig, dass sich damit noch komplexere Erinnerung definieren lassen. Sehr gut dokumentiert ist das Ganze im Handbuch man remind. Der Nachteil von remind ist aber auch schnell offensichtlich. Man muss jede Erinnerung in eine Textdatei tippen und sich dabei noch Gedanken um die Syntax machen. Damit es leichter geht, hat man die Wahl entweder tkremind als GUI zu benutzen oder das angesprochene wyrd als Konsolenapplikation zu nehmen, welches sich wie auf dem folgenden Screenshot präsentiert.

Wyrd ist wirklich sehr klar strukturiert. Die wichtigsten Kommandos werden am oberen Bildschirmrand dargestellt. Im Hauptbereich trägt man den Termin ein, rechts davon befindet sich ein Monatskalender, dessen einzelne Tage je nach Termindichte unterschiedlich farblich hinterlegt sind. Darunter gibt es ein weiteres Feld, indem alle nicht zeitlich begrenzten Aufgaben des aktuellen Tages im Überblick dargestellt werden. Mit ? erhält man eine komplette Übersicht der Tastenbelegung.
Ideal für den Einstieg ist die Flash Demo zu wyrd, mit der innerhalb von nur acht Minuten das Prinzip von remind und wyrd erklärt wird und die ich für jeden Beginner sehr empfehlen kann. Zwar wird auch Deutsch als Sprache unterstützt, doch scheinbar muss man dieses Feature beim Kompilieren explizit angeben. Voreingestellt ist auf jeden Fall Englisch.
Wyrd erzeugt auf Tastendruck automatisch ein Remind-Template, welches wiederum eine Erinnerung definiert. Lediglich die Botschaft, an die man gerne erinnert werden möchte, muss man mit Hilfe eines Editors noch eingeben. Welcher Editor das ist, wird wyrd durch die Umgebungsvariable EDITOR mitgeteilt. Am besten man legt diesen Wert in der ~/.bashrc oder seiner bevorzugten Shell fest, z.B. export EDITOR=vim.
Es lassen sich bei entsprechender Kenntnis der Remind-Syntax weitere Templates definieren, die dann innerhalb von wyrd an eine Taste gebunden werden können. Die Tastenbelegung und weitere Optionen lassen sich in ~/.wyrdrc ändern. Wer sich noch unsicher ist, ob es eine Möglichkeit gibt den bestehenden Google Kalender umzuwandeln, sollte auch mal einen Blick in die FAQ von remind werfen.
Es gibt mehr als genug Auswahl an Terminplanern, aber ich denke für die Konsole habe ich den passenden mit wyrd und remind nun gefunden. Wer schon immer mit dem Gedanken gespielt hat, seinen Freunden automatisierte E-Mails mit Glückwünschen zum Geburtstag oder Hochzeitstag zu schicken, brauch in Zukunft nur noch remind und einen Cron Job aufzusetzen. Das klingt abwegig? Nun, sagen wir mal so, ich kenne jemanden, der das lästige Geburtstagsproblem auf eine ähnliche Art gelöst hat. 😀

hnb: Dein Notizbuch für die Konsole

Wohin mit den Gedanken zu Linux, wenn sie wieder einmal haltlos umhergeistern, während man gerade versucht sich auf etwas ganz anderes zu konzentrieren? Manchmal bin ich so nostalgisch angehaucht, dass ich ein Blatt Papier und einen Stift in die Hand nehme, sie schnell niederschreibe und mich dann nach zwei Tagen frage, was ich mir damit eigentlich sagen wollte. Ich weiß: bizarr.
In der Regel benutze ich natürlich irgendein elektronisches Medium als Speicherort und Stütze für alle wichtigen und unwichtigen Gedankengänge. Gute Dienste leisten mir der schlichte aber effektive Leafpad Editor oder Osmo, mit dem sich auch Termine und Mondphasen im Kalender überwachen und Kontakte merken lassen.
Denkt man etwas länger über das Thema Notizen nach wird einem schnell bewusst, dass es sich hierbei wieder mal nur um schnöden Text handelt. Braucht man dazu einen Dodeca Core, mit 12 GB RAM und 12 TB SSD Festplatte? Vermutlich nein. Es genügt der übliche ältere Rechner und ein schlankes Konsolenprogramm namens hnb.


Hnb gehört zu einer Reihe von Terminplanern und Notizanwendungen, die K.Mandla schon vor geraumer Zeit vorgestellt und empfohlen hat, die ich mir aber bis vor kurzem nicht näher angeschaut habe. Die drei Buchstaben von hnb stehen für hierarchical notebook, ein Notizbuch, welches auf Ncurses zum Zeichnen der Bedienungsoberfläche zurückgreift und sich praktisch auf jeder noch so alten Mühle ohne Einbußen benutzen lässt.
Wie der Screenshot zeigt und das "hierarchisch" schon andeutet, sind die einzelnen Einträge in hnb in einer Baumansicht gegliedert. Mit den Pfeiltasten navigiert man sowohl nach oben und nach unten und kann mit links/rechts tiefer in die Notizhierarchie hinab- oder auch wieder hinaufsteigen. Ist die Menge an Text zu umfangreich, scrollt man noch schneller mit der Bild-hoch-und-runter Taste.
Ein dickes Plus bei hnb ist, dass dieses kleine Programm sehr einfach nur durch Ausprobieren zu erlernen ist und nach dem ersten Programmstart eine leicht verständliche, kurze und knappe Anleitung bereitstellt, die alles Wesentliche erklärt.
In noch größerer Kürze funktioniert hnb so:

  • Einfach drauf lostippen oder Einfügen drücken und ein neuer Eintrag wird angelegt.
  • Kopieren, Ausschneiden und Einfügen funktioniert genauso wie man das von einer klassischen Desktopumgebung gewohnt ist. STRG+c, STRG+x, STRG+v
  • Man kann mit STRG+f innerhalb von hnb nach Begriffen suchen.
  • Einen Eintrag entfernt man mit (Überraschung) der Entfernen Taste oder STRG+x.
  • Möchte man eine Aktion rückgängig machen geht das mit STRG+z.
  • Mit <> werden Einträge ein- oder ausgerückt.
  • Mit + oder - lassen sich auch Strichpunkte unterhalb der aktuellen Position aus- und wieder einklappen.
  • Mit STRG+s werden Notizen alphabetisch sortiert.
  • Mit STRG+t wird zwischen Listenpunkten und einem Kontrollkästchen (Checkbox) umgeschaltet, welches sich mit STRG+d aus- oder abwählen lässt. Praktisch für jede Todo-Liste.
  • Ebenfalls äußerst nützlich ist die Möglichkeit URLs oder E-Mail-Adressen mit Hilfe von STRG+a direkt im voreingestellten Programm aufrufen bzw. ausführen zu können.
  • Benutzt man Screen sollte man die Tastenkombination STRG+a in der Konfigurationsdatei ~/.hnbrc genauso wie den bevorzugten Browser oder E-Mail-Client umstellen. Ich benutze hier Alpine und Elinks mit hnb, dass sich hervorragend mit den anderen Konsolenfavoriten ergänzt.
  • Hnb hat auch ein Menü, welches man mit ESC erreicht.

Außerdem gibt es noch Vorlagen für Kalender, die sich in hnb einfügen lassen. Ich werde hier voraussichtlich wyrd in Zukunft benutzen, was ich demnächst kurz vorstellen werde. Des Weiteren lassen sich alle Informationen in verschiedene Formate wie XML, HTML, ASCII oder Postscript exportieren. Bleibt zum Schluss nur noch zu sagen, dass hnb ein sehr intuitives und praktisches Programm ist, dessen einziger Mangel nur die fehlende UTF-8 Unterstützung ist.
In Zukunft werde ich es bestimmt öfter benutzen und vielleicht komme ich irgendwann auch einmal auf vimwiki zurück, wenn ich mehr Vernetzung zwischen Einträgen brauche. Doch ab sofort im Hier und Jetzt ersetzt hnb nun erst einmal Osmo zum Speichern und Organisieren wirrer Gedanken. 🙂

Konkurrenz zu Screen: Tmux

Ich habe in letzter Zeit wieder einige Konsolenprogramme ausprobiert, worunter auch Tmux zu finden war. Wenn man viel mit dem Terminal arbeitet oder auf der Konsole unterwegs ist, begegnet einem zwangsläufig GNU Screen und man fragt sich wie man es früher ohne dieses nützliche Programm geschafft hat.
Tmux ist wie Screen ein sogenannter Terminalmultiplexer, der mehrere Fenster mit darin laufenden Programmen innerhalb eines Bildschirms darstellen kann. Für mich ist er somit das Gegenstück zu einem kachelnden Fenstermanager unter X und besonders nützlich für sehr alte Rechner. In der Regel brauche ich Screen hauptsächlich um die Übersichtlichkeit zu verbessern und den Terminal einfach bedienungsfreundlicher zu gestalten. Nicht zu vergessen lassen sich die Sitzungen sowohl von Screen als auch Tmux abtrennen und jederzeit mit den darin laufenden Programmen wieder hervorholen.
Im Moment bin ich mit Screen zufrieden, doch ein paar gute Gründe zum Wechsel gibt es. Da wäre zum einen Screens Eigenart leicht angefressen auf längere Namen von Terminalemulatoren zu reagieren. Außerdem konnte ich rxvt-unicode-256color nur mit etwas Nachhilfe dazu bewegen von Screen erkannt zu werden. Schon damals hatte Neo in den Kommentaren auf Tmux hingewiesen und in der Tat scheint Tmux weniger Probleme mit 256-Farben-Terminals zu haben.
Ansonsten kann man oft lesen, dass Tmux das modernere Screen sei und aktiv weiterentwickelt wird. Ich kann nichts Gegenteiliges behaupten. Screen hingegen ist ein wahres Software-Urgestein, was aber nicht bedeutet, dass es schlecht oder unbrauchbar ist. Vielmehr scheint es so zu sein, dass Screen eine gewisse Reife erlangt hat und im Regelfall einfach funktioniert und dazu noch von allen großen Distributionen unterstützt wird. Abgesehen davon ist Screen Bestandteil des GNU Betriebssystems, weswegen ich mir um die Zukunft erst einmal keine Sorgen mache.
Ein klarer Pluspunkt für Tmux ist aus meiner Sicht die Fähigkeit, auch die vertikale und horizontale Aufteilung des Bildschirms nach der Wiederherstellung einer Session beizubehalten, die Screen leider verwirft. Ebenfalls bemerkenswert ist die gute Dokumentation zu Tmux und die vielen Beispiele, die im Netz kursieren. Eine Suche zu "tmux conf" hilft schon weiter.

GNU Screen
Tmux

Wie sie sehen, sehen sie nicht viel. Große Unterschiede in meiner Standardkonfiguration gibt es zwischen Screen und Tmux nicht. In letzter Zeit kommt noch fbterm für die Konsole hinzu, der die Optik mit einem Hintergrundbild deutlich aufpoliert. In der Regel tut es aber eine Statusleiste am unteren Rand für mich.
Tmux bietet eine simple Möglichkeit die Tastenbelegungen mit dem bind Befehl zu ändern, weswegen ich z.B. von STRG+B auf das Screen-typische STRG+A zurückgewechselt bin, um Kommandos an Tmux durchzuleiten.
Meine .tmux.conf sieht so aus:

# STRG+A anstelle von STRG+B
unbind C-b
unbind l
set -g prefix C-a
bind-key C-a last-window
# Reload Taste
bind r source-file ~/.tmux.conf
# wichtig für rxvt-unicode-256color
set -g default-terminal "screen-256color"
set -g history-limit 1000
# Automatisch gestartete Session
new -d 'exec irssi'
neww -n alpine 'exec alpine -d 0'
neww -n mc mc
neww -n htop htop
neww -n slurm 'exec slurm -i eth0'
neww -n hnb hnb
neww -n elinks elinks
neww -n wyrd wyrd
neww -n newsbeuter newsbeuter
# THEMA
set -g status-bg black
set -g status-fg white
set -g status-right '#[fg=white]#(cut -d " " -f 1-3 /proc/loadavg)#[default] #[fg=white]%H:%M#[default]'

Im Gegensatz zu Screen muss Tmux mit tmux attach gestartet werden, sofern man Anwendungen in einer neuen Session beim ersten Aufruf mit ausführen möchte. Es gibt noch viel mehr zu erzählen und vor allem auf der technischen Seite gibt es einige Unterschiede zu Screen.
Was man mitnehmen sollte ist, es gibt eine gute Alternative zu Screen und die heißt Tmux.

Eine algorithmische Konsolensymphonie

Auf was man nicht alles stößt, wenn man ab und zu den Gesprächen in #debian auf irc.debian.org folgt. Hier ist das Wochenende-Rezept für pure Nostalgie gewürzt mit etwas geekig und retro.
Man nehme einen IBM Thinkpad 600 oder ein vergleichbares Modell, installiere Debian Squeeze, seine Konsolenfavoriten, starte FbTerm und darin dann einen Terminalmultiplexer wie Screen oder Tmux. Nun nur noch mit Irssi zu #debian verbinden und den passenden Moment abwarten, wenn ausnahmsweise einmal ein Youtube-Video gepostet wird.
Mit Hilfe von gpm gibt es Mausunterstützung, womit man leicht den Link kopieren und im gleichzeitig geöffneten elinks Textbrowser einfügen kann. Sobald die Seite aufgerufen ist, kommt der youtube-dl+mplayer Trick erneut zum Einsatz.
Jetzt noch gut streamen lassen und Mplayer beginnt automatisch mit dem Abspielen des geposteten Videos, natürlich gegen den Framebuffer!

Jetzt noch dicke Brillengläser kaufen, sich Zähne mit Überbiss wachsen lassen und die Musik des Videos laut aufdrehen. Fertig! 😉 Der perfekte Tipp übrigens um in jedem Haus, jeder Wohnung oder WG bald alleine zu sein. 😛

Ein winziges C-Programm

In nachfolgenden Video geht es um ein winziges in C geschriebenes Programm, womit sich hörbare Klänge und so etwas wie 8bit-Musik erahnen lässt. Das Beeindruckende ist wirklich der Umfang des Codes, der in einer Zeile variierende Klangmuster produziert. Wer es selbst mal ausprobieren möchte und experimentieren will, kann z.B. einfach folgenden Code ausführen. Die faszinierende Idee dazu stammt vom finnischen Blogger viznut aus seinem englischen Blog countercomplex. Kudos!

echo "main(t){for(t=0;;t++)putchar(t*(t>>((t>>9|t>>8))&63&t>>4));}"| gcc -xc -lm -&&./a.out|aplay

FbTerm: Konsole muss nicht langweilig sein

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. 🙂

Ein Versuch: Debian-Pakete mit pbuilder backporten

Wie schwierig konnte es schon sein ein Debian-Paket von Sid nach Squeeze zu "backporten". Ich kramte mal wieder Debians Netzinstallation hervor und installierte mir ein 64 bit Debian. Anschließend machte ich ein Upgrade auf Sid und wollte nun i386-Pakete für Squeeze bauen.
Ich habe mich für die "Pbuilder"-Methode entschieden. Mit Pbuilder lässt sich eine komplette Entwicklungsumgebung in eine spezielle Chroot-Umgebung einschließen und jeder Paketbau läuft unter kontrollierten Bedingungen ab.

pbuilder create --distribution squeeze --debootstrapopts --arch --debootstrapopts i386


Mit dem oben stehenden Kommando wird Pbuilder angewiesen eine Umgebung auf Basis von Squeeze und der i386-Architektur zu erstellen. Die weiteren Optionen, die in der offiziellen Doku zu Pbuilder stehen, brauchte ich nicht.
Anschließend kann man sich mit dem normalen Benutzer die Quellpakete, die man übersetzen möchte, herunterladen.

apt-get source nano cmus


Mit root Rechten wechselt man daraufhin zu den heruntergeladenen Quellpaketen und weist Pbuilder an das Paket in der Chroot-Umgebung zu bauen.

pbuilder build Paketname.dsc


Das Ergebnis viel unterschiedlich aus. Relativ kleine Pakete mit wenig Abhängigkeiten wie Nano oder slurm ließen sich problemlos übersetzen. Hier hatte ich am Ende tatsächlich ein fertiges Paket, welches ich auf jedem Debian Squeeze installieren konnte.
Problematisch wird es nur bei Software, die viele Abhängigkeiten mit anderen Paketen hat. In Squeeze entsprechen natürlich viele Pakete nicht mehr dem aktuellen Stand. Hier muss man also zuerst alle Abhängigkeiten übersetzen, bevor man anfängt das eigentliche Paket zu kompilieren.
Mit Hilfe eines "Local Repository" wird beim Bauen der Pakete dann nicht mehr nur auf die offiziellen Debianpakete verwiesen, sondern man kann lokal Abhängigkeiten bauen, auf die pbuilder Rücksicht nehmen wird. Mit diesem kleinen "Trick" lassen sich auch komplexere Pakete backporten.
Ich stehe hier zwar selbst noch am Anfang, weiß aber nun, wo ich suchen muss, wenn ich tatsächlich mal unbedingt ein brandaktuelles Softwarepaket nach Debian Stable bringen möchte. Immerhin ist mir nun klarer geworden, wo die Schwierigkeiten bei Backports liegen und was Raphael Hertzog mit dem Satz meinte: "Gnome 3 in Squeeze? - No sorry".

Festplattenlärm bekämpfen: hdparm

Der neue Thinkpad 600 ist eigentlich flüsterleise. Eher höre ich da schon die Zeiger der im Westflügel befindlichen Küchenuhr. Das gilt aber nur solange ich Slitaz benutze. Sobald ich wieder in die Kommandozentrale mit Debian Stable boote, läuft die Festplatte permanent auf Hochtouren.
Abhilfe schafft hier hdparm. Ein kleines, aber feines Werkzeug, um diverse Einstellungen der eigenen Festplatte zu tunen. Leise wird es wieder mit:

hdparm -S 60 /dev/sda

Mit diesem Befehl legt sich die Festplatte nach genau 5 Minuten oder 60x5 Sekunden wieder schlafen. Der Zahlenwert ist etwas wirr. Von 1-240 sind das immer Mehrfache von 5 Sekunden. Für die anderen möglichen Werte von 241-255 sollte man besser man hdparm zu Rate ziehen.
Damit man nicht nach jedem Neustart erneut diesen Befehl ausführen muss, genügt es ihn in die Datei /etc/rc.local zu schreiben.
Endlich wieder Ruhe.. 🙂

Loginmanager für die virtuelle Konsole

Die meiste Zeit meines Linuxlebens hat mich das Thema Loginmanager wenig beschäftigt. Sie verschwinden so schnell in den Hintergrund wie sie erschienen sind und ich brauche sie tatsächlich nur zum Login in meinen Desktop. Auffallend ist, dass jede Desktopumgebung ihren eigenen Loginmanager mitbringt, der in aller Regel eine Weiterentwicklung von xdm ist. KDM für KDE, GDM3 für Gnome, Slim als unabhängige Alternative und nun auch noch LightDM, welcher der neue Standard für Loginmanager werden und ebenfalls unabhängig von einer speziellen Desktopumgebung sein soll.
Wer sich nicht mit den Unterschieden auseinandersetzen möchte und tatsächlich nur einen Weg sucht sich in seinen Desktop einzuloggen, kann auch ganz auf einen grafischen Loginmanager verzichten. Die ressourcenschonendste Alternative ist sicherlich startx bei einem Login in eine virtuelle Konsole automatisch auszuführen.
In der Regel gibt es auf jedem Linuxsystem schon einen Loginmanager für die virtuelle Konsole. Bei Debian ist das getty. Aus Interesse habe ich das schlankere, aber mit weniger Funktionen ausgestattete, mingetty installiert und ausprobiert. Ich konnte allein vom Speicherverbrauch her keine großen Unterschiede entdecken. Um mingetty anstelle von getty zu aktivieren, muss die Datei /etc/inittab editiert werden.

1:2345:respawn:/sbin/getty 38400 tty1

Dort gibt es mehrere ähnlich aussehende Zeilen, bei denen nur der Pfad geändert und die Baudzahl für Modems entfernt werden muss. (Ja, da war mal was. 😉 ) Tut man das übrigens nicht, erscheint eine Fehlermeldung wie diese und man kann sich nicht mehr einloggen.

respawning too fast

Die neue Zeile:

1:2345:respawn:/sbin/mingetty tty1

Es ist auch möglich für jede virtuelle Konsole einen anderen Loginmanager festzulegen. Momentan habe ich drei virtuelle Konsolen für den Thinkpad 600 aktiviert. In den ersten beiden kommt getty zum Einsatz und in die dritte kann man sich mit Hilfe von Qingy einloggen.
Eine Besonderheit von Qingy ist, dass dieser Loginmanager auf das Framebuffer Device zugreift und somit auch ohne X ein grafisches Login bietet, welches sich durch verschiedene Themen weiter ausgestalten lässt. Qingy verbraucht etwas mehr Speicher als getty oder mingetty, bietet aber neben dem Augenschmaus auch Autologin, PAM-Unterstützung und einen Bildschirmschoner. Insgesamt ein interessantes Programm, was wie die anderen auch die wichtigste Aufgabe, den Login, problemlos erledigt. Der Pfad ist geringfügig anders als bei den anderen beiden.

1:23:respawn:/usr/sbin/qingy tty3

Also alles in allem die Alternativen sind da. Für ein reines Konsolensystem würde ich einfach bei dem voreingestellten getty bleiben, das einfach funktioniert. Wer mit seiner Desktopumgebung zufrieden ist, sollte auch mit dem mitgelieferten grafischen Loginmanager ausharren. Vielleicht entschließen sich aber Gnome und KDE in Zukunft auch auf das neue LightDM umzusteigen, welches mit Oneiric Ocelot der neue Loginmanager bei Ubuntu werden wird.