URL:
https://linuxfr.org/news/lidecli-un-outil-en-ligne-de-commande-pour-interagir-avec-les-environnements-de-bureau
Title: Lidecli : Un outil en ligne de commande pour interagir avec les environnements de bureau
Authors: JulienPro
Julien Jorge, Benoît Sibaud et Ysabeau
Date: 2023-07-12T22:03:52+02:00
License: CC By-SA
Tags: ligne_de_commande
Score: 4
**Lidecli** - abréviation de **Linux Desktop CLI** - est un wrapper libre (MIT) développé en Python permettant de scripter plus facilement le positionnement de vos fenêtres quel que soit votre environnement de bureau. Habituellement, scripter ou automatiser le positionnement des fenêtres nécessite :
* l’utilisation d’outils bien connus (wmctrl, xprop, qdbus, xrandr, etc.),
* ou, pour certains environnements - du code (LUA pour AwesomeWM par exemple).
En d’autres termes, il n’existe pas vraiment de moyens « simples » permettant de scripter à sa guise son environnement. Lidecli agit comme un _wrapper_ qui simplifie grandement cette tache.

----
[Lidecli sur Github](
https://github.com/juienpro/lidecli)
[Commandes supportées](
https://lidecli.com)
----
## Lidecli par l’exemple ##
* Vous souhaitez donner le focus à votre terminal via un raccourci-clavier configuré au niveau de votre environnement ?
`lidecli.py x-focus-name Terminal`
* Vous voulez mettre votre navigateur web en plein écran ?
`lidecli.py x-set-win-name-fullscreen Firefox`
* Vous souhaitez déplacer votre navigateur web sur votre second moniteur ?
`lidecli.py x-move-win-name-screen Firefox 2`
* Vous souhaitez changer l’opacité de votre terminal à 80% ?
`lidecli.py x-set-win-name-opacity Terminal 80`
* Vous avez l’habitude d’ouvrir plusieurs VSCode et souhaitez pouvoir basculer de l’un à l’autre via des raccourcis-clavier ?
```
lidecli.py x-focus-name-nth "Visual Studio" 1
lidecli.py x-focus-name-nth "Visual Studio" 2
lidecli.py x-focus-name-nth "Visual Studio" 3
```
Il vous suffit d’associer - dans votre environnement de bureau - ces commandes à des raccourcis-clavier, et le tour est joué !
## Plus de 160 commandes disponibles ##
L’outil est livré avec plus de 160 commandes qui peuvent être affichées en tapant :
`lidecli.py -l`
Chaque commande possède plusieurs **tags** (étiquettes), notamment pour mentionner quels outils sont nécessaires à son fonctionnement (_wmctrl_, _xprop_, etc.), les environnements de bureau compatibles le cas échéant, et si la commande est compatible **X** ou **Wayland**.
Il est possible de filtrer la liste des commandes en fonction des tags. Par exemple, `lidecli.py -l -t x11 -n kde` affichera la liste des commandes compatibles _X_ mais qui ne sont pas spécifiques à _KDE_.
Un autre moyen de consulter les commandes disponibles est de consulter le site de l’outil : [
https://lidecli.com](
https://lidecli.com)
Initialement, Lidecli a été développé pour KDE pour éviter les appels D-BUS, ce qui explique le nombre important de commandes dédiées à cet environnement de travail.
Mais Lidecli s’est ensuite étendu en utilisant les outils génériques de type _wmctrl_, et on peut donc l’utiliser quel que soit son environnement. À noter que le nombre de commandes pour Wayland semble pour le moment assez limité puisque le contrôle des fenêtres est dépendante du gestionnaire de fenêtres utilisé, contrairement à X ou l’architecture (et la sécurité) est différente.
## Un wrapper, mais aussi un framework
Lidecli est un _wrapper_/une surcouche qui fait appel aux binaires usuels dédiés au scripting des fenêtres et écrans. Mais il s’agit également d’un framework, puisqu’il est relativement simple d’ajouter de nouvelles commandes. En effet, l’intégralité des commandes sont enregistrées dans un fichier unique - db.py - contenu dans le repository.
Chaque commande est simple à définir : nom, description, tags, les arguments, et les commandes shell à exécuter.
Exemple de définition d’une commande simple permettant de fermer une fenêtre :
```
{
"name": "x-kill-win-name",
"description": "Kill a window specified by its name",
"forwarded_arguments": [
{ "name": "WinName", "description": "The part of the window name to kill"}
],
"command": "wmctrl -c #1#",
"versions_working": [("x11", "all")],
"versions_not_working": [],
"tags": ["x11", "windows", "wmctrl" ]
},
```
Il est également possible de faire appel à des _callbacks_ (en Python) pour analyser le résultat de certaines commandes shell. De la même façon, une nouvelle commande peut faire appel à du code Python et non des commandes shell, pour des cas plus complexes.
## Un outil pratique
L’idée de réaliser un outil unifié permettant de gérer ses fenêtres en ligne de commande semble intéressante. Même si des outils comme _wmctrl_ accomplissent des merveilles, certaines tâches sont parfois plus complexes et nécessitent le développement d’un script. Ce manque est comblé par _Lidecli_.
À titre d’exemple, pour déplacer une fenêtre d’un moniteur à un autre sans changer sa géométrie ni son positionnement relatif, il est nécessaire d’avoir la configuration des écrans (avec xrandr par exemple), puis de faire des calculs d’offset pour repositionner la fenêtre à l’endroit souhaité.
De la même façon, pour donner le focus à la 3^e fenêtre d’une application donnée (si vous avez 3 terminaux ouverts par exemple), il est possible de le faire avec _wmctrl_ seulement mais ce n’est pas trivial :
`wmctrl -lx |grep Terminal | cut -d ' ' -f1 | head -3 | tail -1 | xargs wmctrl -i -a`
Lidecli semble donc combler un manque et offrir la possibilité à tous - sans connaissances particulières - de scripter leur environnement de travail relativement aisément.
Enfin, si une communauté se développe autour de l’outil (diffusé sous license MIT), cela pourrait ouvrir la voie à une véritable bibliothèque pour gérer aisément la disposition des fenêtres en ligne de commande quel que soit son environnement.