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