Scripting onder KDE met DCOP

Auteurs: Rinse de Vries en Fabrice Mous
Herziening 0.4
Copyright © 2004 KDE-nl team

DCOP is een communicatie-protocol tussen verschillende processen binnen KDE wat via sockets opereert. DCOP is een zeer krachtige, maar ook eenvoudige manier om KDE-toepassingen te manipuleren. We laten je zien hoe je DCOP kunt aanspreken via de commandoprompt en via de grafische interface kdcop.

DCOP via kdcop

kdcop bevindt zich in het KDE-pakket kdebase en levert een comfortabele boomstructuur met alle opties die de KDE-toepassingen op dat moment draaien bieden. kdcop ondersteunt drag-n-drop, zodat je in kdcop een bepaald commando kunt opzoeken en vervolgens verslepen naar bijv. kwrite om hem in je script te plaatsen.

We hebben ons als taak gesteld een url openen met Konqueror. Je start eerst kdcop op. Zoek Konqueror op in de lijst van toepassingen die DCOP je nu laat zien. Klik op konqueror en je zult alle interfaces zien waarover Konqueror beschikt via DCOP. Een van deze interfaces heet KonquerorIface(standaard). Klik op dit item om de beschikbare methoden te zien te krijgen.

./dcop1.png
KDCOP in actie...

Ongeveer halverwege de lijst van methoden dien je de volgende methode aan te klikken createNewWindow(QString url). Dubbelklik erop en je zult een prompt zien verschijnen wat je vraagt een URL-adres in te voeren. Vul hier een URL-adres naar keuze in (zoiets als http://www.kde.nl) en zie daar je hebt je eerste DCOP-aanroep gemaakt.

We laten nog een voorbeeld zien waarbij we JuK, KAlarm en uiteraard DCOP gebruiken. We stellen ons als taak dat we 's ochtends gewekt willen worden met muziek.

Start KAlarm op, kies via het menu Acties de menu-ingang Nieuw. Hiermee kun je een nieuwe herinnering aanmaken. Wij kiezen als actie de optie Commando. Start nu JuK op. Zoek in de lijst van de DCOP-browser 'juk' op. Versleep vervolgens juk->Player->void play() naar het venster van KAlarm. De tekst dcop juk Player play zal verschijnen. Nou zal JuK beginnen te spelen op het tijdstip dat je KAlarm meegegeven hebt.

Je kunt deze DCOP-aanroepen ook naar een console slepen waar je dan het commando kunt lezen.

Zo'n DCOP-aanroep is ook handig om te gebruiken binnen een snelkoppeling op je bureaublad. Dit doe je als volgt: klik met de rechter muisknop op het bureaublad bureablad -> Nieuw aanmaken -> Bestand -> Koppeling naar toepassing -> Vul bij tablad Uitvoeren de betreffende DCOP-aanroep in.

DCOP via de commando-prompt

dcop [ toepassing [object [functie [arg1] [arg2] [arg3] ... ] ] ]

Hierboven staat de syntaxis waarmee je met draaiende KDE-processen kunt 'praten', en ze instructies sturen. Om een lijst met geschikte draaiende processen te openen typ je het volgende commando in:

dcop

Dit is dan bijv. de uitvoer:

kwin
kicker
konqueror-3593
kmail
kdesktop
konqueror-10463
konqueror-6997
klipper
konsole-23221
ksmserver

Merk op dat sommige toepassingen een procesnummer achter hun naam hebben staan. Van deze toepassingen draaien dus meerdere instanties en wordt er een PID opgegeven om ze uit elkaar te houden.

Uit deze lijst pakken we nu een toepassing om mee te praten. In ons eerste voorbeeld gaan we kmail gebruiken.

Typ het volgende in een terminalvenster:

dcop kmail

Dit is dan de uitvoer:

qt
KIO::Scheduler
KMailIface (default)
html-widget1
kmail
kmail-mainwindow
ksycoca

Dit zijn de afzonderlijke onderdelen van kmail waarmee je kunt communiceren. We pikken hier de standaard-interface uit om verder mee te praten.

Typ het volgende in een terminal:

dcop kmail KMailIface

Nu krijgen we deze uitvoer:

QCStringList interfaces()
QCStringList functions()
void checkMail()
QStringList accounts()
void checkAccount(QString account)
void openReader()
int openComposer(QString to,QString cc,QString bcc,QString subject,QString body,int hidden,KURL messageFile)
int openComposer(QString to,QString cc,QString bcc,QString subject,QString body,int hidden,KURL messageFile,KURL attachURL)
int openComposer(QString to,QString cc,QString bcc,QString subject,QString body,int hidden,QString attachName,QCString attachCte,QCString attachData,QCString attachType,QCString attachSubType,QCString) attachParamAttr,QString attachParamValue, QCString attachContDisp)
DCOPRef openComposer(QString to,QString cc,QString bcc,QString subject,QString body,bool hidden)
int sendCertificate(QString to,QByteArray certData)
void compactAllFolders()
int dcopAddMessage(QString foldername,QString messagefile)
int dcopAddMessage(QString foldername,KURL messagefile)

Dit is een lijst met syntaxises die je kunt gebruiken om KMail een bepaalde opdracht te laten uitvoeren. We gaan hier eentje uitlichten waarmee je op e-mail kunt controleren. Merk op dat ik voor het gemak in het commando de variabele KMailIface heb vervangen door default, welke tussen haakjes in de uitvoer van bovenstaand dcop-commando staat.

Door het volgende in de terminal in te tikken zal KMail controleren op nieuwe e-mail:

dcop kmail default checkMail

Nog een voorbeeld. In bovenstaande uitvoer zie je het volgende staan:

int openComposer(QString to,QString cc,QString bcc,QString subject,QString body,int hidden, KURL messageFile)

Deze optie opent dus een venster van kmail voor een nieuw e-mailbericht met daarin alvast de opgegeven informatietekst.

We gaan de syntaxis even vervangen door een bruikbare tekst:

dcop kmail default openComposer "rinse@kde.nl" "" "" "DCOP binnen KDE is geweldig"
"Met zoveel mogelijkheden binnen KDE valt er nog maar weinig te wensen" "" ""

Merk op dat we alle opties van de syntaxis moeten gebruiken, anders werkt het commando niet. Lege velden (bijv. die voor CC en BCC) maken we aan door gebruik te maken van lege aanhalingstekens. Druk nu op Enter en KMail opent een venster voor een nieuw e-mailbericht, waarbij de geadresseerde en het e-mailbericht reeds zijn ingevuld.

DCOP gebruiken in scripts

Misschien hebben een aantal van jullie al de magie gevoeld van DCOP. We zullen nu twee hele simpele voorbeelden laten zien hoe je DCOP kunt gebruiken binnen scipts.

Desktop viewer

#!/bin/bash
while true;
do
dcop kwin KWinInterface nextDesktop
 sleep 4
done

Googlesearch

#!/bin/bash
selected=`dcop klipper klipper getClipboardContents`
konqueror http://www.google.nl/search?q=$selected &
exit

Enkele opties om nog wat verder mee te oefenen

dcop kwin default setCurrentDesktop 4

Ga naar bureaublad 4

dcop kmail default compactAllFolders

Laat KMail alle mappen comprimeren

dcop kdesktop default logout

Afmelden

dcop konqueror default openBrowserWindow www.kde.nl

Open een nieuw Konqueror-venster met www.kde.nl

dcop kmail kmail-mainwindow#1

Geef een lijst met functies om het hoofdvenster van kmail te manipuleren.

dcop kmix Mixer0 setMasterVolume 80

Zet het volume op 80%

dcop kscd CDPlayer play

Begin met het afspelen van een audio-cd

Laatste twee opties zijn via DCOP eenvoudig te koppelen aan multimediatoetsen op je toetsenbord via bijvoorbeeld Xmodmap.

Kijk voor meer informatie over DCOP op http://developer.kde.org/documentation/library/kdeqt/dcop.html

Licenties en verdiensten

Het is toegestaan dit document te kopi�en, te verdelen en/of te wijzigen onder de voorwaarden van de GNU vrije-documentatielicentie, versie 1.1 of een latere versie gepubliceerd door de Free Software Foundation; zonder invariante paragrafen, zonder vooromslagteksten, en zonder achteromslagteksten.

Over deze site | Laatst gewijzigd: 19 februari 2004, 07:38 door: Fabrice Mous