« DCOP » : différence entre les versions
m (ajout de Kommander) |
|||
(6 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[ | [[Catégorie:Développement]] | ||
= Présentation de DCOP = | = Présentation de DCOP = | ||
Ligne 6 : | Ligne 7 : | ||
== Présentation == | == 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. | 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. | Par exemple, piloter le mixer avec les boutons de votre clavier, piloter kmail depuis un script shell, etc. | ||
Ligne 16 : | Ligne 17 : | ||
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. | 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 ( | '''Note''' : KDE 4 remplacera DCOP par DBUS, une technologie similaire, dans un but d'interopérabilité avec les autres environnements ([[GNOME]]...). | ||
== Utilisation == | == 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 <code>dcop</ | 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 <span class="code">dcop</span>. | ||
La syntaxe pour faire un appel à une fonction est la suivante : | La syntaxe pour faire un appel à une fonction est la suivante : | ||
Ligne 54 : | Ligne 55 : | ||
Mais heureusement, vous n'êtes pas obligés de connaître toutes ces informations par cœur. | Mais heureusement, vous n'êtes pas obligés de connaître toutes ces informations par cœur. | ||
* Si vous entrez juste <code>dcop</ | * Si vous entrez juste <span class="code">dcop</span>, vous obtiendrez la liste des applications qui ont ouvert une interface DCOP. | ||
* <code>dcop</ | * <span class="code">dcop</span> possède aussi un frontend graphique : <span class="code">kdcop</span>. Lancez-le afin de piloter les autres applications (voir plus bas). | ||
* Si vous entrez alors <code>dcop APPLICATION</ | * Si vous entrez alors <span class="code">dcop APPLICATION</span>, vous obtiendrez la liste des interfaces DCOP disponibles pour cette application. Les applications sont désignées par leur nom. | ||
* Si vous entrez maintenant <code>dcop APPLICATION INTERFACE</ | * Si vous entrez maintenant <span class="code">dcop APPLICATION INTERFACE</span>, 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 : <span class="code">TYPE_RETOURNÉ '''NOM_FONCTION('''TYPE_DES_ARGUMENTS''')'''</span>. | ||
<div class="alert">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.</div> | <div class="alert">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.</div> | ||
Ligne 69 : | Ligne 70 : | ||
Ouvrez une console sur KDE. | Ouvrez une console sur KDE. | ||
Entrer la commande <code>dcop</ | Entrer la commande <span class="code">dcop</span> pour afficher la liste des applications accessibles. Vous obtiendrez alors une liste telle que celle-ci : | ||
<div class="code">$ dcop<br /> KWeatherService<br /> konsole-7205<br /> kwin<br /> kicker<br /> amarok<br /> kded<br /> knotify<br /> kio_uiserver<br /> kcookiejar<br /> konqueror-7327<br /> rssservice<br /> korgac<br /> konsole-7165<br /> klauncher<br /> khotkeys<br /> kopete<br /> kdesktop<br /> korn<br /> klipper<br /> ksmserver<br /> konqueror-5837</div> | <div class="code">$ dcop<br /> KWeatherService<br /> konsole-7205<br /> kwin<br /> kicker<br /> amarok<br /> kded<br /> knotify<br /> kio_uiserver<br /> kcookiejar<br /> konqueror-7327<br /> rssservice<br /> korgac<br /> konsole-7165<br /> klauncher<br /> khotkeys<br /> kopete<br /> kdesktop<br /> korn<br /> klipper<br /> ksmserver<br /> konqueror-5837</div> | ||
Ligne 81 : | Ligne 82 : | ||
<div class="code">$ dcop kwin KWinInterface<br /> QCStringList interfaces()<br /> QCStringList functions()<br /> ASYNC cascadeDesktop()<br /> ASYNC unclutterDesktop()<br /> ASYNC reconfigure()<br /> ASYNC killWindow()<br /> void refresh()<br /> void doNotManage(QString)<br /> void showWindowMenuAt(unsigned long int winId,int x,int y)<br /> void setDesktopLayout(int orientation,int x,int y)<br /> bool setCurrentDesktop(int)<br /> int currentDesktop()<br /> void nextDesktop()<br /> void previousDesktop()<br /> void circulateDesktopApplications()</div> | <div class="code">$ dcop kwin KWinInterface<br /> QCStringList interfaces()<br /> QCStringList functions()<br /> ASYNC cascadeDesktop()<br /> ASYNC unclutterDesktop()<br /> ASYNC reconfigure()<br /> ASYNC killWindow()<br /> void refresh()<br /> void doNotManage(QString)<br /> void showWindowMenuAt(unsigned long int winId,int x,int y)<br /> void setDesktopLayout(int orientation,int x,int y)<br /> bool setCurrentDesktop(int)<br /> int currentDesktop()<br /> void nextDesktop()<br /> void previousDesktop()<br /> void circulateDesktopApplications()</div> | ||
Intéressons-nous dans un premier temps à la fonction <code>int currentDesktop()</ | Intéressons-nous dans un premier temps à la fonction <span class="code">int currentDesktop()</span>. Pour ceux qui ne sont pas habitués à ce type de syntaxe (que l'on retrouve en C par exemple), le <span class="code">int</span> 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 : | ||
<div class="code">$ dcop kwin KWinInterface currentDesktop<br /> 4</div> | <div class="code">$ dcop kwin KWinInterface currentDesktop<br /> 4</div> | ||
La fonction m'a donc retourné un <code>4</ | La fonction m'a donc retourné un <span class="code">4</span>. 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 <code>void nextDesktop()</ | Essayons maintenant la fonction <span class="code">void nextDesktop()</span> de cette même interface. Le <span class="code">void</span> 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 : | ||
<div class="code">$ dcop kwin KWinInterface nextDesktop</div> | <div class="code">$ dcop kwin KWinInterface nextDesktop</div> | ||
Ligne 93 : | Ligne 94 : | ||
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. | 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 : <code>bool setCurrentDesktop(int)</ | Essayons maintenant une fonction avec un argument : <span class="code">bool setCurrentDesktop(int)</span>. Comme vous l'imaginez, cette fonction va permettre d'afficher le bureau que l'on souhaite. Le <span class="code">bool</span> 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 <span class="code">int</span>, 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 : | ||
<div class="code">$ dcop kwin KWinInterface setCurrentDesktop 2</div> | <div class="code">$ dcop kwin KWinInterface setCurrentDesktop 2</div> | ||
Ligne 102 : | Ligne 103 : | ||
On vide la playlist d'Amarok : | On vide la playlist d'Amarok : | ||
<code | <span class="code">$ dcop amarok playlist clearPlaylist | ||
</ | </span> | ||
On ajoute tous les fichiers <code>ogg</ | On ajoute tous les fichiers <span class="code">ogg</span> à la playlist : | ||
<code | <span class="code">$ for i in *.ogg ; do dcop amarok playlist addMedia file:`pwd`/$i ; done | ||
</ | </span> | ||
'''PS:''' on utilise ici une facilité du shell qui permet de remplacer une commande par le résultat de son exécution <code>`pwd`</ | '''PS:''' on utilise ici une facilité du shell qui permet de remplacer une commande par le résultat de son exécution <span class="code">`pwd`</span> (attention, ce sont bien des apostrophes inverses obtenues par <key>ALTGR+7</key>). Cette syntaxe est désormais rendue désuette par son nouvel homologue: <span class="code">$(commande)</span>. | ||
On joue la piste 5 de la playlist : | On joue la piste 5 de la playlist : | ||
<code | <span class="code">$ dcop amarok playlist playByIndex 5</span> | ||
Et caetera ! | Et caetera ! | ||
Ligne 116 : | Ligne 117 : | ||
== KDCOP == | == 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 <code>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 <span class="code">kdcop</span>. | ||
En plus de visualiser la liste des entrées possibles, vous pouvez y faire directement vos appels. | En plus de visualiser la liste des entrées possibles, vous pouvez y faire directement vos appels. | ||
Ligne 132 : | Ligne 133 : | ||
== Kommander == | == Kommander == | ||
[http://kommander.kdewebdev.org/ | [http://kommander.kdewebdev.org/ 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. | 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. | ||
Ligne 140 : | Ligne 141 : | ||
Kommander permet de réaliser très rapidement des applications KDE. | Kommander permet de réaliser très rapidement des applications KDE. | ||
Pour des exemples d'applications réalisées avec Kommander, voir sa [http://kde-apps.org/index.php?xcontentmode=288 | Pour des exemples d'applications réalisées avec Kommander, voir sa [http://kde-apps.org/index.php?xcontentmode=288 catégorie sur kde-apps.org]. Voir aussi [[Trucs:Utiliser les boutons de son scanneur#KScannerButtons|un exemple sur Léa]]. | ||
== Sources == | == Sources == | ||
[http://www-106.ibm.com/developerworks/linux/library/l-dcop/?ca=dgr-kdeml01KDEDCOP IBM Developperwork : DCOP] | [http://www-106.ibm.com/developerworks/linux/library/l-dcop/?ca=dgr-kdeml01KDEDCOP IBM Developperwork : DCOP] | ||
<br/> | |||
<br/> | |||
'''<b>[[Dev-index|@ Retour à la rubrique Développement]]</b>''' | |||
<br/> | |||
<div class="merci">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.</div> | <div class="merci">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.</div> | ||
{{Copy|29/12/2004|Teotihuacan|CC-BY-NC-SA}} | {{Copy|29/12/2004-2006|Teotihuacan et [[Utilisateur:LeaJice|Jice]]|CC-BY-NC-SA}} |
Dernière version du 1 décembre 2023 à 17:47
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 :
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).
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 :
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 :
qt
KWinInterface (default)
MainApplication-Interface
Voyons alors les fonctions de "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 :
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 :
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 :
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 <key>ALTGR+7</key>). 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.
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
@ Retour à la rubrique Développement
Copyright
© 29/12/2004-2006 Teotihuacan et Jice
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/ |