Comment supprimer l'icône d'une application du menu Ubuntu et méthodes d'installation des applications

Introduction

Suppose you have icons appearing in your Ubuntu application menu that you want to:

  1. Remove along with the application — we’ll consider this separately.
  2. Remove only the icon — this is covered here.

In this example, I want to remove the Telegram or Telegram Desktop icon without affecting the application itself.

Installation Methods

You may not remember how you installed it. It could have been one of the following methods:

# Installation Method How to Identify How to Remove (Terminal) Notes / Risks
1 Built-in repository apt policy nomarchive.ubuntu.com sudo apt remove --purge nom && sudo apt autoremove Safe, but autoremove may affect other packages — check carefully.
2 Added repository (PPA, etc.) apt policy nom → external URL
File in /etc/apt/sources.list.d/
1. sudo apt remove nom
2. Delete .list + key
3. sudo apt update
Remove the package before the repository — otherwise, apt errors.
3 .deb package `dpkg -l grep nom` sudo apt remove --purge nom (better than dpkg -P)
4 Snap `snap list grep nom<br>which nom/snap/bin/nom` sudo snap remove nom
5 Flatpak `flatpak list grep nom` flatpak uninstall nom && flatpak remove --unused
6 Ready binary (AppImage, .tar.gz) Not in apt/dpkg/snap
Binary in ~/Apps/, /opt/, ~/.local/bin/
rm -rf /path/to/program ~/.local/share/applications/nom.desktop ~/.config/nom/ No centralized management — easy to “forget” something.
7 .run installer Ran sudo ./nom.run
Has /opt/nom/, uninstall.sh
1. sudo /opt/nom/uninstall.sh
2. Otherwise manually — /opt/, /usr/bin/, .desktop, systemd, ~/.config/
Most “dirty” method. Often leaves no uninstall script.
8 Compilation (make install) which nom/usr/local/bin/ 1. make uninstall (if available)
2. Otherwise — manually
Le retrait ou checkinstall à l’avenir
9 Gestionnaires (pipx, cargo, npm -g) which nom~/.local/bin/, ~/.cargo/bin/ pipx uninstall nom, cargo uninstall nom, npm uninstall -g nom Ne casse pas le système, mais peut entrer en conflit avec les versions apt (ex. node).

Cette liste n’est pas exhaustive, et j’espère que vous n’utiliserez pas d’autres variantes :slight_smile:

  • go install, gem install
  • Images Docker / Podman avec GUI
  • Installation via linuxbrew / nix / guix

Ce qui ne constitue pas un moyen d’installation distinct

  • apt install ./fichier.deb → c’est toujours l’installation d’un paquet .deb, simplement via apt au lieu de dpkg.
  • Installateurs graphiques (Software Center, Discover) → interface utilisateur pour apt / snap / flatpak.
  • «Ajouter au démarrage automatique» / systemd --user → c’est une configuration post-installation, pas un moyen d’installation.

Comment déterminer rapidement le moyen d’installation d’une application inconnue ?

# 1. Où se trouve l'exécutable ?
which nom

# 2. D'où vient le paquet (si via apt/dpkg)
dpkg -S $(which nom) 2>/dev/null || echo "Not in dpkg"

# 3. Vérifier snap/flatpak
snap list | grep -i nom
flatpak list | grep -i nom

# 4. Vérifier s'il est dans ~/.local/bin ou /opt
ls -l $(which nom)

# 5. Historique d'installation (si récent)
grep "install.*nom" /var/log/apt/history.log 2>/dev/null
journalctl --since "2 weeks ago" | grep -i "install.*nom"

Conseils pour une installation propre :

  • Pour les programmes .run à l’avenir — envisagez AppImage ou l’isolation via bubblewrap / toolbox.
  • Au lieu de make install, utilisez checkinstall → crée un .deb, facile à supprimer via apt.
  • Gérez les fichiers .desktop utilisateur via ~/.local/share/applications/ — ils remplacent toujours les versions système.

Où se trouvent tous les fichiers icônes du menu des applications ?

Ceci n’est pas une icône, mais un script de démarrage. Similaire à ceux utilisés pour lancer des services (vous vous en souvenez ?)

Un des endroits :

/usr/share/applications/

Analyse de l’application Telegram

ls -l /usr/share/applications/ | grep -i tele
-rw-r--r-- 1 root root   371 Mar  6  2020 telegram.desktop
cat /usr/share/applications/telegram.desktop

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Name=Telegram Desktop
Exec=/opt/telegram/Telegram -- %u
Comment=Version officielle de l'application de messagerie Telegram pour bureau
Icon=/opt/telegram/telegram.svg
StartupWMClass=Telegram
Categories=GNOME;GTK;Network;
MimeType=application/x-xdg-protocol-tg;x-scheme-handler/tg;
X-Desktop-File-Install-Version=0.22

On voit ici que l’exécutable se trouve dans

ls -l /opt/telegram/

total 190652
-rwxr-xr-x 1 root root        55 Mar  6  2020 Telegram
-rwxrwxr-x 1 root root   2184648 Nov  8 14:17 Updater
-rwxrwxr-x 1 root root 193023296 Nov  8 14:17 telegram
-rw-r--r-- 1 root root      4762 Mar  6  2020 telegram.svg

On comprend maintenant que l’icône porte la signature Telegram Desktop.

L’indication pointe vers le fichier /opt/telegram/Telegram. Il est suspectement petit, 55 octets — regardons ce qu’il contient :

cat /opt/telegram/Telegram

#!/usr/bin/env bash
/opt/telegram/telegram -noupdate $@

C’est un script wrapper (wrap=emballage), qui appelle à son tour /opt/telegram/telegram avec l’option de ligne de commande -noupdate, qui demande à Telegram de ne pas vérifier ni ne pas installer automatiquement les mises à jour.

$@ est une variable spéciale qui se développe en arguments séparés, passés au script. Il est recommandé d’utiliser cette construction entre guillemets doubles pour éviter les problèmes lorsque l’argument contient un espace. Mais ici, cela semble exclu, car il s’agit soit d’un pseudo-nom d’utilisateur, soit d’un nom d’utilisateur, où les espaces et les caractères spéciaux sont interdits.

Le fichier /opt/telegram/telegram est exécutable — il porte l’attribut x (pour un dossier, cet attribut signifie autre chose — on peut traverser le dossier, même sans droits de lecture sur son contenu).

:backhand_index_pointing_right: C’est seulement un des icônes et ce qui lui est associé. Pour l’instant, il n’est pas clair comment l’application a été installée. Selon le tableau, cela aurait pu être un installateur run, mais ce n’est pas certain. Telegram est livré soit comme snap dans le magasin d’applications, soit comme archive tar.gz. Le second semble plus probable.

Pour trouver les fichiers de l’autre application, utilisons la commande whence.

whence

En fait, ce n’est pas une commande, mais un alias (c’est quand un mot de commande cache plusieurs lignes de code).

Ouvrez votre ~/.bash_aliases — si le fichier n’existe pas, créez-le. Ajoutez-y ces lignes :

# whence — vérification rapide du moyen d'installation
whence() {
    local prog="$1"
    [ -z "$prog" ] && { echo "Usage: whence <programme>"; re```bash
turn 1; }

    echo "=== $prog ==="
    echo "• which: $(which \"$prog\" 2>/dev/null || echo '—')"
    echo "• snap: $(snap list 2>/dev/null | grep "^$prog " || echo '—')"
    echo "• flatpak: $(flatpak list --app 2>/dev/null | awk -v p=\"$prog\" '$1==p {print $1\":\"$3}' || echo '—')"
    echo "• dpkg: $(dpkg -S \"$(which \"$prog\" 2>/dev/null)\" 2>/dev/null | cut -d: -f1 || echo '—')"
    echo "• .desktop: $(find ~/.local/share/applications /usr/share/applications -name \"*$prog*.desktop\" 2>/dev/null | head -1 || echo '—')"
}

Cela fonctionne de telle sorte que .bash_aliases est appelé dans le fichier ~/.bashrc. Donc, après avoir apporté des modifications au fichier, appliquez-les (ces changements ne seront pris en compte que dans le terminal où vous exécuterez la commande ci-dessous (ou lors d’un nouveau login dans le système) :

source ~/.bashrc

Rien ne changera visiblement, mais la session ajoutera de nouvelles variables et alias.

Vérifiez :

whence telegram

=== telegram ===
• which: —
• snap: —
• flatpak: 
• dpkg: 
• .desktop: /home/ivan/.local/share/applications/org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop

Vous pouvez remarquer que le fichier .desktop ici se trouve dans le répertoire personnel, et non dans le répertoire système /usr/share/applications/ (voir combien il y en a au total) :

ls -l ~/.local/share/applications/

-rwxrwxr-x 1 ivan ivan 579 Nov  8 16:22 org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop

Pour l’instant, nous nous intéressons au contenu de ce fichier :

cat ~/.local/share/applications/org.telegram.desktop*

[Desktop Entry]
Name=Telegram
Comment=New era of messaging
TryExec=/opt/telegram/telegram
Exec=/opt/telegram/telegram -- %u
Icon=org.telegram.desktop
Terminal=false
StartupWMClass=TelegramDesktop
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
MimeType=x-scheme-handler/tg;x-scheme-handler/tonsite;
Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;
Actions=quit;
DBusActivatable=true
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true

[Desktop Action quit]
Exec=/opt/telegram/telegram -quit
Name=Quit Telegram
Icon=application-exit

L’icône porte la signature Telegram (sans Desktop).

Le script pointe vers… le même fichier exécutable /opt/telegram/telegram, mais sans passer la variable ni la clé « ne pas se mettre à jour ». Je ne sais pas pourquoi. La voix intérieure me dit que le développeur devrait avoir une approche uniforme pour tous les modes de déploiement. Mais ici, ce point n’est probablement pas critique. La transmission du login n’est pas obligatoire, cela sera récupéré depuis les paramètres. La seule différence sera l’auto-mise à jour du logiciel. Et d’ailleurs, l’utilisateur verra dans un cas une notification indiquant que Telegram doit être mis à jour, et dans l’autre, l’application se mettra à jour automatiquement et attendra un redémarrage (mais ce n’est pas certain).

En bref, nous avons trouvé que les deux icônes mènent à la même instance de Telegram, ce qui est le plus important. Maintenant, on peut supprimer l’un d’eux, puisque l’application et les paramètres (profil) sont partagés.

Supprimons l’un des deux, celui qui est le moins joli :

~/.local/share/applications/org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop

NE PAS SUPPRIMER le fichier. Le masquage de l’icône se fait d’une autre manière !

Suppression uniquement de l’icône Telegram du menu (tout en conservant l’application et le service)

Ajoutez le paramètre Hidden=true dans la section [Desktop Entry] du script :

sed -i '/^\\[Desktop Entry\\]$/a Hidden=true' ~/.local/share/applications/org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop

Notez que cette commande est simplifiée. Elle ne tient pas compte de la présence ou non de cette ligne dans le fichier (en cas de relancement), mais un doublement n’est pas un problème.

Le changement s’applique immédiatement — l’icône disparaît du menu. Pour restaurer l’icône, supprimez simplement la ligne ajoutée (indiquée par la flèche).