# Как удалить значок приложения из меню Ubuntu и Способы установки приложений
**Category:** [Школа](https://discuss.rabkesov.ru/c/school/13)
**Created:** 2025-11-27 20:00 UTC
**Views:** 6
**Replies:** 0
**URL:** https://discuss.rabkesov.ru/t/kak-udalit-znachok-prilozheniya-iz-menyu-ubuntu-i-sposoby-ustanovki-prilozhenij/278
---
## Post #1 by @ivan
### Введение
Допустим, у вас в Ubuntu в меню приложений появились значки, которые вы хотите:
1. Удалить вместе с приложением - рассмотрим отдельно.
2. Удалить только значок - рассматривается здесь.

В данном примере я хочу удалить значок Telegram или Telegram Desktop, не трогая само приложение.
### Способы установки
При этом вы не помните, каким образом вы проводили установку. А это может быть один из способов:
| № | Способ установки | Как распознать | Как удалить (терминал) | Особенности / Риски |
|---|---------------------------------------|--------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| 1 | Встроенный репозиторий | `apt policy имя` → `archive.ubuntu.com` | `sudo apt remove --purge имя && sudo apt autoremove` | Безопасно, но `autoremove` может затронуть другие пакеты — проверяйте. |
| 2 | Подключённый репозиторий (PPA и др.) | `apt policy имя` → сторонний URL
Файл в `/etc/apt/sources.list.d/` | 1. `sudo apt remove имя`
2. Удалить `.list` + ключ
3. `sudo apt update` | Удаляйте пакет **до** репозитория — иначе ошибки `apt`. |
| 3 | `.deb`-пакет | `dpkg -l \| grep имя` | `sudo apt remove --purge имя` (лучше, чем `dpkg -P`) | `apt` управляет зависимостями, `dpkg` — нет. |
| 4 | Snap | `snap list \| grep имя`
`which имя` → `/snap/bin/имя` | `sudo snap remove имя` | Изолирован, но тяжёлый. Автообновляется. |
| 5 | Flatpak | `flatpak list \| grep имя` | `flatpak uninstall имя && flatpak remove --unused` | Runtime остаётся — чистите `--unused`. |
| 6 | Готовый бинарник (AppImage, `.tar.gz`)| Нет в `apt/dpkg/snap`
Бинарник в `~/Apps/`, `/opt/`, `~/.local/bin/` | `rm -rf /путь/к/программе ~/.local/share/applications/имя.desktop ~/.config/имя/` | Нет централизованного управления — легко "забыть" о чём-то. |
| 7 | `.run`-установщик | Запускался `sudo ./имя.run`
Есть `/opt/имя/`, `uninstall.sh` | 1. `sudo /opt/имя/uninstall.sh`
2. Иначе вручную — `/opt/`, `/usr/bin/`, `.desktop`, `systemd`, `~/.config/` | Наиболее "грязный" способ. Часто не оставляет uninstall-скрипта. |
| 8 | Компиляция (`make install`) | `which имя` → `/usr/local/bin/` | 1. `make uninstall` (если есть)
2. Иначе — ручное удаление или `checkinstall` в будущем | **Высокий риск засорения**. Используйте `checkinstall` или `stow`. |
| 9 | Менеджеры (`pipx`, `cargo`, `npm -g`)| `which имя` → `~/.local/bin/`, `~/.cargo/bin/` | `pipx uninstall имя`, `cargo uninstall имя`, `npm uninstall -g имя` | Не ломает систему, но может конфликтовать с `apt`-версиями (например, `node`). |
Это неполный список, и я надеюсь, что другие варианты вы использовать не будете :slight_smile:
- go install, gem install
- Docker / Podman-образы с GUI
- Установка через linuxbrew / nix / guix
### Что не считается отдельным способом
* **`apt install ./file.deb`** → это всё равно установка `.deb` -пакета, просто через `apt` , а не `dpkg` .
* **GUI-установщики (Software Center, Discover)** → фронтенд для `apt` /`snap` /`flatpak` .
* **«Добавить в автозагрузку» / `systemd --user`** → это уже **послеустановочная настройка** , а не способ установки.
### Как быстро определить способ установки неизвестной программы?
```
# 1. Где лежит бинарник?
which имя
# 2. Откуда пришёл пакет (если из apt/dpkg)
dpkg -S $(which имя) 2>/dev/null || echo "Not in dpkg"
# 3. Проверить snap/flatpak
snap list | grep -i имя
flatpak list | grep -i имя
# 4. Проверить, не в ~/.local/bin или /opt
ls -l $(which имя)
# 5. История установки (если недавно)
grep "install.*имя" /var/log/apt/history.log 2>/dev/null
journalctl --since "2 weeks ago" | grep -i "install.*имя"
```
### Советы для чистой системы:
* Для `.run` -программ в будущем -- рассмотрите **AppImage** или **изоляцию через `bubblewrap` /`toolbox`** .
* Вместо `make install` используйте `checkinstall` → создаёт `.deb` , легко удалить через `apt` .
* Управляйте пользовательскими `.desktop` -файлами через `~/.local/share/applications/` -- они всегда переопределят системные.
### Где лежат все файлы значков для меню приложений?
Это не значок, а стартовый скрипт. Похожий на те, которые используются для запуска служб ([помните?](https://discuss.rabkesov.ru/t/razvertyvanie-lm-studio-kak-servisa-v-ubuntu-25-04/215#p-397-systemd-4))
Одно из мест:
```
/usr/share/applications/
```
### Анализ приложения 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
```
Отсюда видно, что исполняемый файл находится в
```
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
```
Теперь ясно, что подпись у этого значка `Telegram Desktop`.
Указание идет на файл `/opt/telegram/Telegram`. Он подозрительно мал, 55 байт посмотрим что в нем:
```
cat /opt/telegram/Telegram
#!/usr/bin/env bash
/opt/telegram/telegram -noupdate $@
```
Это wrapper-скрипт (wrap=обертка), который в свою очередь вызывает `/opt/telegram/telegram` с флагом командной строки, который говорит Telegram не проверять и не устанавливать обновления автоматически.
`$@` это специальная переменная, которая раскрывается в отдельные аргументы, переданные скрипту. Рекомендуют все-таки использовать эту конструкцию в двойных кавычках, чтобы избежать проблем, когда в аргументе окажется пробел. Но видимо тут это исключено, так как там используется то ли никнейм, то ли логин, в которых запрещены пробелы и спецсимволы.
Файл `/opt/telegram/telegram` является исполняемым - у него стоит атрибут `x` (для папки такой атрибут означает другое - сквозь такую папку можно пройти насквозь, даже если у пользователя нет прав на чтение содержимого этой папки.
**:backhand_index_pointing_right: это только один из значков** и что с ним связано. Пока неясно, каким образом было установлено приложение. По таблице как будто это был run-установщик, но точно нет. Телега поставляется либо как snap в магазине приложений, либо как tar.gz архив. Вот на второе похоже больше.
Чтобы найти файлы **второе приложение**, воспользуемся командой `whence`.
### whence
Вообще-то это не команда, а алиас (это когда под словом команды скрывается много строк кода).
Откройте ваш `~/.bash_aliases` - если файл не существует, то создайте его. Добавьте в него эти строки:
``` bash
# whence — быстрая проверка способа установки
whence() {
local prog="$1"
[ -z "$prog" ] && { echo "Usage: whence "; 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 '—')"
}
```
Так устроено, что `.bash_aliases` вызывается в файле `~/.bashrc`. Поэтому после внесения изменений в файл, примените их (эти изменения прилетят только в тот терминал, где вы запустите команду ниже (или применятся при новом логине в систему)
```
source ~/.bashrc
```
внешне ничего не изменится, но в сеансе появятся новые переменные и алиасы.
Проверьте:
```bash
whence telegram
=== telegram ===
• which: —
• snap: —
• flatpak:
• dpkg:
• .desktop: /home/ivan/.local/share/applications/org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop
```
Вы можете заметить, что файл `.desktop` здесь находится не в системном каталоге `/usr/share/applications/`, а в домашнем (смотрите, сколько там всего):
```
ls -l ~/.local/share/applications/
-rwxrwxr-x 1 ivan ivan 579 Nov 8 16:22 org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop
```
Пока нас интересует содержимое этого файла:
```
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
```
Подпись у этого значка `Telegram` (без Desktop).
Скрипт указывает ... на ТОТ ЖЕ исполняемый файл `/opt/telegram/telegram`, только без передачи переменной и ключа "не обновляться". Я не знаю, почему так. Внутренний голос говорит, что у разработчика должно быть однообразно при любых вариантах развертывания. Но тут наверное этот момент не является критичным. Передача логина необязательна, это подтянется из настроек. Отличие будет лишь в автообновлении ПО. И кстати пользователь в одном случае увидит плашку, что Телеграм нужно обновить, а в другом приложение обновится само и будет ждать перезапуска (но это не точно).
В общем, мы нашли, что оба значка ведут к одному и тому же экземпляру Телеграм, а это самое главное. Теперь может удалим один из них, раз прога у них общая и настройки (профиль) тоже.
Давайте удалим наименее красивый:
```
~/.local/share/applications/org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop
```
**НЕ УДАЛЯЙТЕ** файл. Скрытие значка делается по-другому!
### Удаление только значка Telegram из меню (оставив программу и сервис)
В скрипт вносится параметр `Hidden=true` в секцию [Desktop Entry] :
```
sed -i '/^\[Desktop Entry\]$/a Hidden=true' ~/.local/share/applications/org.telegram.desktop._18faa92ddda377ceaa5a576303af9e59.desktop
```

>Обратите внимание, это упрощенная команда. Она не учитывает, есть ли такая строка в файле (при повторном запуске) или еще нет. Но дубликат не страшен.
Изменение применится моментально - значок исчезнет из меню. Чтобы вернуть значок, удалите только что добавленную строку (отмечена стрелкой).
---
**Canonical:** https://discuss.rabkesov.ru/t/kak-udalit-znachok-prilozheniya-iz-menyu-ubuntu-i-sposoby-ustanovki-prilozhenij/278
**Original content:** https://discuss.rabkesov.ru/t/kak-udalit-znachok-prilozheniya-iz-menyu-ubuntu-i-sposoby-ustanovki-prilozhenij/278