Die Schlange macht Karamba

KDE-Hintergrund mit SuperKaramba und Python aufwerten

01.03.2004
SuperKaramba sorgt dafür, dass sogar der KDE-Hintergrund etwas Nützliches tut. Was das ist, können Sie selbst programmieren – mit Python.

Wenn Ihr KDE-Hintergrund dank SuperKaramba [2] bereits als Uhr und MP3-Spieler fungiert [1], kommt schnell der Wunsch nach mehr auf: Tatsächlich lassen sich SuperKaramba-Themes mit Hilfe der Programmiersprache Python [3] um weitreichende interaktive Features aufwerten. So gibt es die Möglichkeit, Menüs zu erzeugen, Texte dynamisch zu ändern und die Themes sogar mit "Drag & Drop"-Unterstützung auszustatten.

Die grundlegende Idee dahinter: Wenn in KDE Ereignisse auftreten (z. B. die Maus bewegt, ein neues Programm gestartet oder ein Menüpunkt ausgewählt wird), sendet das entsprechende Programm Signale aus, auf die speziell ausgestattete Funktionen reagieren und so dafür sorgen, dass etwas geschieht. Auch SuperKaramba bekommt derartige "events" mit. Die möglichen Reaktionen definiert die SuperKaramba-Python-API, deren Funktionen [5] detailliert erläutert.

Tabelle 1: SuperKarambas Signalfühler

Funktion Wann ausgeführt?
initWidget(widget) Beim Erzeugen des SuperKaramba-Widgets.
widgetUpdated(widget) Wenn das Theme aktualisiert wird. Das Aktualisierungsintervall legt die .theme-Datei fest.
widgetClicked(widget, x, y, button) Bei einem Mausklick innerhalb des Themes. x und y geben an, auf welche Koordinaten (relativ zum Theme) geklickt wurde. button verrät die benutzte Maustaste.
widgetMouseMoved(widget, x, y, button) Bei Mausbewegung innerhalb des Themes. x und y bezeichnen die aktuellen Koordinaten (relativ zum Theme); button enthält die Nummer des gegebenenfalls gedrückt gehaltenen Mausknopfs.
menuItemClicked(widget, menu, id) Beim Anklicken eines Menüpunkts. Übergeben wird das Handle des Menüs (siehe Text) sowie das des angeklickten Menüpunkts (id).
menuOptionChanged(widget, key, value) Beim Aufrufen eines Punkts im Theme-Konfigurationsmenü. key enthält das Handle des Menüpunkts und value den neuen Wert (true oder false, also ja oder nein).
meterClicked(widget, meter, button) Beim Anklicken eines Anzeigegeräts. meter enthält dessen Handle, button die Nummer des benutzten Mausknopfs.
commandOutput(widget, pid, output) Bei Programmaufrufen mittels executeInteractive(), sofern dabei etwas auf stdout geschrieben wurde. pid ist die Prozess-ID des Programms, output enthält dessen Ausgabetext.
itemDropped(widget, dropText) Wenn Objekte (z. B. Icons) bei "Drag & Drop"-Aktionen auf das Theme "fallen". dropText enthält einen Text zu diesem Objekt (z. B. dessen URL, siehe Abschnitt "Ziehen und fallen lassen").
startupAdded(widget, startup) Wenn KDE eine neue Applikation startet. Ist das Startprozedere beendet, folgt das Signal startupRemoved(), dem seinerseits taskAdded() folgt.
startupRemoved(widget, startup) Siehe startupAdded().
taskAdded(widget, task) Siehe startupAdded().
taskRemoved(widget, task) Wenn ein Programm beendet wurde.
activeTaskChanged(widget, task) Wenn eine andere Applikation in den Vordergrund geholt wird.

Schlangenbändiger

Um bestehende Themes wie das in [1] erzeugte mit Python durch weitere Funktionalität aufzuwerten, müssen wir keine Änderungen am bisherigen Code vornehmen, sondern ergänzen das Theme einfach um eine zusätzliche Datei im Theme-Verzeichnis, die denselben Namen wie das Theme trägt und auf die Endung .py endet. Die SuperKaramba-Entwickler empfehlen, mit einer Vorlage [6] zu beginnen und diese anzupassen. Eine Version mit deutsche Kommentaren steht unter [7] zum Download bereit, das Beispiel-Theme unter [4].

Entpacken Sie letzteres mit

tar -C ~/.superkaramba -xjvf small_text_xmms.tar.bz2

im (ggf. neu anzulegenden) Verzeichnis ~/.superkaramba. Dabei entsteht das Theme-Verzeichnis small_text_xmms, in das Sie die Vorlage template_deutsch.py (bzw. template.py, wenn Sie das englische Original bevorzugen) hineinkopieren. Dabei muss sie noch den richtigen Namen bekommen:

cp template_deutsch.py ~/.superkaramba/small_text_xmms/small_text_xmms.py

Öffnet man die Theme-Datei small_text_xmms.theme nun über den Open...-Dialog im SuperKaramba-Hauptfenster, wird der Python-Quellcode automatisch in Python-Bytecode (siehe Kasten 1) übersetzt. (Sollte der Dateiauswahldialog das versteckte Verzeichnis .superkaramba nicht anzeigen, drücken Sie [F8].) Da dieser Kompiliervorgang Fehler- und Debug-Informationen auf dem Standardausgabekanal ausgibt, empfiehlt es sich, SuperKaramba manuell mit dem Befehl superkaramba (ggf. mit zusätzlicher Pfadangabe) in einem X-Terminal (z. B. konsole) zu starten.

Beispielsweise signalisiert der Hinweis Meine Python-Erweiterung wurde soeben geladen!, den der print-Befehl

print "Meine Python-Erweiterung wurde soeben geladen!"

in der letzten Zeile der Vorlage erzeugt, dass die Python-Datei korrekt übersetzt wurde.

Leider klappte dies bei der vom Autor verwendeten Suse-9-Installation nicht von vornherein: Offensichtlich setzt die Distribution einige von Python verwendete Umgebungsvariablen nicht korrekt. Abhilfe schaffen hier die beiden folgenden Befehle in der konsole, aus der SuperKaramba gestartet werden soll:

export PYTHONPATH=/usr/lib/python2.3/
export PYTHONHOME=/usr/lib/python2.3/

Ziehen und fallen lassen

Als erste Erweiterung soll das in [1] beschriebene Beispiel-Theme Drag & Drop für .mp3-Dateien hinzubekommen, damit man sie aus dem Konqueror mit der Maus auf den integrierten MP3-Player ziehen kann. Augenblicklich soll XMMS sie abspielen.

Die Lösung dieser Aufgabe zeigt Listing 1, das sich in Gestalt der Datei dragdrop.py auch auf der Heft-CD befindet. Wer sie nicht selbst aus der Vorlagedatei entwickeln will, überschreibt small_text_xmms.py einfach damit.

Damit SuperKaramba-Themes Drag & Drop unterstützen, bedarf es entsprechender Initialisierung. Das geschieht am besten beim Erzeugen des SuperKaramba-Widgets. Dabei wird ein entsprechendes Signal ausgesendet, auf das SuperKaramba mit einem "Fühler", der sogenannten Callback-Funktion initWidget(), reagiert. Mit

def initWidget(widget):

sagen wir, das wir in der Zeile darunter definieren wollen, was zu tun ist, wenn das Theme auf dem Desktop-Hintergrund erscheint:

karamba.acceptDrops(widget)

Das Widget soll Drop-Ereignisse akzeptieren.

Auf ein solches reagiert SuperKaramba mit itemDropped(). Diese Funktion erhält vom Drop-Signal, wie Tabelle 1 zeigt, zwei Informationen: einen Zeiger auf das betroffende Widget und – im Falle von Dateien – eine mehrzeilige Liste der betroffenen Dateinamen in der Variablen dropText, eine Datei pro Zeile.

Leider steht vor diesen Dateinamen jeweils noch das Stichwort file:. Da XMMS nicht mit ganzen URLs vom Typ file:/pfad/zu/datei.mp3, sondern nur mit Filenamen wie /pfad/zu/datei.mp3 hantiert, müssen wir den Inhalt von dropText etwas verändern, bevor wir ihn an den Mediaplayer übergeben können.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • KDE-Hintergrund mit SuperKaramba aufwerten
    Der Desktop-Hintergrund – lediglich eine Fläche zum Anzeigen hübscher Bildchen? Von wegen! Mit SuperKaramba gestalten Sie das KDE-Root-Fenster zum Multifunktionswerkzeug um.
  • Korner: Superkaramba
    Mal mehr, mal weniger nützlich, aber immer schön anzusehen, ist das Programm Superkaramba mit all seinen Themes, die Ihrem Desktop seine ganz persönliche Note verleihen.
  • KDE 3.5 ist fertig
  • gDesklets installieren und nutzen
    Mit ebenso nützlichen wie optisch attraktiven Desktop-Extensions verleiht gDesklets der Gnome-Oberfläche einen persönlichen Charakter. Setzen sie die piffige Desktop-Erweiterung auch mit anderen GUIs optimal ein und entwickeln Sie Ihre eigenen Desklets.
Kommentare

Infos zur Publikation

LU 02/2016: Alt-PCs flott machen

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Der Tipp der Woche

Schon gewußt?

14.11.2015

Auch unter Ubuntu 15.10 kann man wieder mit dem Startmedienersteller (alias Startup Disk Creator) ein Live-System auf einem USB-Stick einrichten. ...

Fehler des Startmedienerstellers von Ubuntu 15.10 umgehen

Aktuelle Fragen

Leap 42.1 und LibreOffice
Heinz Kolbe, 09.02.2016 21:54, 0 Antworten
Moin moin, auf meinem Notebook habe ich Leap 42.1 und Win 10 installiert. Alles läuft rund nur...
Tails Update
Val Lerie, 11.01.2016 10:51, 0 Antworten
Hallo zusammen, updaten > update Speichern unter > Persistent nicht möglich, mit der Meldung;...
Recoll
Jürgen Heck, 20.12.2015 18:13, 4 Antworten
Wie kann man mit Recoll nach bestimmten Zeichen/Satzzeichen bzw. Zeichenkombinationen suchen, z....
Wings Platinum 4 auf Linux?
Bodo Steguweit, 18.12.2015 11:37, 4 Antworten
Hallo in die Runde ich nutze für meine Diashows Wings Platinum 4 als Diareferent. Arbeite jetzt...
Bandbreite regulieren
Georg Armani, 25.11.2015 16:50, 1 Antworten
Hallo, ich bin ein Neuling in Sachen Linux und hoffe auf Hilfe. Ich habe zwei Windows Rechner...