dwm, urxvt, qingy, xmodmap, surf und ein Thinkpad

In diesem Beitrag geht es noch ein wenig um ein paar wissenswerte Funktionen und Hilfsprogramme zum Dynamic Window Manager und um ein paar Merkwürdigkeiten und Einstellungen rund um den Thinkpad 600.

Qingy

Da ich dieses Jahr vor neuen Anwendungen und ein paar Veränderungen keinen Halt gemacht habe, durften natürlich Loginmanager für die Konsole auch nicht fehlen. Qingy ist darunter eine interessante Alternative und ein Mittelding zwischen der minimalen Startx-Lösung und einem voll ausgestatteten Loginmanager wie Gnomes GDM3, wenn man sich in eine grafische X-Umgebung einloggen möchte.
DWM und Qingy scheinen aber nicht richtig zueinander zu finden. Zumindest konnte ich Qingy nicht dazu bewegen eine Login-Shell zu starten, die meine gesamten Umgebungsvariablen wie z.B. die Spracheinstellungen berücksichtigt. Das führte leider dazu, dass Umlaute nicht dargestellt werden konnten.
Mit diesem scheinbar esoterischen Problem war ich aber nicht allein und das Arch-Linux-Wiki hatte dazu mal wieder einen passenden Tipp, z.B. Qingy über eine sogenannte Custom Session zu starten. Ein grafischer Loginmanager wie Qingy berücksichtigt dabei die Datei .xsession. Der Befehl exec zsh -l -c "dwm" brachte mich aber leider nicht ans Ziel.
Lange Rede kurzer Sinn, ich bin wieder ohne Loginmanager unterwegs und habe mir eine Anwendung gespart. Im Gegensatz zu den grafischen Pendants berücksichtigt die Startx/Xinit-Lösung die im Home-Verzeichnis versteckte .xinitrc, was später noch nützlich sein sollte.

rxvt-unicode-256color

Ich greife schon etwas vor, denn ich habe auch einen Backport von rxvt-unicode-256color erstellt. Die 256-Farben-Version von urxvt befindet sich leider nicht in Squeeze. Da ich aber, abgesehen vom Toshiba 220cs, überall schon rxvt-unicode mit der Solarized-Farbpalette benutze, durfte es auf dem Thinkpad auch nicht fehlen und war dank der schon bestehenden Config-Dateien auch schnell eingerichtet.
Mir ist aber aufgefallen, dass die Xft-Schriftarten das Scrollen sehr verlangsamen, was entweder an der Grafikkarte, den Treibern oder auch einer Terminaleinstellung liegen könnte. Da es aber sowohl in Xterm als auch in Urxvt auftrat, bin ich mir bei letzterem nicht so sicher. In einem Forum meine ich gelesen zu haben, dass
urxvt*buffered: false
in der .Xdefaults helfen solle. Mir half hingegen der Wechsel zu einer Bitmap Schrift. Einfach folgendes zur .Xdefaults hinzufügen:

urxvt*font: -xos4-terminus-medium-*-*-*-12-*-*-*-*-*-*-*
urxvt*boldFont: -xos4-terminus-bold-*-*-*-12-*-*-*-*-*-*-*

xmodmap

Mit Hilfe von xmodmap lässt sich die Tastaturbelegung ändern, indem die kerneleigenen Keycodes in sogenannte Keysyms des X-Servers konvertiert werden. Einen guten Überblick über die Thematik findet sich unter dem Stichwort Xmodmap im deutschen ArchLinux-Wiki.
Nachdem ich beim Neukompilieren die MOD-Taste von Mod1 (ALT) auf Mod4(Super) geändert hatte, musste ich noch das Problem lösen wie ich nun bei einem Laptop ohne Super-Taste die Tastenkombinationen ausführen konnte. Als Alternative bot sich z.B. die AltGr-Taste an.

xmodmap -e "keycode 108 = Super_L"

Das funktionierte auch prima, bis ich wieder einmal | als Zeichen benötigte. 🙄
Kein Problem nehmen wir die rechte Strg Taste.

xmodmap -e "keycode 105 = Super_L"

Leider Fehlanzeige, ganz so trivial ist xmodmap dann doch nicht. Vorher war z.B. noch das notwendig:

xmodmap -e "remove control = Control_R"
xmodmap -e "keycode 105 = Super_L"
xmodmap -e "remove mod4 = Super_L"
xmodmap -e "add mod4 = Super_L"

Wer nun schon voll Feuer und Flamme ist und die Enter-Taste auf die Löschen-Taste, Backspace zu Space und Shift zu ESC auf dem Rechner des Arbeitskollegen ummappen möchte, sollte sich auf jeden Fall noch die Befehle xev, xmodmap -pm und xmodmap -pke merken, denn die werdet ihr sicher für das Unterfangen brauchen.
Mit

xmodmap -pke > .Xmodmap

lässt sich die gesamte Keytabelle in die Datei .Xmodmap schreiben, womit die Einstellungen, in der Theorie, mit Hilfe der .xinitrc wiederhergestellt werden können. Das Verhalten ist leicht wahnsinnig, also nichts für schwache Nerven. 🙂

DWM und Xsetroot

So sieht meine .xinitrc im Moment aus.

#!/bin/sh
if [ -f $HOME/.Xmodmap ]; then
	/usr/bin/xmodmap $HOME/.Xmodmap
fi
#xmodmap -e "keycode 108 = Super_L"
urxvtd -q -o -f&
while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
do
	sleep 20
done &
exec dwm

Der erste Abschnitt liest die Einstellungen aus der .Xmodmap bei jedem Login ein, Zeile 9 startet Urxvt im ressourcensparenden Daemon-Modus und von 11-14 benutze ich eine Funktion, um das Hintergrundfenster von X mit einer Statusanzeige zu versehen. Standardmäßig stellt DWM hier die eigene Versionsnummer dar.
Die Anzeige lässt sich mit dem Befehl Xsetroot verändern. Weitere interessante Beispiele gibt es unter dem Stichwort DWM im ... ArchLinux-Wiki. Ebenfalls bemerkenswert ist die Erweiterung dwmstatus, ein Grundgerüst, mit dem es möglich ist fortgeschrittene Statusanzeigen einzubauen.

Surf und Tabbed

Last but not least, im Zusammenspiel mit surf und tabbed ist DWM erst richtig vollständig. Wo surf unter einem "normalen" Fenstermanager vielleicht suspekt erscheint, spielt er hier seine wahre Stärke aus. Startet zuerst tabbed mit dmenu. Shift+Strg+Enter öffnet Surf direkt in den "Tabs", mit Strg+G geht es zur Adresszeile. URL eintippen und mit Shift+Strg h/l zum nächsten Tab wechseln.

Wie zuvor schon erwähnt, hat der Surf-Backport Probleme bei der Darstellung einiger Https-Seiten, weswegen Midori eine sinnvolle Alternative auf dem älteren Laptop bleibt.
Ich denke zum Thema DWM ist vorerst alles gesagt. Immer dann, wenn ich eine grafische Anwendung brauchen sollte, bietet er ab sofort einen Rückzugspunkt vom Konsolensetup mit Screen. 😉

Einen maßgeschneiderten dwm-Fenstermanager von sid nach squeeze backporten

Obwohl ich denke, dass der Fenstermanager dwm in der Standardkonfiguration schnell zu erlernen und außerdem schlicht und ressourcensparend ist, wollte ich dennoch 2-3 Dinge verändern. Da Veränderungen bei dwm nur durch eine Neukompilierung möglich sind, habe ich die Gelegenheit genutzt und mich wieder etwas mehr mit der Erstellung eigener Debianpakete beschäftigt.
Ich hatte in dem Beitrag "Wie man Debian Pakete aus den Quellen baut" mehrere Methoden vorgestellt, wie man eigene Software speziell für Debian kompilieren kann. Die Pbuilder-Methode gefiel mir davon am besten. Erfolgreich wurde damit ein Mplayer nur für den Framebuffer und auch schon ein paar kleinere Backports erstellt.
Bevor ich meinen Weg zum Kompilieren und Anpassen von dwm vorstelle, wollte ich noch auf eine Alternative hinweisen. Im englischen Forum auf forums.debian.net gibt es schon eine sehr ausführliche Anleitung zum Kompilieren und Konfigurieren von dwm, die den Standardweg mit make und den Debian-Weg mit dpkg-buildpackage zeigt. Wie auch immer, ich denke Pbuilder ist noch einfacher.

Der elegante Weg mit pbuilder

Vorbereitung

aptitude install pbuilder
pbuilder create --distribution squeeze

oder wenn man z.B. i386-Pakete mit seinem AMD64-System bauen möchte

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

Quellen freischalten

deb-src http://ftp.de.debian.org/debian/ sid main in /etc/apt/sources.list hinzufügen.
Als normaler Benutzer das Quellpaket herunterladen und in das Quellverzeichnis wechseln.

apt-get source dwm
cd dwm-5.9/

Zwei Möglichkeiten

Möglichkeit 1

cp config.def.h config.h
vim config.h

Möglichkeit 2

cp config.def.h debian/local/config.apo.h
vim config.apo.h

Das Debian-Quellpaket bietet zum einen die Möglichkeit die Konfigurationsdatei wie gewohnt im Hauptverzeichnis editieren zu können oder aber im Debian-Verzeichnis. Der Paketverwalter von dwm hat hierzu einige Regeln angepasst, so dass beim Kompilieren auch alle Dateien im Verzeichnis debian/local in der Form config.*.h berücksichtigt werden.
Das hat später den enormen Vorteil, dass man gleichzeitig verschiedene Versionen von dwm übersetzen und später mit Debians update-alternatives Mechanismus auswählen kann.

Konfiguration

Ich habe die zweite Möglichkeit gewählt und die config Datei in debian/local namens config.apo.h modifiziert und folgende Dinge geändert.

  1. Farbe von hellblau auf dunkelgrau ändern
    static const char selbordercolor[] = "#333333";
    static const char selbgcolor[] = "#333333";
  2. Anzahl der Tags von 9 auf 6 verringern
    static const char *tags[] = { "1", "2", "3", "4", "5", "6", };
    
  3. Anstelle der ALT-Taste die Super/Windows-Taste benutzen
    #define MODKEY Mod4Mask
  4. rxvt-unicode anstatt xterm benutzen
    static const char *termcmd[] = { "urxvtc", NULL };

Das war es auch schon. Mir war insbesondere der Wechsel von xterm zu rxvt-unicode und von ALT zu Mod4 wichtig, da es einige Programme gibt, bei denen die voreingestellte ALT-Taste zu Problemen führen kann.

Kompilieren

Das Quellpaket aktualisieren

dpkg-source -b dwm-5.9/

Als Benutzer root ausführen

pbuilder build dwm_5.9-1.dsc
Das fertige I386-Squeeze-Paket fällt in /var/cache/pbuilder/result heraus und muss danach nur noch auf dem Zielrechner mit dpkg -i dwm_5.9-1_i386.deb installiert werden.
Mit dem Befehl update-alternatives --config dwm lässt sich danach zwischen der Standardversion, der dwm.web und der dwm.apo Version umschalten.

Fazit

Ich denke die Pbuilder-Methode sollte man sich aus mehreren Gründen beim Bauen von Debianpaketen merken. Zum einen lässt sich damit in einer "Reinraum-Umgebung" ein Paket sauber kompilieren. Man kann auf einer AMD64-Maschine mit Debian Unstable I386-Pakete für Debian Stable bauen und darüber hinaus sogar mehrere Pbuilder-Umgebungen parallel installieren, in denen Pakete für Testing, Unstable oder auch Ubuntu gebaut werden können!
Beachten sollte man aber, dass dieser Backport noch nicht den offiziellen Ansprüchen genügt. Insbesondere wurde das Paket nicht richtig umbenannt, das Changelog nicht geändert oder persönlich mit GnuPG signiert. Aber für den privaten Hausgebrauch sollte es reichen. 😉
Als optionale Ziele hatte ich mir noch vorgenommen surf, den minimalistischen Webkit-Browser aus der Suckless-Familie, und rxvt-unicode-256color "backzuporten", da es für beide keine Version in Squeeze gibt.
Kurz gesagt: Surf lässt sich genauso einfach von Sid nach Squeeze backporten, er funktioniert auch, es gibt aber einen schweren Bug beim Aufruf von Https-Seiten, der so mit Debian Unstable nicht auftritt. Backports sind also unter Umständen gar nicht so schwierig, man sollte aber immer auch im Hinterkopf behalten, das Probleme nicht nur beim Übersetzen auftreten können. Mehr Details zu rxvt-unicode-256color und dwm demnächst auf diesem Kanal.

Ein individuelles dmenu erstellen

Das gute dmenu wurde zwar primär für die Verwendung mit dem Fenstermanager dwm entwickelt, es lässt sich aber auch mit anderen kombinieren. Zum ersten Mal habe ich das dieses Jahr bei Crunchbang beobachtet, das auf Debian Squeeze und den Openbox-Fenstermanager setzt.
Doch zuerst einmal, so sieht dmenu für gewöhnlich aus.


Indem man die Anfangsbuchstaben des gesuchten Programms eintippt und das Ganze mit Tab vervollständigt, bewegt man sich in rasender Geschwindigkeit durch alle installierten Anwendungen, die im eigenen $PATH installiert sind. Programme werden danach durch Enter gestartet, fertig. Kein Warten, sehr effizient, Gnome-Do oder gar Unity und die Gnome-Shell werden dadurch zum Ausführen von Programmen überflüssig.
Normalerweise benötige ich bei Openbox und vergleichbaren Fenstermanagern nur das Rechtsklickmenü und ein paar Tastenkürzel. Mit dem Skript dmenu-bind.sh von Gatti Paolo lässt sich aus dmenu aber ganz leicht eine übersichtliche Menüstruktur erstellen.
Der Aufbau ist einfach und leicht nachzuvollziehen. Unter die Menüpunkte wie z.B. web werden der Name des Menüpunkts und der auszuführende Befehl geschrieben.

chromium "chromium"

oder

vim "urxvtcd -e vim"
In dem Menü kann man danach wie gehabt mit den Pfeiltasten und der Enter-Taste navigieren. Das Skript lässt sich z.B. in ~/.config/dmenu/dmenu-bind.sh abspeichern und in ~/.config/openbox/rc.xml oder mit Hilfe von obmenu an eine Taste binden.

<keybind key="A-F3">
  <action name="Execute">
    <startupnotify>
      <enabled>true</enabled>
        <name>dmenu-bind</name>
    </startupnotify>
        <command>~/.config/dmenu/dmenu-bind.sh</command>
  </action>
</keybind>

Das angepasste dmenu kann nun mit Alt+F3 aufgerufen werden.


Das gesamte dmenu-bind.sh Skript sieht so aus.

#!/bin/bash
#       Custom dmenu-bind.sh
#
#       Copyright 2009, Gatti Paolo (lordkrandel at gmail dot com)
#       Distributed as public domain.
#       09.28.2009 -- First release
#       09.29.2009 -- Submenu support added
if [ "$1" == "" ]; then
    title="MainMenu"
    menu=(
#               labels            commands
#           Main =========================================
                web               "$0 web"
                system            "$0 system"
                tools             "$0 tools"
                settings          "$0 settings"
    )
else
    case $1 in
    web)
        title="web"
        menu=(
#           Web ==========================================
                firefox           "firefox"
                lostirc           "lostirc"
         )
    ;;
    tools)
        title="tools"
        menu=(
#           Tools ========================================
                gedit             "gedit"
                geditsudo         "gksudo gedit"
         )
    ;;
    system)
        title="system"
        menu=(
#           System =======================================
                home              "pcmanfm"
                tilda             "tilda"
                synaptic          "gksudo synaptic"
         )
    ;;
    settings)
        title="settings"
        menu=(
#           Settings =====================================
                volume            "$0 volume"
                dmenu             "gedit $0"
                obconf            "obconf"
         )
    ;;
    volume)
        title="Volume"
        menu=(
#           Volume controls ==============================
                0%                "amixer sset Master 0"
                50%               "amixer sset Master 50"
                70%               "amixer sset Master 70"
                100%              "amixer sset Master 100"
         )
    ;;
    esac
fi
for (( count = 0 ; count < ${#menu[*]}; count++ )); do
#   build two arrays, one for labels, the other for commands
    temp=${menu[$count]}
    if (( $count < ${#menu[*]}-2 )); then
        temp+="n"
    fi
    if (( "$count" % 2 == "0" )); then
        menu_labels+=$temp
    else
        menu_commands+=$temp
    fi
done
select=`echo -e $menu_labels | dmenu -p $title -nb black -nf white -sb darkblue -sf white`
if [ "$select" != "" ]; then
#   fetch and clean the index of the selected label
    index=`echo -e "${menu_labels[*]}" | grep -xnm1 $select | sed 's/:.*//'`
#   get the command which has the same index
    part=`echo -e ${menu_commands[*]} | head -$index`
    exe=`echo -e "$part" | tail -1`
#   execute
    $exe &
fi

Eine weitere simple Backup-Methode: Partclone, TinyCore und sshfs

Ein Backup zu machen ist das A und O. Ein Satz, den man regelmäßig liest und dem man auch zustimmen kann, nur um es dann doch auf die lange Bank zu schieben bis es schließlich zu spät ist. So etwas nennt man dann PP, Persönliches Pech. 😮
Die Auswahl für ein Backup reicht von Keep it simple, über "The Debian Way" bis hin zu einer kompletten Linuxdistribution, die Festplatten und Partitionen klonen und wiederherstellen kann.
Auf etwas älteren Laptops wie dem Thinkpad 600 funktioniert für mich auch die Partimage-Methode, indem ich von meinem Debian Stable aus eine weitere Partition sichere und bei Bedarf wieder einspiele.
Trotzdem ich freundlicherweise sogar Bilder zur Verfügung gestellt bekommen habe, wie man mit Hilfe von Clonezilla selbst mit nur 128 MB RAM ein vollständiges Festplattenbackup machen kann, hat dies bei mir leider noch nicht hingehauen.
Da es aber keine Rolle spielt, welche Linuxdistribution man benutzt, sondern nur, DASS es funktioniert, bin ich ziemlich glücklich, dass ich mit TinyCore nun die Möglichkeit habe ein vollständiges Backup durchzuführen.
Dazu muss man lediglich noch die Erweiterungen partclone.tcz und sshfs-fuse.tcz installieren. Partclone bietet gegenüber Partimage den Vorteil mehr Dateisysteme sichern zu können, darunter auch ext4 und btrfs.
Mit Hilfe von SSH lässt sich ein entferntes Dateisystem auf einem anderen Rechner einhängen und das Backup direkt an diesen Computer übertragen. Bei TinyCore muss man entweder die Rechte für den Standardnutzer tc konfigurieren oder mit sudo su als root die folgenden Kommandos ausführen.

Mit dem entfernten Rechner verbinden

mkdir /home/tc/backup
sshfs user@192.168.0.201:/home/user /home/tc/backup

Partition mit Partclone sichern

partclone.extfs -c -d -s /dev/sda2 -o /home/tc/backup/20111205_hal600_sda2.img

Partition mit Partclone wiederherstellen

partclone.restore -d -s /home/tc/backup/20111205_hal600_sda2.img -o /dev/sda2

MBR mit dd sichern

dd if=/dev/sda bs=512 count=1 of=/home/tc/backup/20111205_hal600_mbr.img



Mit den oben genannten Beispielen habe ich sowohl die zweite Partition der Thinkpad 600 Festplatte als auch den MBR und die Partitionstabelle gesichert und mit Hilfe des SSH-Dateisystems an einen entfernten Rechner übertragen. Je nach Interesse lassen sich mit TinyCore noch eine ganze Reihe anderer Möglichkeiten mit älterer Hardware verwirklichen.

Alt-Gr-Taste unter X in Betrieb nehmen und Tastaturlayout auf Deutsch ändern

Letzte Woche wurde die Frage gestellt, warum die "Alt-Gr"-Taste des Thinkpad 600 bei Slitaz nicht funktionieren würde. Mir war dieses Problem damals nicht aufgefallen und für gewöhnlich muss ich mich zumindest bei Debian nicht um das manuelle Einstellen des Tastaturlayouts kümmern.
Der X-Server ist mittlerweile so smart, dass er alle Optionen automagisch einrichtet. Sollten aber Probleme mit dem Tastaturlayout auftreten, lässt sich die Einstellung für Xorg nach wie vor entweder in /etc/X11/xorg.conf oder mit einer Konfigurationsdatei in /etc/X11/xorg.conf.d/ manuell ändern. Der Abschnitt sieht dann für eine deutsche Tastatur ähnlich wie dieser aus:

Section “InputDevice”
  Identifier “Generic Keyboard”
  Driver “kbd”
  Option “XkbRules” “xorg”
  Option “XkbModel” “pc105″
  Option “XkbLayout” “de”
  Option “XkbVariant” “nodeadkeys”
EndSection

Tastaturlayout für ConnochaetOS und den Thinkpad 600 ändern

Später fiel mir dann auf, dass ConnochaetOS die AltGr-Taste des Thinkpad 600 ebenfalls nicht automatisch eingerichtet hatte, obwohl es eine extra angelegte /etc/X11/xorg.conf.d/20-keyboard.conf gab. Da ConnochaetOS auf Arch Linux basiert, konnte ich schnell eine Lösung für das Problem finden, dank dieses Beitrags im deutschen Arch-Linux-Forum.
Damit die AltGr-Taste wieder funktioniert, muss man einen Parameter für die Option "XkbOptions" mit Hilfe des Programms setxkbmap temporär übergeben oder permanent in der Datei 20-keyboard.conf eintragen.

Temporär

setxkbmap -option lv3:ralt_switch_multikey

Permanent

Option "XkbOptions" "lv3:ralt_switch_multikey"

Bei ConnochaetOS sieht die 20-keyboard.conf dann so aus:

Section "InputClass"
  Identifier "txkbmap keyboard catchall"
  MatchIsKeyboard "on"
  Option "XkbModel" "thinkpad"
  Option "XkbLayout" "de"
  Option "XkbVariant" "nodeadkeys"
  Option "XkbOptions" "lv3:ralt_switch_multikey"
EndSection

Die Systemeinstellungen und das Tastaturlayout für die Konsole lassen sich bei Arch Linux und ConnochaetOS in /etc/rc.conf ändern. Hilfreich ist der Artikel "Arch Linux auf Deutsch stellen" im Arch Linux Wiki.

Fehlerdiagnose

Mit dem Kommando xev lässt sich herausfinden, mit welchem Keycode eine Taste im Moment belegt ist, indem man die betreffende Taste danach einfach drückt. Mit xmodmap -pke wird eine komplette Übersicht angezeigt. Beide Befehle eignen sich gut für die Fehlerdiagnose.
In /usr/share/X11/xkb/rules/base.lst befindet sich die Dokumentation zu allen Optionen im Zusammenhang mit Xorg und xkb.

Ein freier Blick auf Office-Dokumente

MS-Office-Dokumente per E-Mail zu erhalten kann in der Regel nur Arbeit bedeuten. Doch bevor man sie aus Reflex oder Angewohnheit dem elektronischen Müll überantwortet, ist es manchmal doch klüger vorher noch einen Blick hinein zu werfen. Es könnte ja wichtig sein.
Seit meinem Umstieg auf Linux benutze ich Freie Software, die in standardisierte Formate abspeichert. Es ist schon merkwürdig, dass das Open-Document-Format ein quelloffener Standard ist, Microsofts weit verbreitetes Doc- und Docx-Format aber nicht. Darum scheren sich aber die wenigsten Leute. Für viele erscheint es zwar selbstverständlich zu sein, dass man nicht mehr mit Elle, Zoll, Spanne oder Klafter misst, mittelalterliche Praktiken bei Dateiformaten nimmt man aber mehr oder weniger gelassen hin.
Auf meiner Festplatte tummeln sich immer noch alte Word-Perfect-Dokumente, die ich irgendwann noch einmal in ein freies Odt-Format umwandeln möchte, wenn ich mich nicht doch endlich entschließe den alten Kram nach /dev/null zu verschieben. 🙄
In der Regel habe ich auf dem leistungsfähigsten Rechner LibreOffice installiert, mit dem ich bisher immer alle Formate öffnen konnte und natürlich gibt es auch noch das PDF-Format, um den Kompatibilitätswahnsinn ein wenig zu umgehen.
Ich muss aber nicht auf jedem Rechner eine vollwertige Office Suite installiert haben. Für diesen Fall habe ich mir angewöhnt eine leichtere Alternative zu installieren, die mir lediglich den Inhalt eines Dokuments anzeigt. Für Doc-Dokumente ist das nach wie vor antiword, obwohl dieses kleine aber feine Programm seit 2005 nicht mehr weiterentwickelt wird. Als Konsolenalternative für das freie Odt-Format oder das ältere Sxw benutze ich bei Debian odt2txt. Beide sind äußerst anspruchslos an die Hardware und mit beiden lässt sich der Inhalt von Doc- oder Odt-Dateien anzeigen. Besonders gut spielen beide auch mit dem Text-E-Mail-Programm Alpine zusammen, in dem die Doc- und Odt-Anhänge automatisch im Textformat angezeigt werden.
Eine Alternative für ältere Word-Dokumente kann ebenfalls wv sein, welches auch nach HTML, LaTeX oder PDF konvertieren kann. Gäbe es nun nicht noch das Docx-Format, ich könnte an dieser Stelle schon Schluss machen. Bis auf ein kleines Perl-Skript namens docx2txt habe ich bisher noch kein reines Konsolenprogramm gefunden, welches mir wie bei Antiword einfach nur den Inhalt als Text ausgibt oder diesen sogar in PDF umwandeln kann. Jedoch funktioniert docx2txt für mich leider nicht.
Bisher war deshalb auch mein einziger Ausweg aus dem Dilemma LibreOffice zum Betrachten zu benutzen oder besser gesagt unoconv, ein Werkzeug für die Kommandozeile, mit dem es z.B auch möglich ist PowerPoint-Folien zur schnellen Ansicht in PDF umzuwandeln.

unoconv -f pdf wiewirdmanmillionaer.ppt

Leider lässt es sich nicht alleine installieren und benötigt zum Funktionieren Teile der LibreOffice Suite.
Ich habe mich deswegen im IRC in #debian auf irc.debian.org nach weiteren Lösungsmöglichkeiten umgehört und zumindest noch eine interessante gefunden, wie man den Inhalt einer Docx-Datei auf der Konsole als Text darstellen kann.
Da Docx ein gezipptes Format ist, lässt es sich mit unzip MeineDatei.docx entpacken. Im Ordner word befindet sich danach der Hauptteil des Dokuments in der Datei document.xml. Mit Hilfe von xmllint, das im Paket libxml2-utils mitgeliefert wird, kann der Inhalt in ein Html-Format umgewandelt und z.B. mit dem Textbrowser elinks angeschaut werden.

xmllint --html document.xml > document.html
elinks document.html

Wie schon erwähnt gehören Anwendungen für die Konsole zum Arbeiten mit Tabellenkalkulation und Präsentationen (noch) nicht zu meinen Schwerpunkten und solange sich das nicht ändert, werde ich auch nicht so tun als wäre es so. Für den schnellen Blick in Office-Dokumente genügen mir aber die vorgestellten Programme und wer nach weiteren Ausschau halten möchte, findet in den Quellen auf der Software-Seite und insbesondere auf jaredandcoralee.com unter der Überschrift "Document Converter" noch einige interessante Alternativen.

Textverarbeitung, Tabellenkalkulation und Präsentation auf der Konsole

Ich habe keine Probleme damit zuzugeben, dass ich mittlerweile eine große Anzahl von Konsolenanwendungen regelmäßig benutze und ich sie nicht nur als letztes Mittel für Jahrzehnte alte Laptops, sondern auch für eine leichtbedienbare und effiziente Alternative für moderne Computer halte.
Es gibt aber auch Bereiche, in denen der Einsatz von Programmen für die Konsole unbefriedigend ist oder wo ich gespaltener Meinung bin. Ich käme nicht auf die Idee Bild- und Videobearbeitung ausschließlich auf der Konsole durchzuführen, obwohl natürlich das massenhafte Zurechtschneiden und Konvertieren von Bildern mit den geeigneten Programmen und seiner Lieblingsshell hervorragend funktioniert.
Auch 3D-Spiele sind nichts, wofür ich zwingend nach einer Konsolenalternative suchen müsste. Und dann wären da noch die sogenannten Büroarbeiten - Textverarbeitung, Tabellenkalkulation und die viel geliebten Präsentationen.

Textverarbeitung

Bei der Textverarbeitung sehe ich die geringsten Probleme. Tatsache ist, dass zu viele Texte "zu früh" oder gar unnötig mit Bürosoftware formatiert werden. In vielen Fällen würde es eine gut strukturierte Textdatei auch tun, die mit Hilfe von Editoren wie Vim oder Emacs verfasst wird. Außerdem spricht oft nichts dagegen Texte solange wie möglich in der Rohfassung zu belassen bis sie im letzten Schritt in ein ansprechendes Format gesetzt werden können. Für private Korrespondenz benutze ich deshalb nach wie vor entweder LibreOffice oder AbiWord und ansonsten einen schlichten Editor.

Tabellenkalkulation

Tabellenkalkulation wird immer dann praktisch, wenn man eine Teilnehmer- oder Getränkeliste erstellen will oder seine Finanzen planvoll ordnen möchte. Doch selten kommt es in privaten Haushalten vor, dass man zehntausende Zeilen Daten auswerten und zahllose Makros für Datenimport und -export verfassen muss. Mal abgesehen davon, dass ich Tabellenkalkulation im Allgemeinen nicht für die interessanteste Aufgabe halte, sehe ich abseits von automatisierten Prozessen kaum eine Notwendigkeit für eine Konsolenapplikation.
Das soll aber nicht heißen, dass es hier keine Alternativen geben würde. Als Lektüre empfehle ich K.Mandlas Tutorial "How to use teapot like a pro" und "Howto: Use Oleo like..like...like..". Ich gebe zu, dass ich nach dem Lesen des Tutorials zu Teapot der Vorstellung einer Tabellenkalkulation für die Konsole positiver gegenüberstehe und mir nun nicht nur mehr vorstellen kann damit einmal zu arbeiten.
Meine ersten Schritte mit Teapot habe ich dazu genutzt, den Wert der Laptops im zuletzt vorgestellten Post als Beispiel zu visualisieren, wozu ich den Preis für einen Neukauf und den für die gebrauchten Laptops gegenübergestellt habe. Ich weiß nicht gerade eine Herkulesaufgabe, für die es auch etwas Kopfrechnen getan hätte. In Teapot lassen sich aber auch beliebige Formeln eingeben, die sich mit den entsprechenden Funktionen natürlich auch in mehrere Zellen kopieren lassen und deren Werte automatisch bei einer Änderung in einer anderen Zelle angepasst werden.

Leider findet sich zur Zeit kein Paket in Debian, weshalb ich kurzerhand Teapot mit meiner Archlinux-Installation auf dem Inspiron 4000 ausprobiert habe. Das entsprechende PKGBUILD lässt sich wie in diesem Beitrag schon vorgestellt in AUR finden und mit makepkg -s schnell selbst bauen. Man sollte nur sicherstellen, dass make installiert ist.
Teapot besitzt viele grundlegende Funktionen, die man von jeder Tabellenkalkulation her kennt, einen vollwertigen Ersatz für LibreOffice Calc oder Gnumeric sollte man aber nicht erwarten.

Präsentation

Ok, hier muss ich passen. Präsentationen sind genauso etwas wie Schlipse, von denen ich hoffe, dass in Zukunft die Welt davon nur noch in Geschichtsbüchern lesen und sich darüber köstlich amüsieren wird. Ich habe schon eine Menge Präsentationen erstellt, aber noch nie eine rein für private Zwecke. Auch wenn ihr nun vielleicht schmunzelt, das soll nicht heißen, dass es keine Alternativen für die Konsole gäbe. Erwähnt seien hier die Programme Beamer, tpp und xsw. Ich habe davon noch keines ausprobiert, obwohl die reine Vorstellung auf den entsprechenden Webseiten vielversprechend aussieht.
In Zukunft soll das heißen: Selbst wenn ich in Sachen Konsolenapplikationen auch einmal skeptisch sein sollte. In der Regel hat mich vermutlich vor Jahren schon irgendjemand eines besseren belehrt. 🙂

Die trivialen Dinge über die keiner spricht

Was haben Raumschiff Enterprise Folgen und Blog-Artikel über Leben auf der Konsole gemeinsam?
Beide verschweigen gerne die trivialen Dinge des Lebens. Womöglich habt ihr euch auch schon einmal gefragt, wie Captain Picard und Co. es eigentlich mit den Sanitären Anlagen halten? Üblicherweise wird dieses nur allzu menschliche Detail in jeder Star Trek Folge geflissentlich ausgeblendet.
Posts zum Thema Linux und Konsole verhalten sich ähnlich. Man erfährt schnell, dass man mit einem zehn Jahre alten Laptop problemlos das Wetter der Erde in Echtzeit rendern kann, doch das "Wie kopiere ich eigentlich Texte im Terminal von A nach B" wird als selbstverständlich vorausgesetzt. Hier ist mein Versuch das Geheimnis um die Bedienung der Muscheln zu lüften.

GPM - General Purpose Mouse

Ich gebe zu, ich kann nicht alle Gewohnheiten ablegen, die sich in Jahren der Arbeit mit grafischen Oberflächen angesammelt haben. Instinktiv suchte ich deshalb nach einer Lösung wie man Texte mit der Maus markieren kann, um sie dann durch Kopieren und Einfügen an eine andere Stelle zu bewegen.
In der Regel erfüllt GPM diesen Zweck hervorragend. Bei gedrückter linker Maustaste markiert man den Text, wechselt zum Programm, in das man ihn einfügen möchte und drückt die rechte Maustaste. Mehr braucht es nicht um Wörter und Texte von A nach B zu kopieren. Vorausgesetzt natürlich man hat nur zwei Tasten zur Verfügung. Bei einer Drei-Tasten Maus ist die mittlere Taste die Einfüge-Taste.

Kopieren und Einfügen mit Screen

Wem die Maus suspekt erscheint, hat mit dem Terminalmultiplexer Screen (Tmux hat eine ähnliche Funktion) die Möglichkeit Texte mit der Tastatur in einen Buffer zu kopieren und auch wieder zum Vorschein zu bringen.

  1. STRG+A ESC startet den Kopiermodus. Ein danach erneut gedrücktes ESC bricht ihn ab. Im Copy Mode lässt sich wie im Vim Editor navigieren. h,j,k,l oder mit den Pfeiltasten. Mit g und G springt man zum Anfang und zum Ende.
  2. Space-Taste. Drückt man nach der STRG+A ESC Sequenz die Space-Taste markiert man somit den Anfang des Textes, den man kopieren möchte. Der Vorgang lässt sich durch einen weiteren Druck auf die Space-Taste beenden. Danach befindet sich die Kopie im Buffer.
  3. STRG+A ] Mit dieser Kombination wird schließlich der Text an der gewünschten Stelle wieder in Screen eingefügt.

Native Copy&Paste Funktionen der Konsolenprogramme

Die Notizbuch-Anwendung hnb z.B. lässt in Sachen Kopieren, Ausschneiden und Einfügen keine Wünsche offen. Dies funktioniert mit der bekannten Tastenkombination STRG+c, STRG+x und STRG+v.
Da man Kopieraufgaben hauptsächlich in Editoren benötigt, empfiehlt sich natürlich Vim. 😉 Mit vim -p datei1 datei2 datei3 usw. lassen sich mehrere Dateien gleichzeitig in verschiedenen Tabs öffnen. Zwischen diesen kann man im Kommandomodus mit gt oder gT navigieren. Im selben Modus lassen sich neue Tabs mit dem Befehl :tabnew öffnen.
Kopieren wird bei Vim yanking genannt. Startet man den Visuellen Modus mit v lässt sich der Text mit den gewohnten Bewegungstasten markieren und mit y kopieren und mit p einfügen. Yanking funktioniert auch im Kommandomodus z.B. mit yy für eine Zeile oder y3w für das Kopieren von 3 Wörtern. Der Löschen Befehl dd, d3w usw. lässt sich zugleich auch zum Ausschneiden benutzen.
Soweit zum Thema. Die man Seite zu Screen hat hier z.B. noch einiges zu Copy&Paste zu bieten. Momentan machen die vorgestellten Alternativen das Leben für mich auf der Konsole ein gutes Stück angenehmer.

Alpine: Konfiguration für Fortgeschrittene

Das Konsolensetup auf dem Thinkpad 600 ist bereit. Zeit um etwas Butter bei die Fische zu geben. Debian Squeeze ist installiert und die üblichen ohne-X Verdächtigen laufen einträchtig in Screen und manchmal zusätzlich noch in FbTerm.

Das alles war eine gute Gelegenheit um einmal zu testen, ob ich mit meinen eigenen Anleitungen auch noch nach einem Jahr etwas anfangen kann. Ich konfigurierte mein Text-E-Mail Programm Alpine genau nach den Vorgaben und richtete mir zwei POP3 und einen IMAP Account ein, wobei es mir bei letzterem genügte Mails zu lesen und in den IMAP-Ordner von einem anderen Konto aus zu speichern.
Für den ersten Start reichen die alten Einstellungen vollkommen aus. Bei Alpine hilft es aber noch folgende Ideen im Hinterkopf zu behalten. Die folgenden Optionen lassen sich sowohl innerhalb von Alpine unter Setup->Config ändern als auch in der versteckten Konfigurationsdatei .pinerc im Homeverzeichnis.

  1. Bestätigungsnachfrage beim Wechsel in ein Postfach abschalten
    Auf die Dauer zeitraubend kann die ewige Nachfragerei von Alpine sein, ob man tatsächlich das POP-Postfach öffnen möchte. Diese Nachfrage lässt sich wie folgt deaktivieren:

    folder-reopen-rule=yes-ask-y
    Yes for POP/NNTP, Ask for other remote yes
    
  2. Die Felder zum Verfassen der E-Mail bearbeiten
    Ich benötigte noch BCC und das FROM-Feld. Damit lässt sich der Absender schnell ändern, wenn man eine E-Mail verfasst. Eine flexiblere Möglichkeit bieten Regeln.

    default-composer-hdrs=From,
    	To,
    	CC,
    	Bcc,
    	Attchmnt,
    	Subject
    
  3. Externe Programme definieren
    Als externen Editor bevorzuge ich Vim, als Rechtschreibprüfung aspell.

    editor=vim
    speller=aspell
    
  4. Ort des lokalen Mailordners ändern
    Mich störte ein wenig, dass der Ordner Mail in meinem Homeverzeichnis angelegt wurde. Um ihn an einen anderen Ort zu bringen oder zu verstecken, ist diese Option da:

    folder-collection=mail .mail/[]
    

    Das /[] darf am Ende des neuen Namens nicht fehlen. Der Name mail wird so innerhalb von Alpine dargestellt.

  5. Auf alle IMAP-Ordner von Google Mail zugreifen
    Mit den sogenannten Collection Lists, lassen sich auch entfernte IMAP-Ordner anzeigen. Um dies bei Google Mail zu erreichen, geht man so vor.
    Setup->Collection List->Add

    Nickname: Google Mail IMAP
    Server: imap.googlemail.com/user=DeinBenutzername/ssl
    Path: [Google Mail]
    View:
    

    Mit CTRL+X wird dieser Eintrag abgespeichert. Anschließend befindet sich unter Folder List der IMAP-Ordner von Google Mail, in dem sich wiederum alle entfernten IMAP-Ordner befinden.

Mit Hilfe von Regeln lassen sich wesentlich feinere Einstellungen treffen. Zum Beispiel können so Filter definiert werden, mit denen festgelegt wird, wohin E-Mails verschoben werden oder, wie am Anfang schon erwähnt, die FROM-Adresse an Regeln angepasst werden. Unter Setup->Rules geht es zu den Regeln.
Mein Benutzerszenario sieht so aus. Ich rufe meine beiden POP3-Accounts ab, wobei standardmäßig die E-Mails auf dem Server belassen werden. Genauso möchte ich es auch haben, da ich unterwegs auf dem Laptop nur die Mails lesen will und auf den anderen Rechnern zu Hause dann die Filter laufen lasse. Die E-Mails werden über den Smtp-Server eines POP3-Anbieters verschickt. Das IMAP-Konto dient als Zwischenspeicher und Zugriff auf alte E-Mails. Mails lassen sich mit ; selektieren und mit S abspeichern. Den entsprechenden Ordner wählt man dann manuell mit CTRL+T aus.
Insbesondere die Regeln sind bei Alpine für weitere Kontrolle empfehlenswert. Für meine bescheidenen Ansprüche brauche ich sie zur Zeit aber nicht. Wer mehr darüber lesen möchte, sollte sich auch die offizielle Dokumentation der Alpine Entwickler anschauen.
Ebenfalls möglich ist das Versenden von E-Mails über eine verschlüsselte Verbindung. Am schnellsten lässt sich das unter Setup->Config einstellen. Die Smtp-Variable wird in der für Alpine üblichen Form angepasst. Z.B.

smtp.googlemail.com/tls/user=DeinBenutzername

Erkenntnisse bei 16 MB RAM und weniger

Er ist nicht vergessen, nur etwas ruhiger ist es um ihn geworden. In der Zwischenzeit hat er einen neuen Platz neben meinem Router gefunden, um nun direkt mit Hilfe einer PCMCIA zu LAN-Karte ins Netz zu gehen. Ab und an probiere ich ein paar Programme und Einstellungen aus um herauszufinden, was tatsächlich möglich und vor allem sinnvoll ist bei einem 16 Jahre alten, Toshiba 220cs, Laptop. Zwar ist 16 MB RAM weit davon entfernt ein komfortables Polster zu sein, doch verhalten sich einige Konsolenprogramme nicht anders als auf einem Core-Duo-Rechner.
Nach wie vor benutze ich Slitaz in der Minimalinstallation und das winzige KolibriOS als Dual-Boot System. Zwischendurch hatte ich Slitaz zwar auch schon wieder von Grund auf neu aufgespielt, aber am Ende rettet das Image vom Jahresanfang immer noch den Tag.
Wenn ihr zu den Leuten gehört, die elektronische Geräte bei längerer Nichtbenutzung komplett vom Stromnetz trennen, solltet ihr nach dem Wiederanfahren unbedingt einen Blick in das BIOS werfen. Bei Problemen mit der PCMCIA Karte kann es passiert sein, dass die ausgelaugte CMOS-Batterie nicht mehr genug Energie zur Verfügung stellt, um die richtigen Einstellungen zu speichern.
RAM. Zwar rede ich immer von 16 MB RAM, htop zeigt mir aber lediglich nur 10 MB an. Vermutlich wird Speicher durch eingebaute Hardware reserviert, weswegen am Ende für die tatsächliche Ausführung weniger RAM zur Verfügung steht. Htop ist aber nicht das einzige Programm, das diesen Wert anzeigt. Auch KolibriOS signalisiert hier den gleichen Wert. Trotzdem ist es erstaunlich, was ein minimales Slitaz an Arbeitsspeicher benötigt und dabei dennoch alle Hardwaretreiber geladen hat.

WLAN. Das WLAN in Betrieb zu nehmen, war auf dem 220cs noch nie ein Problem. Obwohl 1996 die meisten Laptops noch nicht bereit waren für die mobilen Ansprüche des Internetzeitalters (mit dem 220cs kann man sich Hanteltraining sparen), ist es ohne weiteres möglich seine PCMCIA-Karte mit WPA in Betrieb zu nehmen. Leider nimmt diese drahtlose Funktion einige MB in Anspruch. Wenn man also den Rechner sowieso nur zur Hause für einen bestimmten Zweck nutzen möchte, ist eine PCMCIA zu LAN Karte vorzuziehen. Die beiden von 3com erfüllen nicht nur ihren Zweck, sondern haben auch Freie Linuxtreiber.
Rtorrent. Keine Frage ist Rtorrent die bevorzugte Lösung, wenn man BitTorrent von der Konsole aus bedienen möchte. Mit dem geringen Verbrauch an Systemressourcen und dem intuitiven Ncurses-Interface kann man nicht viel falsch machen. Obwohl RAM hier ein wichtiger Flaschenhals ist, sollte man I/O nicht unterschätzen. So alte Laptops haben meist keine sehr schnelle Festplatte, USB 1.0 war zu dieser Zeit noch eine Seltenheit und versucht man gleichzeitig mehrere Torrents über WLAN zu verteilen, hat man die besten Voraussetzungen geschaffen, um dem System die Grenzen aufzuzeigen. Der Umstieg auf eine LAN-Verbindung hat bei mir zwar deutlich geholfen, dennoch muss man die Bandbreite bei der Übertragung drosseln, damit der Laptop weiterhin bedienbar bleibt. In Rtorrent sollte deswegen die Anzahl der maximalen Peers begrenzt werden und gleichzeitig für den Download eine Grenze gezogen werden. Global 300 kb/s war ein vernünftiger Zahlenwert.
Musik. Nachdem ich die richtigen Audioeinstellungen gefunden hatte, ließ sich ohne weiteres Musik mit cmus abspielen, dass ich mit Hilfe von tazpkg von einem Debian- in ein Slitazpaket umgewandelt habe. Ob die abgespielten Klänge aber als Hörgenuß bezeichnet werden dürfen, lasse ich an dieser Stelle mal offen. Hier muss man wohl die Schuld bei der Soundkarte suchen. Lauter Krach immer, Äolsharfe gleiche Klänge eher nein.
SSH. Normalerweise benutze ich SSH nicht nur zur Fernadministration, sondern auch zum Einhängen entfernter Dateisysteme mit sshfs. Diese Methode scheint bei dem Toshiba 220cs ziemlich instabil zu sein, weswegen möglicherweise der Versuch lohnt Dateien mit Hilfe von NFS freizugeben. Auf jeden Fall ist Dropbear der geeignete Ersatz für OpenSSH, wenn die Ressourcen begrenzt sind.
Lighttpd. Ich erwähnte schon bei der Vorstellung von Ideen, was man mit alten Computern machen kann, dass ein hauseigener Webserver unter Umständen ein guter Verwendungszweck für einen alten Rechner sein kann. Als leichtgewichtige Variante bietet sich hier Lighttpd an, der sich bei Slitaz problemlos installieren und mit /etc/init.d/lighttpd start auch sofort in Betrieb nehmen lässt. Dauerhaft wird der Dienst in der /etc/rcS.conf unter RUN_DAEMONS eingetragen. Danach nur noch mit dem Browser auf die lokale Adresse surfen und man kann sich von den Fähigkeiten von Lighttpd überzeugen.

Prinzipiell funktionieren viele textbasierte Programme wie auf einem brandneuen Modell. Egal ob es der IRC Chat ist, der Terminplaner für die Konsole oder das E-Mail-Programm. Wunder darf man aber nicht erwarten. Insbesondere lassen sich nicht alle Programme parallel ausführen und umfangreiche Editoren wie Vim verhalten sich zeitweise recht träge.
Für die Zukunft stehen noch FreeDOS und Crux auf dem Testplan. Ersteres um herauszufinden, welche Möglichkeiten ein weiteres Nicht-Linux, aber Freies Betriebssystem, bietet und letzteres, weil es einen speziellen i585-Port zur Verfügung stellt und dazu noch äußerst anpassbar ist.