Введение
Допустим, у вас в Ubuntu в меню приложений появились значки, которые вы хотите:
- Удалить вместе с приложением - рассмотрим отдельно.
- Удалить только значок - рассматривается здесь.
В данном примере я хочу удалить значок 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.sh2. Иначе вручную — /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). |
Это неполный список, и я надеюсь, что другие варианты вы использовать не будете ![]()
- 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/– они всегда переопределят системные.
Где лежат все файлы значков для меню приложений?
Это не значок, а стартовый скрипт. Похожий на те, которые используются для запуска служб (помните?)
Одно из мест:
/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 (для папки такой атрибут означает другое - сквозь такую папку можно пройти насквозь, даже если у пользователя нет прав на чтение содержимого этой папки.
это только один из значков и что с ним связано. Пока неясно, каким образом было установлено приложение. По таблице как будто это был run-установщик, но точно нет. Телега поставляется либо как snap в магазине приложений, либо как tar.gz архив. Вот на второе похоже больше.
Чтобы найти файлы второе приложение, воспользуемся командой whence.
whence
Вообще-то это не команда, а алиас (это когда под словом команды скрывается много строк кода).
Откройте ваш ~/.bash_aliases - если файл не существует, то создайте его. Добавьте в него эти строки:
# whence — быстрая проверка способа установки
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 '—')"
}
Так устроено, что .bash_aliases вызывается в файле ~/.bashrc. Поэтому после внесения изменений в файл, примените их (эти изменения прилетят только в тот терминал, где вы запустите команду ниже (или применятся при новом логине в систему)
source ~/.bashrc
внешне ничего не изменится, но в сеансе появятся новые переменные и алиасы.
Проверьте:
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
Обратите внимание, это упрощенная команда. Она не учитывает, есть ли такая строка в файле (при повторном запуске) или еще нет. Но дубликат не страшен.
Изменение применится моментально - значок исчезнет из меню. Чтобы вернуть значок, удалите только что добавленную строку (отмечена стрелкой).

