Respostas:
Você pode usar o seguinte comando para listar ícones de aplicativos vinculados a programas inexistentes:
for i in {/usr,~/.local}/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || echo $i; done
Eu suspeito que você descobrirá que a maioria de seus ícones são personalizados na sua pasta pessoal, pois eles não são limpos automaticamente pelo gerenciador de pacotes. Se esse for o caso, e você gostaria de lixeira todos de uma vez, você pode usar uma modificação do comando anterior:
for i in ~/.local/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || trash $i; done
Ou, é claro, navegue ~/.local/share/applications/
no Nautilus e jogue-o fora na interface gráfica.
Se por menu inicial você quer dizer o menu 'Aplicativos', você pode editá-lo indo para: Sistema -> Preferências -> Menu Principal.
Você pode adicionar, reorganizar, editar e excluir entradas à vontade.
Quando um aplicativo é desinstalado, ele deve remover os itens de menu instalados. E funciona assim na minha máquina.
Se funcionar de maneira diferente, é um bug de um pacote específico ou um problema no seu sistema. Não acredito que você tenha mais de 40 órfãos. Seria o sintoma de um problema.
Bem, este é difícil, mas eu quero, pelo menos, dizer qual é o problema.
O Gnome armazena os aplicativos instalados em / usr / share / applications com arquivos terminados em .desktop (então o programa vlc é iniciado pelo vlc.desktop)
Dentro de cada um, há uma seção "Categoria" na qual você pode definir em que parte do menu Aplicativos é o programa que deseja que seja. A questão é: a única maneira que eu acho que pode ser feito o que você está pedindo é usando um script bash que pergunte se o pacote relacionado a esse .desktop está instalado ou não. caso contrário, exclua esse arquivo .desktop. Quando você exclui o arquivo, ele fica fora do menu e, quando o aplicativo está em uma categoria, esse não é mostrado.
Esse está um pouco fora do meu escopo, porque todo comando (dpkg, apt-get, etc.) sempre retorna uma boa saída quando diz que o pacote não está instalado, por isso precisamos ler a saída desse aplicativo procurando por uma String (fi "não instalado"), verifique e, se a String existir, significa que o aplicativo não está instalado e o .desktop pode ser excluído.
Então, se você quiser, basta entrar na pasta (/ usr / share / applications) e clicar nos arquivos que correspondem aos programas. Eles desaparecerão do menu Aplicativos. Para fazer isso automaticamente, acho que precisamos de um bom script bash na faixa que eu disse.
Espero que isso ajude de algum jeito.
Alternativo:
Após a resposta @ ændrük, aqui está uma solução semelhante que suporta espaços no caminho e nas subpastas , que pode ser usada em uma pasta específica ou em todo o disco para procurar .desktop
arquivos quebrados (atalho)
find {/usr,~/.local,/usr/local,}/share/applications/ -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
Para todo o disco
find / -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
Nota: que qualquer método pode mostrar arquivos de verificação falso positivo encontrados duas vezes antes de excluí-los
Esta pode ser uma pergunta antiga, mas achei que deveria concordar de qualquer maneira, já que tinha o mesmo problema, mas nenhuma dessas sugestões funcionou, mas encontrei na internet uma pessoa muito inteligente que conhecia um programa chamado Alacarte (edição fácil de menus do GNOME) programa instalado usando o gerenciador de software e estou emocionado por ainda estar disponível porque ele foi instalado por padrão, mas não é agora e não é um programa conhecido, mas estou tão feliz por ele ainda estar disponível via gerenciador de software e tão fácil de usar, basta clicar para destacar a entrada do programa desinstalado da qual você deseja se livrar e clicar em excluir à direita e pronto. talvez isso ajude se essas outras sugestões não funcionarem para você