Pour une raison quelconque, j'ai un tas d'entrées restantes dans le menu Démarrer provenant d'applications (par exemple, Gnome Do, Synapse, Leafpad.) et je me demandais s'il y avait un moyen de supprimer toutes les entrées orphelines pour les applications qui ne sont plus installées ?
Réponses
Trop de publicités?Vous pouvez utiliser la commande suivante pour répertorier les icônes d'application qui renvoient à des programmes inexistants :
for i in {/usr,~/.local}/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || echo $i; done
Je pense que vous constaterez que la plupart des vôtres sont des icônes personnalisées dans votre dossier personnel, car elles ne sont pas automatiquement nettoyées par le gestionnaire de paquets. Si c'est le cas et que vous souhaitez poubelle les faire en une seule fois, vous pouvez utiliser une modification de la commande précédente :
for i in ~/.local/share/applications/*.desktop; do which $(grep -Poh '(?<=Exec=).*?( |$)' $i) > /dev/null || trash $i; done
Ou bien, bien sûr, naviguer sur ~/.local/share/applications/
dans Nautilus et les mettre à la corbeille via l'interface graphique.
Lorsqu'une application est désinstallée, elle doit supprimer les éléments de menu qu'elle a installés. C'est ce qui se passe sur ma machine.
Si cela fonctionne différemment, il s'agit d'un bogue d'un paquet particulier ou d'un problème sur votre système. Je ne peux pas croire que vous ayez plus de 40 entrées orphelines. Ce serait le symptôme d'un problème.
Cette fois, c'est difficile, mais je veux au moins vous dire quel est le problème.
Gnome stocke les applications installées dans /usr/share/applications avec des fichiers terminés par .desktop (ainsi le programme vlc est lancé par vlc.desktop).
À l'intérieur de chaque programme, il y a une section "Catégorie" dans laquelle vous pouvez définir dans quelle partie du menu Applications le programme doit être placé. La seule façon de faire ce que vous demandez est d'utiliser un script bash script qui demande si le paquetage lié à ce .desktop est installé ou non. Lorsque vous supprimez le fichier, il ne sera plus dans le menu, et lorsque votre application est dans une catégorie, celle-ci n'est pas affichée.
Cette question est un peu hors de ma portée car toutes les commandes (dpkg, apt-get, etc.) renvoient toujours une bonne sortie lorsqu'elles disent que le paquet n'est pas installé, donc nous devons lire la sortie de cette application à la recherche d'une chaîne (par exemple "not installed"), la vérifier, et si la chaîne existe, cela signifie que l'application n'est pas installée et que le .desktop peut être supprimé.
Ainsi, si vous le souhaitez, vous pouvez simplement entrer dans le dossier (/usr/share/applications) et cliquer sur les fichiers correspondant aux programmes. Ils disparaîtront du menu Applications. Pour le faire automatiquement, je pense qu'il faut un bon bash script sur la piste que j'ai mentionnée.
J'espère que cela vous aidera d'une manière ou d'une autre.
Alternative :
Suite à la réponse de @ændrük, voici une solution similaire qui prise en charge des espaces dans le chemin et les sous-dossiers Cette fonction peut être utilisée sur un dossier spécifique ou sur l'ensemble du disque pour rechercher les cassures. .desktop
fichiers (raccourci)
find {/usr,~/.local,/usr/local,}/share/applications/ -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
Pour l'ensemble du disque
find / -name '*.desktop' | while read -r line; do which $(grep -Poh '(?<=Exec=).*?( |$)' $line) > /dev/null || echo $line; done
Remarque : que toute méthode peut présenter des faux positifs en vérifiant deux fois les fichiers trouvés avant de les supprimer
- Réponses précédentes
- Plus de réponses