Introduction
Suppose you have icons appearing in your Ubuntu application menu that you want to:
- Remove along with the application — we’ll consider this separately.
- 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 nom → archive.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 URLFile in /etc/apt/sources.list.d/ |
1. sudo apt remove nom2. Delete .list + key3. 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/snapBinary 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.runHas /opt/nom/, uninstall.sh |
1. sudo /opt/nom/uninstall.sh2. 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 ![]()
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 viaaptau lieu dedpkg.- 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 viabubblewrap/toolbox. - Au lieu de
make install, utilisezcheckinstall→ crée un.deb, facile à supprimer viaapt. - Gérez les fichiers
.desktoputilisateur 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).
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).

