Cómo eliminar el icono de la aplicación del menú de Ubuntu y formas de instalar aplicaciones

Introducción

Supongamos que en Ubuntu, en el menú de aplicaciones, aparecieron iconos que deseas:

  1. Eliminar junto con la aplicación — se considerará aparte.
  2. Eliminar solo el icono — se aborda aquí.

En este ejemplo, quiero eliminar el icono de Telegram o Telegram Desktop, sin tocar la aplicación en sí.

Métodos de instalación

En este caso, no recuerdas cómo realizaste la instalación. Puede haber sido uno de estos métodos:

Método de instalación Cómo reconocer Cómo eliminar (terminal) Características / Riesgos
1 Repositorio integrado apt policy nombrearchive.ubuntu.com sudo apt remove --purge nombre && sudo apt autoremove Seguro, pero autoremove puede afectar otros paquetes — revísalo.
2 Repositorio conectado (PPA, etc.) apt policy nombre → URL externo
Archivo en /etc/apt/sources.list.d/
1. sudo apt remove nombre
2. Eliminar .list + clave
3. sudo apt update
Elimina el paquete antes del repositorio — de lo contrario, errores de apt.
3 Paquete .deb `dpkg -l grep nombre` sudo apt remove --purge nombre (mejor que dpkg -P)
4 Snap `snap list grep nombre<br>which nombre/snap/bin/nombre` sudo snap remove nombre
5 Flatpak `flatpak list grep nombre` flatpak uninstall nombre && flatpak remove --unused
6 Binario listo (AppImage, .tar.gz) No está en apt/dpkg/snap
Binario en ~/Apps/, /opt/, ~/.local/bin/
rm -rf /ruta/a/la/programa ~/.local/share/applications/nombre.desktop ~/.config/nombre/ No hay gestión centralizada — fácil "olvidar" algo.
7 Instalador .run Se ejecutó sudo ./nombre.run
Existe /opt/nombre/, uninstall.sh
1. sudo /opt/nombre/uninstall.sh
2. De lo contrario, manualmente — /opt/, /usr/bin/, .desktop, systemd, ~/.config/
Método más "sucio". A menudo no deja un script de desinstalación.
8 Compilación (make install) which nombre/usr/local/bin/ 1. make uninstall (si existe)
2. De lo contrario, manualmente
El borrado o checkinstall en el futuro
9 Gestores (pipx, cargo, npm -g) which nombre~/.local/bin/, ~/.cargo/bin/ pipx uninstall nombre, cargo uninstall nombre, npm uninstall -g nombre No rompe el sistema, pero puede conflictuar con versiones de apt (por ejemplo, node).

Esta es una lista incompleta, y espero que no utilicen otros métodos :slight_smile:

  • go install, gem install
  • Imágenes Docker / Podman con GUI
  • Instalación mediante linuxbrew / nix / guix

¿Qué no se considera un método de instalación independiente?

  • apt install ./file.deb → esto es igual que instalar un paquete .deb mediante apt, no mediante dpkg.
  • Instaladores gráficos (Software Center, Discover) → interfaz gráfica para apt / snap / flatpak.
  • «Agregar a arranque» / systemd --user → esto es una configuración post-instalación, no un método de instalación.

¿Cómo determinar rápidamente el método de instalación de una aplicación desconocida?

# 1. ¿Dónde está el binario?
which nombre

# 2. ¿De dónde proviene el paquete (si es de apt/dpkg)?
dpkg -S $(which nombre) 2>/dev/null || echo "No está en dpkg"

# 3. Comprobar snap/flatpak
snap list | grep -i nombre
flatpak list | grep -i nombre

# 4. Comprobar si está en ~/.local/bin o /opt
ls -l $(which nombre)

# 5. Historial de instalación (si es reciente)
grep "install.*nombre" /var/log/apt/history.log 2>/dev/null
journalctl --since "2 weeks ago" | grep -i "install.*nombre"

Consejos para una instalación limpia:

  • Para programas .run en el futuro — considere AppImage o aislamiento mediante bubblewrap / toolbox.
  • En lugar de make install, use checkinstall → genera un .deb, fácil de eliminar mediante apt.
  • Administre archivos .desktop de usuario en ~/.local/share/applications/ — siempre sobreescriben los del sistema.

¿Dónde se encuentran todos los iconos del menú de aplicaciones?

Esto no es un icono, sino un script de inicio. Similar a los usados para iniciar servicios (¿Recuerdan?)

Uno de los lugares:

/usr/share/applications/

Análisis de la aplicación 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=Versión oficial de escritorio de la aplicación de mensajería Telegram
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

De aquí se ve que el archivo ejecutable está en

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

Ahora es claro que la firma del icono es Telegram Desktop.

La referencia apunta al archivo /opt/telegram/Telegram. Es un archivo muy pequeño, de 55 bytes. Veamos qué contiene:

cat /opt/telegram/Telegram

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

Este es un script wrapper (wrap=envoltura), que a su vez invoca a /opt/telegram/telegram con la bandera de línea de comandos que le dice a Telegram que no verifique ni instale actualizaciones automáticamente.

$@ es una variable especial que se expande en argumentos individuales pasados al script. Se recomienda usar esta construcción entre comillas dobles para evitar problemas cuando un argumento contenga espacios. Pero aquí parece que no se usa, ya que probablemente se trate de un nombre de usuario o nombre de inicio de sesión, donde no están permitidos espacios ni caracteres especiales.

El archivo /opt/telegram/telegram es ejecutable — tiene el atributo x (para carpetas, este atributo significa que se puede navegar a través de ellas, incluso si el usuario no tiene permisos de lectura del contenido de la carpeta).

:backhand_index_pointing_right: Este es solo uno de los iconos y lo que con él está relacionado. Por ahora no está claro cómo se instaló la aplicación. Según la tabla, parece que fue un instalador .run, pero no con certeza. Telegram se instala ya sea como snap en la tienda de aplicaciones, o como archivo tar.gz. Parece más probable que sea el segundo caso.

Para encontrar los archivos del segundo programa, usemos el comando whence.

whence

En realidad, no es un comando, sino un alias (cuando una palabra de comando oculta varias líneas de código).

Abra su ~/.bash_aliases — si el archivo no existe, créelo. Añada estas líneas:

# whence — comprobación rápida del método de instalación
whence() {
    local prog="$1"
    [ -z "$prog" ] && { echo "Uso: whence <programa>"; return 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 '—')"

Está configurado de tal manera que .bash_aliases se carga en el archivo ~/.bashrc. Por lo tanto, después de realizar cambios en el archivo, aplíquelos (estos cambios solo se aplicarán en el terminal donde ejecute el comando siguiente (o al iniciar sesión nuevamente en el sistema):

source ~/.bashrc

Externamente no cambiará nada, pero en la sesión aparecerán nuevas variables y alias.

Verifique:

whence telegram

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

Puede notar que el archivo .desktop aquí no está en el directorio de sistema /usr/share/applications/, sino en el directorio personal (vea cuántos hay en total):

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

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

Por ahora, nos interesa el contenido de este archivo:

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

La firma de este icono es Telegram (sin “Desktop”).

El script apunta… al mismo archivo ejecutable /opt/telegram/telegram, solo sin pasar la variable ni la clave “no actualizar”. No sé por qué es así. Mi voz interior dice que el desarrollador debería tener una consistencia en cualquier tipo de despliegue. Pero aquí probablemente este punto no sea crítico. La transmisión de la contraseña no es obligatoria, se cargará desde las configuraciones. La diferencia será solo en la actualización automática del software. Y, por cierto, el usuario en un caso verá una notificación que Telegram necesita actualizarse, mientras que en otro caso la aplicación se actualizará automáticamente y esperará un reinicio (pero no es seguro).

En resumen, hemos descubierto que ambos iconos conducen a la misma instancia de Telegram, lo cual es lo más importante. Ahora podemos eliminar uno de ellos, ya que la aplicación y las configuraciones (perfil) son compartidas.

Eliminemos el menos atractivo:

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

NO ELIMINE el archivo. El ocultamiento del icono se realiza de otra manera!

Eliminación solo del icono de Telegram del menú (dejando la aplicación y el servicio)

Se añade al script el parámetro Hidden=true en la sección [Desktop Entry]:

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

Tenga en cuenta que esta es una orden simplificada. No considera si ya existe esa línea en el archivo (al ejecutarla nuevamente) o no. Pero duplicar no es un problema.

El cambio se aplicará inmediatamente: el icono desaparecerá del menú. Para restaurar el icono, elimine solo la línea recién añadida (marcada con una flecha).