Aufgabenautomatisierung in KDE mit DCOP

Sprich mit mir

Intensivnutzern von KDE reichen die Funktionen, die sie per Maus erreichen, oft nicht aus. Mit dem DCOP-Protokoll lassen sich viele Applikationen per Skript steuern. Anwender automatisieren so ihre Aufgaben und erstellen Serienbriefe und Rechnungen mit einem Tastendruck.

In der Desktop-Umgebung KDE konfigurieren Anwender fast alle der unzähligen Features mit der Maus – entweder im Kontrollzentrum oder in der jeweiligen Anwendung selbst. Doch wenn es um die Automatisierung von Aufgaben geht, müssen Skripte ran. Damit sie Zugriff auf den KDE-Desktop haben, gibt es das Desktop Communication Protocol, kurz DCOP.

Über dieses Protokoll ist es möglich, eine Applikation komplett ohne Maus fernzusteuern. Jede Anwendung bietet DCOP-Schnittstellen (Interfaces) an, die andere Programme nutzen können. So ist es mit einigen Funktionsaufrufen möglich, das Mail-Programm KMail zu starten und eine E-Mail zu versenden, ohne dass der Benutzer vor seinem Rechner sitzt.

Beim Start von KDE fährt automatisch der dcopserver genannte Prozess hoch, über den die komplette Kommunikation der Programme abläuft. Jedes Programm, das DCOP-Interfaces zur Verfügung stellt, registriert sich beim DCOP-Server und bekommt einen Namen zugewiesen. Programme, von denen immer nur eine Instanz läuft, erhalten als DCOP-Namen einfach ihren Programmnamen; andere bekommen zusätzlich ihre Prozess-ID (PID) angehängt. Startet etwa der Konqueror mit der PID 3657, lautet der zugehörige DCOP-Name konqueror-3657. Andere Applikationen greifen über diese Bezeichnung auf die Komponenten von Konqueror zu.

Abbildung 1: Kdcop zeigt alle beim DCOP-Server registrierten Schnittstellen an. Hier etwa die des Konqueror, der mit der Prozess-ID 3190 läuft.

Unverbindlich angefragt

Für einen ersten Blick hinter die Kulissen empfiehlt sich das Programm kdcop (siehe Abbildung 1). Dieses nicht über das K-Menü erreichbare Systemwerkzeug gibt eine Übersicht über alle zur Zeit aktiven DCOP-fähigen Applikationen. In neueren KDE-Versionen sind sogar die Symbole des zugehörigen Programmes zu sehen, was die Zuordnung erheblich erleichtert.

Klappt der Benutzer einen Eintrag auf, sieht er alle verfügbaren Schnittstellen. Jede von ihnen ist für einen Teil des jeweiligen Programmes verantwortlich und enthält Funktionen, die sich direkt per Doppelklick oder über ein C++-Programm aufrufen lassen. Wie bei Funktionen eines Programmes nehmen auch DCOP-Funktionen Werte an und geben Werte zurück. Ausgaben erfolgen im unteren Teil von Kdcop.

Wer beispielsweise den aktuellen virtuellen Desktop ansehen oder ändern will, findet unter KWinInterface der Applikation KWin die passenden Funktionen currentDesktop() und setCurrentDesktop().

Neben Kdcop gibt es noch das Kommandozeilentool dcop. Ohne Parameter zeigt es alle aktiven DCOP-fähigen Programme an. Mit dem Namen einer Applikation aufgerufen, zeigt dcop die Schnittstellen. Setzt der Benutzer dann noch eine Schnittstelle als zweiten Parameter hinter den dcop-Aufruf, sieht er alle Funktionen (siehe Abbildung 2).

Abbildung 2: Das Kommandozeilenprogramm dcop zeigt alle Programme, ihre Schnittstellen und deren Funktionen in einem Terminal an. Es lässt sich für kurze Shell-Skripte wunderbar verwenden.

Ein simples Beispiel verdeutlicht die Syntax von dcop: Der Aufruf dcop kwin KWinInterface setCurrentDesktop 2 befördert den Benutzer direkt auf den zweiten virtuellen Desktop.

dcop lässt sich ideal mit Programmen wie dem Wecker KAlarm verknüpfen. Um den Rechner zu einer festen Uhrzeit herunterzufahren, genügen folgende Schritte: In KAlarm eine neue Erinnerung erstellen und dann als Aktion Befehl auswählen. Dort trägt der Benutzer dann dcop ksmserver ksmserver logout 0 2 2 ein.

Die letzten drei Zahlen sind nicht willkürlich, sondern stehen für die Enumeratoren ShutdownConfirm, ShutdownType und ShutdownMode. Tabelle 1 erklärt die verschiedenen Optionen.

Tabelle 1: Die Parameter der Logout-Funktion

ShutdownConfirm
-1 Einstellungen aus dem Kontrollzentrum beachten
0 Ohne Bestätigung herunterfahren
1 Mit Bestätigung herunterfahren
ShutdownType
-1 Letzte Einstellung verwenden
0 Nur Abmelden
1 Abmelden und neustarten
2 Abmelden und herunterfahren
ShutdownMode
-1 Einstellungen aus dem Kontrollzentrum beachten
0 Neustarten, sobald alle aktiven KDE Sitzungen beendet sind
1 Nur herunterfahren, wenn keine Sitzungen aktiv sind, sonst nichts tun
2 Herunterfahren erzwingen
3 Benutzer per Dialogbox fragen, wie mit offenen Sitzungen verfahren werden soll

Office Scripting mit Python

Auch die Programme des KDE Office-Paketes KOffice lassen sich mit DCOP steuern. Dabei ist der Programmierer nicht auf C++ oder das Hilfsprogramm dcop festgelegt. Es gibt native Bindings für C, Perl, Python und sogar Ruby. Die nachfolgenden Beispiele verwenden die Bindungen für Python. Einer Einführung in diese Sprache widmet sich ein eigener Artikel ab Seite 30 in diesem Heft.

Um die Beispiele nachzuvollziehen, müssen die DCOP-Bindings installiert sein. Unter Debian heißt das Paket python-dcop, unter Suse kdebindings3-python.

Nach dem Start der Tabellenkalkulation KSpread zeigt der KDCOP-Browser eine verwirrende Vielfalt von Schnittstellen an. Am interesantesten für das Scripting ist die Default-Schnittstelle KoApplicationIface, die für alle KOffice-Programme identisch arbeitet.

Sie bietet Zugriff auf Dokumente, Ansichten und Fenster und verfügt mit dem createDocument-Aufruf zusätzlich noch über die Möglichkeit, neue Dokumente zu erstellen. Als Argument erwartet diese Funktion einen gültigen MIME-Type, zum Beispiel application/x-kspread für ein Tabellendokument. Dieser Aufruf ist bisweilen mit Vorsicht zu genießen: Ein ungültiger Parameter beendet die Applikation, ohne vorher Änderungen zu speichern. Dieses Fehlverhalten ist in der Entwicklerversion von KOffice aber bereits behoben.

Der gesamte Aufruf mit dem dcop-Kommandozeilentool lautet für KSpread:

dcop kspread-12422 KoApplicationIface createDocument application/x-kspread

Dabei steht 12422 für die Prozess-ID, unter die angesprochene Instanz von KSpread läuft. Die folgenden Zeilen machen erledigen das gleiche in Python:

import pcop
import pydcop
app = pydcop.anyAppCalled("kspread")
if app:
  app.default.createDocument("application/x-kspread")
else:
  print "KSpread läuft nicht!"

Die beiden Import-Anweisungen bringen Python die DCOP-Funktionen bei. Danach sucht der anyAppCalled-Befehl nach der ersten auffindbaren KSpread-Instanz und verwendet die Standard-Schnittstelle.

Falls das Skript kein laufendes KSpread findet, bleibt app leer, was zu einer entsprechenden Fehlermeldung führt. Anderenfalls ruft es das Interface und darin die DCOP-Funktion mit entsprechenden Parametern auf. Das funktioniert, weil Python wie die meisten anderen Skriptsprachen zur Laufzeit DCOP-Module und -Methoden in ihre Python-Äquivalente umwandelt.

Leider hapert es mit der Dokumentation der DCOP-Schnittstellen. Daher hat der Autor dieses Artikels unter [2] eine Auflistung der wichtigesten Schnittstellen erstellt.

LinuxCommunity kaufen

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

Deutschland

Ähnliche Artikel

  • K-Splitter
  • Eigene Aktionen in Quanta definieren
    Ewig wiederkehrende Arbeitschritte sind der Alptraum jedes Web-Designers. Quantas benutzerdefinierte Aktionen erlauben es, den HTML-Editor perfekt an die eigenen Bedürfnisse anzupassen und viele Vorgänge zu automatisieren. Wir zeigen, was die aktuelle Version an Skripting-Möglichkeiten bietet und worauf sich HTML-Künstler in der nächsten Quanta-Release freuen können.
  • Das KDE-Office
    Mit Ausdauer arbeiten die KOffice-Entwickler an der ersten fertigen Version für KDE 4. Die LinuxCommunity hat sich die letzte Woche veröffentlichte Beta-5-Version genauer angeschaut.
  • K-splitter
  • Schnelles Office-Paket des KDE-Desktop
    Büro-Software abseits von OpenOffice hat unter Linux einen schweren Stand. Doch die Entwickler von KOffice lassen sich von diesem Umstand nicht abschrecken. Dieser Artikel zeigt, was das KDE-Büropaket mit dem Sprung zur Version 1.4 erreicht hat.
Kommentare

Infos zur Publikation

LU 10/2016: Kryptographie

Digitale Ausgabe: Preis € 0,00
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Aktuelle Fragen

Soundkarte wird erkannt, aber kein Ton
H A, 25.09.2016 01:37, 6 Antworten
Hallo, Ich weiß, dass es zu diesem Thema sehr oft Fragen gestellt wurden. Aber da ich ein Linu...
Scannen nur schwarz-weiß möglich
Werner Hahn, 20.09.2016 13:21, 2 Antworten
Canon Pixma MG5450S, Dell Latitude E6510, Betriebssyteme Ubuntu 16.04 und Windows 7. Der Canon-D...
Meteorit NB-7 startet nicht
Thomas Helbig, 13.09.2016 02:03, 3 Antworten
Verehrte Community Ich habe vor Kurzem einen Netbook-Oldie geschenkt bekommen. Beim Start ersch...
windows bootloader bei instalation gelöscht
markus Schneider, 12.09.2016 23:03, 1 Antworten
Hallo alle zusammen, ich habe neben meinem Windows 10 ein SL 7.2 Linux installiert und musste...
Ubuntu 16 LTE installiert, neustart friert ein
Matthias Nagel, 10.09.2016 01:16, 3 Antworten
hallo und guten Abend, hab mich heute mal darangewagt, Ubuntu 16 LTE parallel zu installieren....