Come rimuovere l'icona dell'applicazione dal menu Ubuntu e modi per installare applicazioni

Introduzione

Supponiamo che nei menu delle applicazioni di Ubuntu siano apparsi icone che desideri:

  1. Rimuovere insieme all’applicazione — esamineremo separatamente.
  2. Rimuovere solo l’icona — qui viene trattato.

Nell’esempio qui sopra, voglio rimuovere l’icona di Telegram o Telegram Desktop, senza toccare l’applicazione stessa.

Modi di installazione

In questo caso, non ricordi come hai effettuato l’installazione. Potrebbe essere uno dei seguenti modi:

Metodo di installazione Come riconoscerlo Come rimuovere (terminale) Caratteristiche / Rischi
1 Repository integrato apt policy nomearchive.ubuntu.com sudo apt remove --purge nome && sudo apt autoremove Sicuro, ma autoremove potrebbe influenzare altri pacchetti — controlla.
2 Repository aggiuntivo (PPA e altri) apt policy nome → URL esterno
File in /etc/apt/sources.list.d/
1. sudo apt remove nome
2. Rimuovere il file .list + chiave
3. sudo apt update
Rimuovi il pacchetto prima del repository — altrimenti errori apt.
3 Pacchetto .deb `dpkg -l grep nome` sudo apt remove --purge nome (meglio di dpkg -P)
4 Snap `snap list grep nome<br>which nome/snap/bin/nome` sudo snap remove nome
5 Flatpak `flatpak list grep nome` flatpak uninstall nome && flatpak remove --unused
6 Binario pronto (AppImage, .tar.gz) Non presente in apt/dpkg/snap
Binario in ~/Apps/, /opt/, ~/.local/bin/
rm -rf /percorso/alla/programma ~/.local/share/applications/nome.desktop ~/.config/nome/ Nessuna gestione centralizzata — facile “dimenticare” qualcosa.
7 Installatore .run È stato eseguito sudo ./nome.run
Esiste /opt/nome/, uninstall.sh
1. sudo /opt/nome/uninstall.sh
2. Altrimenti manualmente — /opt/, /usr/bin/, .desktop, systemd, ~/.config/
Metodo più “sporco”. Spesso non lascia lo script di disinstallazione.
8 Compilazione (make install) which nome/usr/local/bin/ 1. make uninstall (se esiste)
2. Altrimenti manualmente — /usr/local/bin/, /usr/local/lib/, .desktop, ~/.config/
Nessun controllo centralizzato — facile dimenticare qualcosa.
9 Gestori (pipx, cargo, npm -g) which nome~/.local/bin/, ~/.cargo/bin/ pipx uninstall nome, cargo uninstall nome, npm uninstall -g nome Non rompe il sistema, ma può confliggere con le versioni installate tramite apt (ad esempio, node).

Questo è un elenco incompleto, e spero che non utilizzerete altri metodi :slight_smile:

  • go install, gem install
  • Immagini Docker / Podman con GUI
  • Installazione tramite linuxbrew / nix / guix

Cosa non si considera un metodo di installazione separato

  • apt install ./file.deb → è comunque l’installazione di un pacchetto .deb, semplicemente tramite apt invece che dpkg.
  • Installatori grafici (Software Center, Discover) → frontend per apt / snap / flatpak.
  • «Aggiungi all’avvio» / systemd --user → questa è già una configurazione post-installazione, non un metodo di installazione.

Come determinare rapidamente il metodo di installazione di un’applicazione sconosciuta

# 1. Dove si trova il binario?
which nome

# 2. Da dove proviene il pacchetto (se da apt/dpkg)
dpkg -S $(which nome) 2>/dev/null || echo "Not in dpkg"

# 3. Controllare snap/flatpak
snap list | grep -i nome
flatpak list | grep -i nome

# 4. Controllare se è in ~/.local/bin o /opt
ls -l $(which nome)

# 5. Storia dell'installazione (se recente)
grep "install.*nome" /var/log/apt/history.log 2>/dev/null
journalctl --since "2 weeks ago" | grep -i "install.*nome"

Consigli per una sistema pulito:

  • Per le applicazioni .run in futuro, considerate AppImage o isolamento tramite bubblewrap / toolbox.
  • Invece di make install, usate checkinstall → genera un .deb, facile da rimuovere tramite apt.
  • Gestite i file .desktop personali tramite ~/.local/share/applications/ — questi sovrascriveranno sempre quelli di sistema.

Dove si trovano tutti i file degli iconi del menu delle applicazioni?

Questo non è un’icona, ma uno script di avvio. Simile a quelli usati per avviare servizi (ricordate?)

Uno dei percorsi:

/usr/share/applications/

Analisi dell’applicazione 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=Official desktop version of Telegram messaging app
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

Da questo si vede che il file eseguibile si trova in

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

Ora è chiaro che il nome dell’icona è Telegram Desktop.

L’indicazione punta al file /opt/telegram/Telegram. È un file molto piccolo, 55 byte. Vediamo cosa contiene:

cat /opt/telegram/Telegram

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

Questo è uno script wrapper (wrap=obertura), che a sua volta chiama /opt/telegram/telegram con un flag della riga di comando che dice a Telegram di non controllare né installare aggiornamenti automaticamente.

$@ è una variabile speciale che espande in argomenti separati, passati allo script. Si consiglia di usare questa costruzione tra virgolette doppie per evitare problemi quando nell’argomento c’è uno spazio. Tuttavia, qui sembra essere escluso, poiché si tratta probabilmente di un nome utente o di un login, dove non sono consentiti spazi o caratteri speciali.

Il file /opt/telegram/telegram è eseguibile — ha l’attributo x (per una cartella, questo attributo significa che è possibile attraversarla, anche se l’utente non ha i permessi di lettura del contenuto della cartella).

:backhand_index_pointing_right: questo è solo uno dei simboli e ciò a cui è collegato. Per ora non è chiaro come sia stato installato l’applicazione. Secondo la tabella sembra essere stato installato tramite un installatore run, ma non è certo. Telegram viene fornito o come snap nel negozio di applicazioni, o come archivio tar.gz. Quest’ultimo sembra più probabile.

Per trovare i file dell’altra applicazione, usiamo il comando whence.

whence

In realtà, questo non è un comando, ma un alias (quando una parola di comando nasconde molte righe di codice).

Apri il tuo ~/.bash_aliases — se il file non esiste, crealo. Aggiungi queste righe:

# whence — verifica rapida del metodo di installazione
whence() {
    local prog="$1"
    [ -z "$prog" ] && { echo "Usage: whence <program>"; 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 '—')"

È configurato in modo che .bash_aliases venga chiamato dal file ~/.bashrc. Pertanto, dopo aver apportato modifiche al file, applicatele (queste modifiche verranno applicate solo nel terminale in cui eseguirete il comando seguente (o verranno applicate alla nuova sessione di login nel sistema):

source ~/.bashrc

Esternamente nulla cambierà, ma nella sessione appariranno nuove variabili e alias.

Verificate:

whence telegram

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

Potete notare che il file .desktop qui non si trova nel percorso del sistema /usr/share/applications/, ma nella cartella personale (vedete quante ne sono presenti):

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

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

Per ora ci interessa il contenuto di questo file:

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’icona ha l’etichetta Telegram (senza Desktop).

Lo script punta … allo stesso file eseguibile /opt/telegram/telegram, ma senza passare la variabile e la chiave “non aggiornare”. Non so perché sia così. La voce interna suggerisce che lo sviluppatore dovrebbe avere un approccio uniforme in qualsiasi tipo di distribuzione. Ma qui probabilmente questo aspetto non è critico. La trasmissione del login non è obbligatoria, verrà caricata dalle impostazioni. La differenza sarà solo nell’aggiornamento automatico del software. E, per inciso, l’utente in un caso vedrà una notifica che Telegram deve essere aggiornato, mentre nell’altro l’applicazione verrà aggiornata automaticamente e attende il riavvio (ma non è certo).

In sintesi, abbiamo scoperto che entrambi gli iconi puntano allo stesso esemplare di Telegram, e questo è il punto principale. Ora potremmo rimuovere uno dei due, dato che l’applicazione e le impostazioni (profilo) sono comuni.

Proviamo a rimuovere quello meno bello:

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

NON RIMUOVERE il file. Nascondere l’icona si fa in modo diverso!

Rimozione dell’icona Telegram dal menu (mantenendo l’applicazione e il servizio)

Aggiungere il parametro Hidden=true nella sezione [Desktop Entry] del file:

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

Nota: questa è una comanda semplificata. Non tiene conto se la riga esista già nel file (in caso di ripetuto esecuzione) o meno. Ma duplicati non sono un problema.

La modifica verrà applicata immediatamente — l’icona scomparirà dal menu. Per ripristinare l’icona, rimuovere solo la riga appena aggiunta (indicata dalla freccia).