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