Este es un pequeño artículo introductorio a DCOP. Se orienta más que nada al manejo de la utilidad dcop en la línea de comandos, con la idea de saber cómo usarla en scripts.
Las aplicaciones de KDE pueden comunicarse entre sí, usando un protocolo llamado DCOP (Desktop COmmunication Protocol).
Este protocolo creado cerca del año 2000 permite a una aplicación definir funciones que pueden ser llamadas desde otras aplicaciones que lo implementen.
La distribución de KDE incluye un programa llamado dcop, cuya función es enviar las señales correspondientes a los programas.
Si estando en KDE se ejecuta el comando dcop (en konsole, por ejemplo), se obtiene una salida como esta:
alvaro@alvlin:~$ dcop kwin kicker yakuake kded konsole-14822 kmix knotify klauncher khotkeys kmail kdesktop klipper ksmserver kaccess ktorrent basket
Es decir, una lista de los programas abiertos que implementan dcop. Creo que no es necesario aclarar que esta es la situación de mi sistema, y que puede ser (será) diferente en otros.
El proceso siguiente es ir agregando parámetros a dcop, empezando por el nombre de algún programa que apareciera en la lista anterior:
alvaro@alvlin:~$ dcop kmail qt KDebug KIMProxyIface KIO::Scheduler KMailICalIface KMailIface (default) KPIM::IdentityManager MailTransportServiceIface MainApplication-Interface ManagerIface_contact html-widget1 kmail kmail-mainwindow#1 ksycoca
Esta segunda lista es la lista de interfaces que el programa ofrece. Por lo general los nombres de estas interfaces son bastante descriptivos. La más interesante suele ser <NombredelPrograma>Iface (en este caso, KMailIface), de ahí que tenga el (default) (predeterminada), o MainApplication-Interface.
Probemos esta opción
alvaro@alvlin:~$ dcop kmail KMailIface QStringList accounts() void checkMail() QStringList accounts() void checkAccount(QString account) void openReader() int openComposer(…) void compactAllFolders() QStringList folderList() void selectFolder(QString folder)
Ahora aparecen en la pantalla las funciones implementadas en la interfaz, en la forma
[tipo de dato devuelto] [nombre de la función]([parámetros])
El proceso sigue igual: hay que escribir el nombre de la función y los parámetros que necesite. Estos parámetros no se escriben entre paréntesis, sino a continuación del nombre de la función.
Nota: En realidad el comando devuelve bastantes opciones más, pero para facilitar la lectura solamente se muestran los más importantes: accounts (cuentas), checkMail (revisar correo en todas las cuentas), compactAllFolders (compactar carpetas), etc.
Por ejemplo,
dcop kmail KMailIface checkMail
inicia la comprobación de correo en todas las cuentas.
Algunas opciones, sin embargo, requieren algo más de trabajo, ya que necesitan parámetros (checkAccount, por ejemplo).
Primero hay que obtener la lista de cuentas disponibles
alvaro@alvlin:~$ dcop kmail KMailIface accounts
cuenta1
cuenta2
cuentaN
Y con esos datos, ya se puede ejecutar la función:
alvaro@alvlin:~$ dcop kmail KMailIface checkAccount cuenta1
Como se ve, no tiene nada de complicado, y por lo tanto pueden automatizarse bastantes tareas desde la línea de comandos, o mejor aún, con scripts bash.










