Créer des lanceurs GNOME personnalisés avec actions rapides et rechargement à chaud¶
Résumé
Apprenez à intégrer vos scripts, outils en ligne de commande (CLI), démons d'arrière-plan ou conteneurs Docker directement dans le menu d'applications et le dock de GNOME sous Ubuntu. Ce guide détaille la norme FreeDesktop (fichiers .desktop), l'ajout d'actions rapides au clic droit, la gestion stricte de la localisation française (pour éviter le repli forcé en anglais), le rechargement à chaud de GNOME Shell sans déconnexion, ainsi qu'un cas pratique complet avec Docker et Lazydocker.
| Propriété | Valeur |
|---|---|
| Difficulté | Intermédiaire |
| OS / Environnement | Ubuntu 24.04 LTS (GNOME Desktop / X11 ou Wayland) |
| Dernière mise à jour | 2026-09-21 |
Contexte¶
Sous Linux, de nombreux utilitaires essentiels fonctionnent exclusivement en ligne de commande ou en tant que services d'arrière-plan (Docker, Rclone, USBGuard, Tailscale, smartmontools, etc.). Par habitude ou par manque de visibilité, on a tendance à oublier leur présence, ou à trouver fastidieux d'ouvrir un terminal pour taper des commandes récurrentes de diagnostic ou de synchronisation.
Créer une entrée personnalisée dans le menu GNOME permet de :
- Rendre visibles les services système dans la grille d'applications et le champ de recherche de GNOME Shell.
- Fournir une interface assistée (en terminal interactif ou TUI) qui affiche immédiatement l'état du service et les choix possibles.
- Exploiter les actions rapides au clic droit sur l'icône dans le dock (ex. Statistiques, Nettoyage, Synchroniser maintenant).
Cependant, plusieurs pièges techniques surviennent fréquemment : textes qui s'affichent obstinément en anglais, bordures de fenêtres désalignées à cause de caractères UTF-8, outils graphiques/TUI qui refusent de démarrer depuis un conteneur, ou obligation supposée de fermer sa session pour appliquer les changements. Ce tutoriel détaille la méthode robuste pas-à-pas pour éviter chaque écueil.
Prérequis¶
- Un environnement de bureau GNOME sous Linux (testé sous Ubuntu 24.04 LTS).
- Un terminal et un éditeur de texte.
- Le paquet d'outils de validation FreeDesktop :
Procédure¶
Étape 1 : Créer le script assistant interactif (~/.local/bin/)¶
Pour les outils sans interface graphique native, la bonne pratique consiste à concevoir un script wrapper en Bash qui s'exécute dans un terminal (Terminal=true).
Ce script remplit deux rôles : 1. Mode interactif : Afficher un en-tête soigné, un résumé de santé en un coup d'œil, et un menu d'options chiffrées avec mise en pause avant fermeture. 2. Mode direct (paramètres en ligne de commande) : Permettre aux actions rapides de bureau (clic droit) d'exécuter directement une tâche spécifique.
Créez le répertoire utilisateur standard s'il n'existe pas :
Créez ensuite votre script, par exemple ~/.local/bin/docker-gestion :
| ~/.local/bin/docker-gestion | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | |
Rendez le script exécutable :
Étape 2 : Créer ou installer une icône vectorielle SVG (~/.local/share/icons/)¶
GNOME utilise le thème d'icônes XDG situé dans ~/.local/share/icons/hicolor/. Les icônes vectorielles SVG assurent une netteté parfaite, quelle que soit la résolution de votre écran ou le zoom du dock.
- Créez l'arborescence des icônes vectorielles :
- Déposez votre fichier SVG nommé d'après l'application (ex:
docker.svg) :
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<defs>
<linearGradient id="docBg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#1d63ed"/>
<stop offset="100%" stop-color="#0b43b3"/>
</linearGradient>
</defs>
<rect width="128" height="128" rx="28" fill="url(#docBg)"/>
<!-- Conteneurs -->
<rect x="52" y="36" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="40" y="46" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="52" y="46" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="64" y="46" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="28" y="56" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="40" y="56" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="52" y="56" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="64" y="56" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<rect x="76" y="56" width="10" height="8" rx="1.5" fill="#ffffff" opacity="0.95"/>
<!-- Silhouette baleine -->
<path d="M18 66 C22 66 26 68 28 68 C34 68 38 68 86 68 C98 68 108 76 110 86 C110 87 106 91 96 93 C80 96 46 96 28 86 C21 82 18 74 18 66 Z" fill="#ffffff"/>
<circle cx="98" cy="80" r="2.5" fill="#0b43b3"/>
<path d="M18 66 C15 62 10 56 6 56 C7 62 10 68 14 72 Z" fill="#ffffff"/>
</svg>
- Mettez à jour le cache d'icônes utilisateur :
Étape 3 : Créer le fichier de bureau FreeDesktop (.desktop)¶
Les fichiers .desktop personnels doivent être enregistrés dans ~/.local/share/applications/.
Créez le fichier ~/.local/share/applications/docker-gestion.desktop :
Étape 4 : Valider et enregistrer l'entrée de bureau¶
- Valider la syntaxe XDG avec l'utilitaire
desktop-file-validate:
Si la commande ne renvoie aucun message, le fichier respecte scrupuleusement le standard.
- Mettre à jour la base de données des applications :
Les pièges courants et comment les éviter¶
Piège 1 : L'affichage obstiné en anglais (LANGUAGE=fr_FR:en)¶
Le problème
Vous avez rédigé votre fichier .desktop avec un Name=... en français et un Name[en]=... en anglais. Pourtant, sur un Ubuntu configuré en français, GNOME Shell affiche systématiquement le texte anglais !
Explication technique
Sous Ubuntu, les sessions françaises exportent généralement la variable d'environnement LANGUAGE=fr_FR:en.
La bibliothèque GLib (utilisée par GNOME Shell pour parser les entrées de bureau) résout les langues dans cet ordre précis :
- Correspondance exacte :
Name[fr_FR] - Correspondance générique de langue :
Name[fr] - Langue suivante dans la variable
LANGUAGE:Name[en] - En tout dernier recours : la valeur par défaut sans crochet
Name=
Si votre fichier ne contient pas de balise explicite [fr] ou [fr_FR], GLib saute la valeur par défaut et prend la clé [en] car en fait partie de votre chaîne de repli linguistique !
La solution
- Définissez la clé par défaut directement en français :
Name=Mon Titre - Ajoutez explicitement les deux variantes :
Name[fr]=Mon TitreetName[fr_FR]=Mon Titre - Supprimez totalement les clés
[en]de vos fichiers de bureau personnalisés.
Piège 2 : Recharger GNOME Shell sans fermer la session (X11 vs Wayland)¶
Après avoir modifié un fichier .desktop, GNOME Shell conserve en mémoire vive les anciennes chaînes dans son cache d'objets Shell.AppSystem.
Faut-il fermer sa session ?
Non ! Si vous utilisez une session X11 (echo $XDG_SESSION_TYPE), GNOME dispose d'un mécanisme de rechargement à chaud conçu précisément pour cela :
- Pressez la combinaison de touches Alt+F2.
- Tapez simplement la lettre
r(pour restart). - Appuyez sur Enter.
| Type de session | Méthode de rechargement sans perte de travail |
|---|---|
| X11 | Alt+F2, taper r, puis Enter. Le gestionnaire de fenêtres se réexécute en 500 ms, toutes vos fenêtres et documents restent ouverts. |
| Wayland | Le protocole Wayland ne permet pas de redémarrer le compositeur sans tuer les clients XWayland/Wayland. La réactualisation s'opère soit en attendant que le moniteur d'évènements GAppInfoMonitor détecte la modification de date (via touch ~/.local/share/applications/), soit en verrouillant/déverrouillant l'écran (Super+L). |
Piège 3 : Décalage des bordures de cadre en UTF-8 dans le terminal¶
Le problème
Lorsqu'on dessine un cadre en caractères Unicode (╔══╗, ║ ║), la bordure droite ║ est décalée d'un ou deux caractères si le titre contient des caractères accentués (é, è), des tirets cadratins (—) ou des perluètes (&).
Explication technique
En UTF-8, un caractère comme le tiret cadratin — (U+2014) mesure 3 octets en mémoire, mais n'occupe qu'1 seule colonne visuelle dans un terminal à chasse fixe (monospace).
Si un script compte les octets ou si le nombre d'espaces de remplissage est codé en dur dans un éditeur de texte, l'affichage console est faussé.
La solution
En Bash moderne, l'expansion ${#variable} renvoie le nombre réel de caractères Unicode (et non pas le nombre d'octets). En calculant dynamiquement le padding d'espaces :
local titre="Docker — Gestion des Conteneurs & Images"
local largeur=70
local len_titre=${#titre}
local padding=$((largeur - 2 - len_titre))
local espaces=""
(( padding > 0 )) && printf -v espaces "%*s" "$padding" ""
Le cadre s'ajuste alors au pixel près quelle que soit la longueur ou la teneur linguistique du titre.
Piège 4 : Les outils TUI en conteneur Docker et l'erreur /dev/tty¶
Le problème
Lancer une interface en mode texte avancée (comme Lazydocker) via un conteneur éphémère docker run -it lazyteam/lazydocker depuis un lanceur .desktop échoue silencieusement ou retourne l'erreur :
*fs.PathError open /dev/tty: no such device or address
Explication technique
Les applications TUI conçues avec des bibliothèques comme tview ou bubbletea en Go requièrent un descripteur de fichier TTY direct pour capturer les flux clavier et souris. À l'intérieur d'un conteneur headless ou isolé, /dev/tty n'est pas routé correctement sans monter le pseudo-terminal hôte.
La solution
Téléchargez directement le binaire compilé natif pour Linux dans ~/.local/bin/ :
curl -Lo /tmp/lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/download/v0.25.2/lazydocker_0.25.2_Linux_x86_64.tar.gz"
tar -xzf /tmp/lazydocker.tar.gz -C ~/.local/bin/ lazydocker
chmod +x ~/.local/bin/lazydocker
Le binaire s'exécute nativement en quelques millisecondes et communique avec le démon local via le socket standard /var/run/docker.sock.
Aide-mémoire¶
| Composant | Emplacement standard utilisateur |
|---|---|
| Scripts exécutables | ~/.local/bin/<nom-du-script> |
| Fichiers de bureau (.desktop) | ~/.local/share/applications/<nom>.desktop |
| Icônes vectorielles (SVG) | ~/.local/share/icons/hicolor/scalable/apps/<nom>.svg |
| Validation du lanceur | desktop-file-validate ~/.local/share/applications/<nom>.desktop |
| Reconstruction du cache menu | update-desktop-database ~/.local/share/applications/ |
| Test de lancement en CLI | gtk-launch <nom>.desktop |
| Rechargement GNOME à chaud (X11) | Alt+F2, taper r, puis Enter |
Glossaire¶
- FreeDesktop / XDG (Cross-Desktop Group)
- Ensemble de spécifications et standards ouverts garantissant l'interopérabilité entre les différents environnements de bureau Linux (GNOME, KDE Plasma, XFCE). Définit l'arborescence des dossiers (
XDG_DATA_HOME,~/.local/share/applications/) et la structure des fichiers.desktop. - Desktop Entry (
.desktop) - Fichier de configuration au format INI décrivant une application : son nom, sa commande d'exécution, son icône, ses catégories de tri et ses actions contextuelles de menu.
- TUI (Terminal User Interface)
- Interface utilisateur en mode texte s'exécutant dans une console (comme
htop,lazydocker,ncdu), offrant une navigation interactive à la souris et au clavier via des bibliothèques telles que ncurses. - Desktop Actions
- Fonctionnalité de la norme FreeDesktop permettant de déclarer des actions secondaires associées à une application, accessibles via le menu contextuel (clic droit sur l'icône dans le dock GNOME ou le gestionnaire de tâches).
- TTY (Teletypewriter)
- Périphérique sous Linux représentant un terminal d'entrée/sortie texte physique ou émulé (pseudo-terminal
pty), indispensable pour faire tourner des programmes interactifs.
Vérification¶
- Vérifier la bonne résolution linguistique avec Python et GLib :
python3 -c "
import gi
gi.require_version('Gio', '2.0')
from gi.repository import Gio
app = Gio.DesktopAppInfo.new('docker-gestion.desktop')
if app:
print('Nom :', app.get_display_name())
print('Description :', app.get_description())
else:
print('Fichier introuvable')
"
Résultat attendu
- Tester le lancement effectif dans l'environnement graphique :
Une fenêtre de terminal s'ouvre avec l'interface interactive de Docker, ses couleurs, son statut de démon et son menu d'options.
Ressources¶
- Spécification officielle FreeDesktop Desktop Entry — Standards officiels pour la structure des fichiers
.desktop. - Documentation GNOME Developer — Desktop Files — Recommandations d'intégration logicielle dans l'écosystème GNOME.
- Dépôt officiel Lazydocker — Gestionnaire TUI libre pour conteneurs et services Docker.