Как я могу удалить осиротевшие пункты меню Пуск?

14

По какой-то причине у меня есть куча оставшихся пунктов меню «Пуск» из приложений (например, Gnome Do, Synapse, Leafpad.), И мне было интересно, есть ли способ удалить все потерянные записи для приложений, которые больше не установлены?

Алан
источник

Ответы:

33

Вы можете использовать следующую команду для отображения значков приложений, которые ссылаются на несуществующие программы:

for i in {/usr,~/.local}/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || echo $i; done

Я подозреваю, что вы обнаружите, что большинство ваших значков являются настроенными в вашей домашней папке, поскольку они не очищаются менеджером пакетов автоматически. Если это так, и вы хотите удалить Установите trash-cli их все сразу, вы можете использовать модификацию предыдущей команды:

for i in ~/.local/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || trash $i; done

Или, конечно, найдите ~/.local/share/applications/в Nautilus и удалите их через графический интерфейс.

ændrük
источник
Это сделало трюк! Можно ли как-нибудь превратить это в ярлык, который я могу запустить, когда такое случится снова?
Алан
3

Если под меню «Пуск» имеется в виду меню «Приложения», вы можете отредактировать его, выбрав: Система -> Настройки -> Главное меню.

Вы можете добавлять, переставлять, редактировать и удалять записи по желанию.

Эухенио Переа
источник
Привет, Эухенио. Это правильно, но я должен просмотреть каждый из них, подтвердить, действительно ли он осиротел или нет, а затем удалить его. Я ищу способ сделать все это для меня, так как у меня есть около 40+ записей, которые я хочу удалить.
Алан
Наверное, самый дружелюбный ответ. +1
tir38
3

Когда приложение удалено, оно должно удалить пункты меню, которые оно установило. И так работает на моей машине.

Если это работает по-другому, это ошибка определенного пакета или проблема в вашей системе. Я не могу поверить, что у вас есть более 40 записей сиротами. Это было бы симптомом проблемы.

enzotib
источник
Это очень странно, у меня никогда не было этой проблемы, пока я не перешел на Натти Нарвал. Я могу понизить рейтинг до 10.04LTS и немного подождать, пока 11.04 не станет более безошибочным.
Алан
Существуют программы, которые активно устанавливаются самостоятельно, но сами по себе не имеют фактического установщика. Они становятся сиротами, если бинарный файл перемещен.
Заостренный
2

Ну, это сложно, но я хочу, по крайней мере, сказать вам, в чем проблема.

Gnome хранит установленные приложения в / usr / share / apps с файлами, оканчивающимися на .desktop (поэтому программа vlc запускается vlc.desktop)

Внутри каждого есть раздел «Категория», в котором вы можете указать, в какой части меню «Приложения» эта программа должна быть. Дело в том, что единственный способ, которым я думаю, что это может быть сделано, - это использовать bash-скрипт, который спрашивает, установлен ли пакет, связанный с этим .desktop, или нет. если это не так, удалите этот файл .desktop. Когда вы удаляете файл, он будет вне меню, а когда ваше приложение находится в категории, оно не будет отображаться.

Это немного выходит за рамки моей компетенции, потому что каждая команда (dpkg, apt-get и т. Д.) Всегда возвращает хороший выход, когда говорят, что пакет не установлен, поэтому мы должны прочитать выход из этого приложения, ища строку (например, «не установлена»), проверьте ее, и если строка существует, это означает, что приложение не установлено и файл .desktop можно удалить.

Итак, если вы хотите, вы можете просто войти в папку (/ usr / share / Applications) и щелкнуть по файлам, которые соответствуют программам. Они исчезнут из меню приложений. Чтобы сделать это автоматически, я думаю, нам нужен хороший bash-скрипт на треке, который я сказал.

Я надеюсь, что это поможет в некотором роде.

Дэвид Рандо
источник
Привет Дэвид, спасибо за вашу помощь! Этот совет о переходе в / usr / share / apps, безусловно, экономит время по сравнению с удалением неработающих ссылок по одному в редакторе меню.
Алан
0

Альтернатива:

После ответа @ ændrük, вот аналогичное решение, которое поддерживает пробелы в пути и подпапках , его можно использовать в определенной папке или на всем диске для поиска поврежденных .desktopфайлов (ярлык)

find {/usr,~/.local,/usr/local,}/share/applications/ -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line;  done

Для всего диска

find / -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line;  done

Обратите внимание: что любой метод может показать ложную положительную проверку дважды найденных файлов перед их удалением

intika
источник
0

Это может быть старый опубликованный вопрос, но я подумал, что мне следует в любом случае ответить, поскольку у меня возникла та же проблема, однако ни одно из этих предложений не сработало, но я нашел в Интернете очень умного человека, который знал о программе под названием Alacarte (простое редактирование меню GNOME) Запрограммируйте его с помощью диспетчера программного обеспечения, и я очень рад, что он по-прежнему доступен, потому что он по умолчанию используется для установки, но не сейчас и не является широко известной программой, но я так рад, что он по-прежнему доступен через диспетчер программного обеспечения и настолько простой в использовании, просто нажмите, чтобы выделить удаленную запись программы, от которой вы хотите избавиться, и нажмите «Удалить» справа, и все готово. может быть, это поможет, если эти другие предложения не работают для вас

кругозор
источник