# Как удалить значок приложения из меню 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. Удалить только значок - рассматривается здесь. ![На изображении показан интерфейс с иконками различных программ и приложений, включая Python, Telegram и другие, с выделенной кнопкой в левом нижнем углу, на которую указывают две оранжевые стрелки. (Подпись к изображению от AI)|500x218](upload://vg08CljUiWclRI1wD8XnNetBEU0.png) В данном примере я хочу удалить значок 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 ``` ![На изображении показан конфигурационный файл desktop-записи для приложения Telegram, в котором отмечено, что он скрыт от пользователей. (Подпись к изображению от AI)|536x414](upload://oy5UHG6BpybSBCF33LMF1AIklHl.png) >Обратите внимание, это упрощенная команда. Она не учитывает, есть ли такая строка в файле (при повторном запуске) или еще нет. Но дубликат не страшен. Изменение применится моментально - значок исчезнет из меню. Чтобы вернуть значок, удалите только что добавленную строку (отмечена стрелкой). --- **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