Nicht zu übersehen
Daten auf dem Desktop visualisieren mit X On Screen Display
Lautstärke anpassen
Komplexere Anwendungsbeispiele wie die Anzeige eines Lautstärkepegels erfordern lediglich ein wenig mehr Kombinationsgeschick, denn zunächst braucht man ein Programm, das entsprechende Informationen auf dem "stdout"-Kanal ausgibt. Eine gute Wahl hierfür ist aumix, ein Mixer, den alle gängigen Distributionen mitliefern, wenn auch nicht immer standardmäßig installieren.
aumix -q listet alle bekannten Soundkanäle und deren aktuelle Lautstärkeeinstellung (in Prozent) auf. Diese Ausgabe reduziert der Befehl grep vol auf die Zeile mit der Gesamtlautstärke. Anschließend teilt cut -d " " -f 3 diese Zeile in durch Leerzeichen getrennte (-d " ") Spalten auf und gibt seinerseits nur die dritte Spalte (-f 3) aus, welche die Lautstärke des rechten Kanals enthält: Geht man davon aus, dass rechter und linker Kanal in etwa den gleichen Volumenpegel haben, kann man sich, wie hier geschehen, auf den rechten beschränken.
Bei Suse 9.1 muss das Ergebnis noch etwas weiter bearbeitet werden; hier ändert man die dritte Zeile in Listing 1 in
aktuell=`aumix -q | grep vol | cut -d " " -f 3 | sed s/,//`
Im Endeffekt erhält man in beiden Fällen aber nur eine Zahl, keine Balkenanzeige, die osd_cat ausgeben könnte. Hier hilft das Shellskript aus Listing 1, das Sie am besten unter dem Namen pegel.sh speichern und mit chmod u+x pegel.sh ausführbar machen.
Im Körper seiner while-Schleife hängt es zwischen den beiden Stichwörtern do und done einhundert Mal je ein Zeichen an den bisherigen Inhalt ($) der Variablen balken an, der anfangs Aktuelle Lautstärke: lautet: Entweder kommt ein # dazu oder ein -. Den Balken aus Gatterzeichen baut die Schleife so lange auf, bis die laufvariable, die zu Beginn auf 1 steht und in jedem Schleifendurchlauf mit + 1 um eins erhöht wird, kleiner oder gleich (-le, "less or equal") dem in aktuell gespeicherten Lautstärkewert ist. Dann wird die Zeile mit Minuszeichen aufgefüllt.
Mit echo gibt das Skript den so erzeugten Lautstärkepegelbalken (also den Inhalt der Variablen balken) aus. Damit dieser immer die gleiche Breite hat, benutzt man am besten eine Nichtproportionalschrift wie Courier zur Anzeige mittels osd_cat (Abbildung 5):
./pegel.sh | osd_cat -A left -p top -f -adobe-courier-*-r-*-*-10-*-*-*-*-*-*-* -c green
Der grüne Balken in der linken (-A left) oberen (-p top) Bildschirmecke ändert sich in dieser Form jedoch auch hier nicht. Dieses Problem lässt sich mit
while true; do ./pegel.sh ; sleep 1; done | osd_cat -l 1 -A left -p top -f -adobe-courier-*-r-*-*-10-*-*-*-*-*-*-* -c green
analog zur Uhr lösen – ein Ansatz, der sich auch bei anderen Visualisierungsanliegen nutzen lässt.
Listing 1
Aus einer Zahl einen Balken machen
#!/bin/bash
laufvariable=1;
aktuell=`aumix -q | grep vol | cut -d " " -f 3`
balken="Aktuelle Lautstärke: "
while test $laufvariable -le 100
do
if test $laufvariable -le $aktuell
then
balken="$balken#"
else
balken="$balken-"
fi
laufvariable=`expr $laufvariable + 1`
done
echo $balken
Tabelle 1: <C>osd_cat<C>-Parameter
| Parameter | Bedeutung |
|---|---|
| -a, --age=Sekunden | Beeinflusst das Scrollen von Texten. Wenn zwischen dem Eintreffen zweier Textzeilen mindestens die angegebene Zeit in Sekunden liegt, scrollt osd_cat nicht, sondern löscht den bisherigen Text. Der implizite Standardwert 0 bedeutet, dass immer gescrollt wird.
|
| -p, --pos=Position | Vertikale Ausrichtung des Texts auf dem Bildschirm: Soll er oben stehen, schreibt man top an die Stelle von Positionmiddle meint in der Mitte und bottom unten.
|
| -A, --align=Position | Horizontale Ausrichtung des Texts auf dem Bildschirm; statt Position wählt man zwischen den Werten left (linksbündiger Text), right (rechtsbündig) oder center (zentriert).
|
| -f, --font=Schriftart | Verwendete Schriftart (Standard: -misc-fixed-medium-r-semicondensed--*-*-*-*-c-*-*-*).
|
| -c, --colour=Farbe | Die gewünschte Schrift-Farbe in englischer Sprache: Die Standardfarbe Rot heißt red, gelb yellow, grün green etc.
|
| -d, --delay=Sekunden | Legt fest, wie lange (wieviele Sekunden) die Anzeige erscheinen soll (Standard: 5 Sekunden). |
| -o, --offset=Punkte | Vertikaler Abstand (in Punkten) vom mit -p ausgewählten Bezugspunkt: So erscheint die Anzeige bei -p top -o 5 fünf Punkte unterhalb des oberen Bildschirmrands. Bei -p bottom und -p middle sorgt der Offsetwert für eine Verschiebung nach oben.
|
| -i, --indent=Punkte | Horizontaler Abstand (in Punkten) von dem mit -A ausgewählten Bezugspunkt: Im Zusammenhang mit -A left und -A center verschiebt -i 10 die Anzeige zehn Punkte weiter nach rechts. Bei -A right sorgt der Indentwert für eine Verschiebung nach links.
|
| -h, --help | Zeigt eine kurze Hilfe zu allen verfügbaren Parametern an. |
| -s, --shadow=Offset | Legt den Abstand des Schattens vom Text fest. Den Schatten erzeugt osd_cat Offset Punkte weiter rechts und unterhalb des Texts. Der Standardwert 0 sorgt für schattenlose Schrift.
|
| -S, --shadowcolour=Farbe | Legt die Farbe des Schattens fest. Der Standardwert ist black, was der Farbe Schwarz entspricht.
|
| -O, --outline=Punkte | Legt die Dicke der Textumrandung fest. Beim Standardwert 0 fehlt der Rahmen. |
| -u, --outlinecolour=Farbe | Legt die Farbe des Rahmens fest, standardmäßig black.
|
| -w, --wait | Sorgt dafür, dass osd_cat solange mit der Darstellung von anliegenden Texten wartet, bis die Anzeige gelöscht wurde.
|
| -l, --lines=Anzahl | Legt fest, wieviele Zeilen die Anzeige haben soll (Standard: 5). |
Kasten 1: Namen für Schriftarten finden
Die wohl einfachste Möglichkeit herauszufinden, wie die auf dem System installierten Schriftarten heißen, führt über das Tool xfontsel (Abbildung 6). Innerhalb des Schriftnamens sind eine Menge Informationen kodiert, darunter an erster Stelle (fndry für "foundry", "Gießerei") der Hersteller (in Abbildung 6 adobe), die Schriftfamilie (fmly für "family", im Beispiel helvetica), die Dicke (wght für "weight"), die Neigung (slant, zum Beispiel i – "italics" – für "kursiv") oder die Größe in Pixeln (pxlsz, "pixelsize").
Bei der Suche nach einer passenden Schrift klickt man am besten mit der linken Maustaste auf das Stichwort fmly in der zweiten Zeile von oben, hält die Maus gedrückt und wählt eine Schriftfamilie aus. Sobald man die Maustaste nun loslässt, zeigt xfontsel die passende Schriftart an. Sternchen in der dritten Zeile mit dem Schriftnamen besagen, dass die an der jeweiligen Stelle kodierte Eigenschaft egal ist.
Klickt man jedoch auf andere Stichwörter in der zweiten Zeile, lässt sich die Schrift durch Hinzuwahl weiterer Charakteristika genauer spezifizieren; ausgegraute Punkte im jeweiligen Auswahldialog stehen nicht zur Verfügung.
Entspricht die Zusammenstellung den eigenen Ansprüchen, kopiert ein Klick auf den Knopf select den Fontnamen aus der dritten Zeile in den Zwischenspeicher, so dass er sich mit der mittleren Maustaste dort einfügen lässt, wo er gebraucht wird – beispielsweise hinter der -f-Option eines osd_cat-Aufrufs. Leider funktioniert dies nicht auf allen Systemen. (Hagen Höpfner/Patricia Jung)
Der Autor
Hagen Höpfner ist wissenschaftlicher Mitarbeiter am Institut für Technische und Betriebliche Informationssysteme der Fakultät für Informatik an der Otto-von-Guericke-Universität Magdeburg. In seiner Freizeit spielt der begeisterte Vater Gitarre in der Rockband "Gute Frage" (http://www.gutefrage.de/).
Glossar
LICQ
Ein grafischer Open-Source-Client für den Chat-Dienst ICQ (http://www.licq.org/).
true
Ein Kommandozeilenprogramm, das nichts tut, aber das erfolgreich. Genaugenommen gibt es einfach nur einen Wert zurück, den die Shell als positiv, als "wahr" interpretiert. Eine solche Bedingung in einem Schleifenkopf ist demnach immer erfüllt; die Schleife läuft ewig.
while-Schleife
Ein Programmierkonstrukt, das das Programm dazu bringt, eine "Tätigkeit" so lange zu wiederholen, wie die Bedingung erfüllt ist, die nach dem Stichwort "while" aufgeführt wird. In Listing 1 wiederholen sich die Anweisungen zwischen den (Shell-spezifischen) Stichwörtern "do" und "done" also, so lange der Test, ob der Inhalt ("$") der Variablen "laufvariable" kleiner oder gleich ("-le") 100 ist, ein positives Ergebnis liefert.
Nichtproportionalschrift
Schrift, bei der alle Buchstaben wie bei der Schreibmaschine die gleiche Breite haben. Bei Proportionalschriften wie Times oder Helvetica hängt deren Breite dagegen von ihrer "natürlichen Laufweite" ab: Ein i nimmt weniger Platz weg als ein m.
;
Stehen – anders als in Listing 1 – mehrere Shell-Befehle in einer Zeile, müssen sie durch Semikolon getrennt werden.
``
Zwischen sogenannten Backticks (von links oben nach rechts unten zeigenden einfachen Anführungszeichen) stehende Anweisungen führt die Shell aus und ersetzt den gesamten Ausdruck einschließlich der Backticks durch deren Ergebnis. Im Beispiel in Listing 1 landet so die Ausgabe des Befehls "aumix -q | grep vol | cut -d " " -f 3" in der Variablen "aktuell".
expr
Ein Befehl, der in der Shell einen arithmetischen oder logischen Ausdruck auswertet. In Listing 1 sorgt er für die (ganzzahlige) Addition des aktuellen Inhalts von "laufvariable" und 1.
Infos
[1] XOSD: http://www.ignavus.net/software.html
[2] XOSD-RPMs: http://rpm.pbone.net/
[3] LICQ-XOSD-Plugin: http://sourceforge.net/projects/licq-osd



