Bruxelles Linux User Group : BxLUG

Une culture numérique logo copyleft à Bruxelles.

CLI Session #003 - les menus des environnements de bureau - deuxième partie

comment se débrouiller avec la ligne de commande dans les menus des GUIs

Dans la première partie de la session du dimanche LCP virtuelle, nous avons vu comment s’y retrouver dans des menus d’un environnement de bureau à partir de la ligne de commande, sans aucune aide un programme quelconque, comment sont organisés les infos qui sont affichées dans les menus et où sont-elles stockées (cf. CLI Session #002 - les menus des environnements de bureau).

Dans cette seconde partie, nous allons aborder l’aspect recherche à partir des fichiers .desktop et personnalisation des menus.

Recherche en partant des menus et des fichiers .desktop

Partant d’une entrée de menu qui affiche le nom "Terminal", comment puis-je retrouver les informations relatives à ce point dans le menu ?

Nous avons vu dans la première partie que les infos des entrées de menu sont stockées dans des fichiers .desktop et que le répertoire standard du système dans lequel se trouvent ces fichiers est le répertoire /usr/share/applications.

Si l’entrée du menu affiche "Terminal" comme nom, nous allons retrouver facilement la définition de cette entrée grâce à la commande grep qui permet de rechercher du texte dans un fichier. En reprenant la spec, nous savons que le nom se trouve associé à la clé Name=

Il suffit donc de faire une recherche pour savoir où se trouve le texte Name=Terminal ou Name[fr]=Terminal (la clé "localisée" en français) dans les fichiers .desktop du répertoire /usr/share/applications.

$ grep -e ^Name=Terminal -e '^Name\[fr\]=Terminal' /usr/share/applications/*.desktop
/usr/share/applications/exo-terminal-emulator.desktop:Name=Terminal Emulator
/usr/share/applications/org.gnome.Terminal.desktop:Name[fr]=Terminal
/usr/share/applications/org.gnome.Terminal.desktop:Name=Terminal

L’entrée du menu est donc décrite dans le fichier /usr/share/applications/org.gnome.Terminal.desktop

Si on veut voir dans ce fichier quelle est la commande lancée par cette entrée de menu, on recherche le texte Exec=

$ grep ^Exec= /usr/share/applications/org.gnome.Terminal.desktop
Exec=gnome-terminal

gnome-terminal est donc la commande lancée par cette entrée de menu.

Où se trouve la commande que je lance ?

Une question s’est posée pour savoir où se trouve la commande gnome-terminal.

La solution est la commande which :

$ which gnome-terminal
/usr/bin/gnome-terminal

Une autre possibilité pour retrouver le fichier qui contient le binaire ou les commandes est d’utiliser les commandes find ou locate.

Le soucis, c’est que ces commandes ne prennent pas en compte la variable PATH qui donne la liste des répertoires ainsi que l’ordre dans lequel il faut chercher dans ces répertoires pour retrouver une commande.

Un exemple valant mieux que 10 explications, voyons comment PATH influence notre système.

Sur mon ordi, la viariable PATH contient ceci :

$ echo $PATH
/home/foo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin

Ou, affiché sur plusieurs lignes pour plus de lisibilité, ceci :

$ echo "${PATH//:/$'\n'}"
/home/foo/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
/usr/sbin

Ce qui veut dire que lorsque je tape une commande, mon système ira voir s’il la trouve d’abord dans le répertoire /home/foo/bin, puis dans /usr/local/bin, puis dans /usr/bin, et ainsi de suite.

Donc, si je place une commande voire un script exécutable dans mon répertoire /home/foo/bin, je vais influencer la sortie de la commande which :

$ touch /home/foo/bin/gnome-terminal && chmod u+x /home/foo/bin/gnome-terminal
$ which gnome-terminal
/home/foo/bin/gnome-terminal

Personnalisation

Un dernier mot pour terminer sur la personnalisation des menus.

Pour connaître les répertoires standards utilisés par la spécification XDG, vous pouvez vous référer à cette page :
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

Elle décrit, entre autre, où trouver les infos personnalisées.

Les données perso, comme les entrées de menu par exemple, se trouvent dans le répertoire dont le nom figure dans la variable $XDG_DATA_HOME ou, si cette variable est vide, dans le répertoire $HOME/.local/share à la place du répertoire standard /usr/share.

Les fichiers .desktop se trouvant dans le répertoire /usr/share/applications, vos entrées perso se trouveront dans le répertoire $HOME/.local/share/applications.

Pour faire un exercice, on crée le répertoire s’il n’existe pas, on y copie un fichier .desktop et on édite ce fichier pour changer le nom affiché :

$ mkdir -p .local/share/applications/
$ cp /usr/share/applications/org.gnome.Terminal.desktop .local/share/applications/
$ nano .local/share/applications/org.gnome.Terminal.desktop

Allez voir dans votre menu pour vérifier que le nouveau nom y figure bien.

Et n’oubliez pas d’effacer le fichier .local/share/applications/org.gnome.Terminal.desktop pour éviter les surprises !

Voilà, j’espère que ces deux petits tutos sur les entrées de menus vous seront un jour utiles.

Un message, un commentaire ?

Soutien vers nubo.coop

Prochainement :

 28 juin : Install party au Fij de Saint Gilles
 1er juillet : Atelier du Web - information sur Gnu/Linux
 8 juillet : Atelier du Web - information sur Gnu/Linux

Sur hackeragenda.be :
26 juin : Open Garage [opengarage]
24 juin : Open Tuesdays [brixel]
22 juin : Build safer applications: Using TypeScript with React Native & GraphQL [reactjs_belgium]