Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Dev-dcop


Présentation de DCOP

Présentation de DCOP
par Teotihuacan
Ceci est une courte présentation de DCOP.

Présentation

DCOP (Desktop COmmunication Protocol) est un service interne à KDE permettant de communiquer avec les applications KDE. Vous allez donc pouvoir communiquer avec ces applications grâce à votre shell. Cela inclut la récupération d'informations, ou la demande d'exécution d'actions à ces applications.

Par exemple, piloter le mixer avec les boutons de votre clavier, piloter kmail depuis un script shell, etc.

DCOP est intégré aux librairies de KDE. Vous n'avez pas à vous soucier de l'installation et de la configuration de DCOP. Si vous avez installé Kdelib (une version au moins égale à 2.0) sur votre distribution, il se lancera automatiquement.

Les programmeurs d'une application KDE ne sont pas obligés d'utiliser DCOP. Mais cela constitue certainement un plus. Pour une application, un programmeur aura donné la possibilité à l'utilisateur de faire un certain nombre d'appels.

Quant à la nature des appels DCOP que l'utilisateur final pourra faire à partir de son shell, il s'agit ni plus ni moins que de fonctions, avec tout ce que cela implique : une fonction a un nom, des arguments et un résultat. L'utilisateur fera appel à la fonction grâce au nom de la fonction, et en fonction des arguments qu'il aura entré, la fonction lui retournera un résultat. Ce résultat peut être une information affichée et/ou une action que va effectuer le programme.

Note : KDE 4 remplacera DCOP par DBUS, une technologie similaire, dans un but d'interopérabilité avec les autres environnements (GNOME...).

Utilisation

Nous allons ici aborder la façon dont l'utilisateur va pouvoir communiquer avec le service DCOP à partir de son shell. L'utilisation de DCOP est très simple, elle se fait par la commande dcop.

La syntaxe pour faire un appel à une fonction est la suivante :

$ dcop APPLICATION INTERFACE FONCTION ARGUMENTS
Avec APPLICATION : C'est le nom de l'application que l'on vise.
INTERFACE : Les fonctions DCOP d'une application sont regroupées par interface.
FONCTION : C'est le nom de la fonction que l'on souhaite appeler.
ARGUMENTS : Ce sont les arguments que l'on souhaite passer à la fonction. Il peut y en avoir un, plusieurs ou aucun. S'il y a plusieurs arguments, il suffit de les séparer par un espace.

Mais heureusement, vous n'êtes pas obligés de connaître toutes ces informations par cœur.

  • Si vous entrez juste dcop, vous obtiendrez la liste des applications qui ont ouvert une interface DCOP.
  • dcop possède aussi un frontend graphique : kdcop. Lancez-le afin de piloter les autres applications (voir plus bas).
  • Si vous entrez alors dcop APPLICATION, vous obtiendrez la liste des interfaces DCOP disponibles pour cette application. Les applications sont désignées par leur nom.
  • Si vous entrez maintenant dcop APPLICATION INTERFACE, vous obtiendrez la liste des fonctions qui sont à votre disposition pour cette interface. Et pour chaque fonction, vous obtiendrez le type de résultat auquel vous devez vous attendre et les arguments nécessaires pour la fonction : c'est le prototype de la fonction. Il se présente sous la forme : TYPE_RETOURNÉ NOM_FONCTION(TYPE_DES_ARGUMENTS).
Certaines applications peuvent avoir plusieurs instances, par exemple Konqueror et Kwrite, Pour désigner l'application avec dcop, il faut faire suivre le nom de l'application d'un tiret et de son PID. Ainsi, dans la liste des applications accessibles par DCOP, on pourra retouver un "konqueror-7327" et un "konqueror-5837" par exemple.

Exemple

Maintenant que je vous ai présenté le fonctionnement basique de DCOP, il est temps de passer à la pratique avec un exemple.

utilisation avec kwin

Ouvrez une console sur KDE.

Entrer la commande dcop pour afficher la liste des applications accessibles. Vous obtiendrez alors une liste telle que celle-ci :

$ dcop
KWeatherService
konsole-7205
kwin
kicker
amarok
kded
knotify
kio_uiserver
kcookiejar
konqueror-7327
rssservice
korgac
konsole-7165
klauncher
khotkeys
kopete
kdesktop
korn
klipper
ksmserver
konqueror-5837

Pour utiliser une application que tout le monde a, essayons avec KWin (le gestionnaire de fenêtres de KDE). Affichons maintenant les interfaces DCOP ouvertes pour KWin :

$ dcop kwin
qt
KWinInterface (default)
MainApplication-Interface

Voyons alors les fonctions de "KWinInterface" :

$ dcop kwin KWinInterface
QCStringList interfaces()
QCStringList functions()
ASYNC cascadeDesktop()
ASYNC unclutterDesktop()
ASYNC reconfigure()
ASYNC killWindow()
void refresh()
void doNotManage(QString)
void showWindowMenuAt(unsigned long int winId,int x,int y)
void setDesktopLayout(int orientation,int x,int y)
bool setCurrentDesktop(int)
int currentDesktop()
void nextDesktop()
void previousDesktop()
void circulateDesktopApplications()

Intéressons-nous dans un premier temps à la fonction int currentDesktop(). Pour ceux qui ne sont pas habitués à ce type de syntaxe (que l'on retrouve en C par exemple), le int représente le résultat de la fonction. Là, c'est un entier. Entre les parenthèses, il n'y a rien, ça veut donc dire qu'il n'y a pas d'argument à transmettre à la fonction. Il ne reste plus qu'à tester :

$ dcop kwin KWinInterface currentDesktop
4

La fonction m'a donc retourné un 4. Il n'y a pas de description pour cette fonction, mais son nom est assez explicite : on imagine bien qu'elle m'a renvoyé le numéro du bureau sur lequel j'étais, en l'occurence le bureau 4.

Essayons maintenant la fonction void nextDesktop() de cette même interface. Le void au début m'informe que cette fonction ne renvoie rien. Je m'attends donc à ce que l'appel de cette fonction effectue une action plutôt que de renvoyer une information. Ainsi, en entrant la commande :

$ dcop kwin KWinInterface nextDesktop

Je me retrouve sur le bureau suivant, dans mon cas soit le 5, soit le 1 (les bureaux tournent en boucle, si le 4 est mon dernier, je reviens au 1). Encore une fois, le nom de la fonction est assez explicite.

Essayons maintenant une fonction avec un argument : bool setCurrentDesktop(int). Comme vous l'imaginez, cette fonction va permettre d'afficher le bureau que l'on souhaite. Le bool au début m'informe que la fonction va me renvoyer un booléen, soit VRAI (true) ou FAUX (false). Vraisemblablement, le "VRAI" est obtenu si le changement a pu s'effectuer. Entre les parenthèses, il y a cette fois un int, c'est l'argument que l'on doit donner à la fonction. Ici, c'est donc un entier. Vous imaginez bien que cet entier va représenter le bureau que l'on souhaite afficher. Ainsi, pour afficher le bureau 2 :

$ dcop kwin KWinInterface setCurrentDesktop 2

amarok

Amarok LE lecteur de musique pour KDE est pratiquement entièrement controlable via l'interface DCOP. Voici quelques exemples.

On vide la playlist d'Amarok : $ dcop amarok playlist clearPlaylist On ajoute tous les fichiers ogg à la playlist : $ for i in *.ogg ; do dcop amarok playlist addMedia file:`pwd`/$i ; done PS: on utilise ici une facilité du shell qui permet de remplacer une commande par le résultat de son exécution `pwd` (attention, ce sont bien des apostrophes inverses obtenues par ALTGR+7). Cette syntaxe est désormais rendue désuette par son nouvel homologue: $(commande).

On joue la piste 5 de la playlist : $ dcop amarok playlist playByIndex 5

Et caetera !

KDCOP

KDCOP est une application KDE qui répertorie toutes les entrées DCOP actives. Vous pouvez vous y référer pour visualiser facilement les appels que vous pouvez faire. Cette application est accessible en lançant la commande kdcop.

En plus de visualiser la liste des entrées possibles, vous pouvez y faire directement vos appels.

Dcop-dcop kdcop.png
KDCOP en action

Application

Vous allez pouvoir utiliser les possibilités de DCOP à plusieurs niveaux :

  • Vous allez pouvoir inclure ce genre de communication dans vos propres applications KDE. Pour cela, je vous renvoie à La Documentation de l'API.
  • Cela vous permet d'étendre les possibilités de vos scripts en pilotant les applications KDE. Par exemple, pour Amarok (lecteur multimédia de KDE), rien ne vous empêche de créer un script qui, en fonction du pourcentage de la piste lue, revient soit au début de la chanson, soit à la chanson précédente. Ça peut aussi être utilisé quand on configure les touches multimédia de son clavier.
  • Kommander : c'est une application qui permet à partir d'une interface de lier des commandes shell. Kommander est une application qui repose beaucoup sur DCOP, car la communication entre les différents composants de l'interface est assurée par DCOP. Pour plus de détails, je vous renvoie à la page de Kommander sur KDE-Apps.org.

Kommander

Kommander est un environnement de développement vous permettant de dessiner à la souris une interface graphique, de les lier entre eux, et disposant d'un langage de script simple.

Il prend toute sa puissance par son utilisation intensive de DCOP. Une application développée avec Kommander peut être entièrement dirigée depuis "l'extérieur". Un script shell peut modifier la valeur d'un champ, d'une checkbox, lancer un script de l'application, etc.

Vous pouvez également faire un tas d'interfaces graphiques qui commandent d'autres applications KDE avec dcop, en utilisant Kommander.

Kommander permet de réaliser très rapidement des applications KDE.

Pour des exemples d'applications réalisées avec Kommander, voir sa catégorie sur kde-apps.org. Voir aussi un exemple sur Léa.

Sources

IBM Developperwork : DCOP



@ Retour à la rubrique Développement


Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Teotihuacan le 29/12/2004.

Copyright

© 29/12/2004-2006 Teotihuacan et Jice

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
Views
Jump to: navigation, search
Personal tools

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA