Home / LinuxUser / 2005 / 02 / Aufgabenautomatisierung in KDE mit DCOP

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

KDE Plasma Workspaces 4.8
(306 Punkte bei 32 Stimmen)
SUSE12
(173 Punkte bei 4 Stimmen)
Pardus Linux am Ende?
(164 Punkte bei 4 Stimmen)
OpenSuse 12.1-Service Kit 01/12
(161 Punkte bei 4 Stimmen)
Meinst Du: Patch CD Updates?
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Sprich mit mir

Aufgabenautomatisierung in KDE mit DCOP

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

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

861 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2012_02

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Knoppix: Bootvorgang mit Cheatcode beschleunigen
Knoppix: Bootvorgang mit Cheatcode beschleunigen
Marcel Hilzinger, 18.01.2012 21:05, 0 Kommentare

Die Bootsequenz der Live-Distribution sucht beim Start zunächst auf Festplatten, dann auf USB-Sticks und erst dann in den DVD-Laufwerken (/dev/sr* oder /dev/scd*) nac...

Aktuelle Fragen

OpenSuse 12.1-Service Kit 01/12
Christoph-J. Walter, 28.01.2012 08:52, 2 Antworten
Hallo Gemeinde, ich habe 12.1 neu installiert. Alles in Ordnung! Nun möchte ich das Service Kit (...
Ubuntu 11.10 konfigurieren
Michael Hinz, 27.01.2012 17:52, 0 Antworten
Ubuntu läuft bei mir. Allerdings nur, wenn die Daten-CD eingelegt ist. Unabhängig von Bios-Einste...
SUSE12
Jörg Müller, 25.01.2012 14:27, 5 Antworten
Hallo Gemeinde Ich habe schon ziemlich lange auf einem Rechner Linux laufen, bin also nicht ganz...
Hat jemand Erfahrung beim Einsatz einer Kinect / OpenNI?
GoaSkin , 24.01.2012 23:35, 0 Antworten
Hallo, ich habe mir eine Kinect zugelegt, um zu schauen, was man damit unter Linux so machen k...
Kollaboration - Zeichnen auf mehreren Geräten gleichzeitig
Ludwig jun. B., 19.01.2012 11:17, 4 Antworten
Schönen guten Tag, ich suche aktuell eine Software für Linux/Windows (eines von beiden), welch...