Je veux une liste des applications installées dans mon système, cependant, je veux seulement celles listées selon le menu de démarrage.
Je ne suis pas intéressé par une liste de packages/dépendances, etc. donc ce qui suit n'est pas très utile:
dpkg --get-selections | grep -v deinstall
This est un peu plus proche.
for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done
Cependant, les noms ne correspondent pas exactement à ce qui est dans le menu et il ne répond pas à mon autre critère de regroupement.
par exemple. Je veux voir
Graphics
GIMP Image Editor
ne pas
gimp
Donc, pour résumer, ce que je recherche, c'est un moyen de sauvegarder dans un fichier texte ce qu'Alacarte affiche.
Le script python ci-dessous lit les noms d'interface (anglais ou international *) de tous les fichiers de bureau dans /usr/share/applications
, ainsi que leur section Categories
. Il répertorie toutes les applications trouvées, selon leurs catégories. Étant donné que de nombreuses applications ont plusieurs catégories, les applications peuvent apparaître dans plusieurs catégories.
Si l'application n'a pas de Categories=
mention, il est mentionné dans la section Uncategorized
dans la liste.
* Note Certaines applications (comme Thunderbird) ont une longue liste de noms d'interface, pour chaque langue. Ce script, tel qu'il est, lit le premier nom d'interface, qui est celui utilisé à l'échelle internationale. Le script peut être modifié pour lire le nom dans une langue spécifique (si présente), ou lire automatiquement la langue du système, mais cela nécessiterait un codage un peu plus étendu:)
Pour l'utiliser:
Copiez le script ci-dessous, collez-le dans un fichier vide, enregistrez-le sous applist.py
. exécutez-le par la commande (dans une fenêtre de terminal):
python3 /path/to/script/applist.py
Le script:
#!/usr/bin/env python3
import os
uncategorized = []
categories = []
data = []
for item in os.listdir("/usr/share/applications"):
if item.endswith(".desktop"):
with open("/usr/share/applications/"+item) as data_source:
lines = data_source.readlines()
interface_name = [l.replace("\n", "").replace("Name=", "") \
for l in lines if l.startswith("Name=")][0]
if len([l for l in lines if l.startswith("Categories")]) == 0:
uncategorized.append(interface_name)
else:
subcats = [item for item in [l.replace("\n", "").replace(
"Categories=", "") for l in lines if l.startswith(
"Categories=")][0].split(";") if item != ""]
data.append([interface_name, subcats])
categories = categories + subcats
categories = sorted([item for item in set(categories)])
for item in categories:
applications = [subdata[0] for subdata in data if item in subdata[1]]
print(item)
for app in applications:
print(" "+app)
print("Uncategorized")
for item in uncategorized:
print(" "+item)
Pour donner une impression de la sortie:
Une petite section de ma sortie:
Audio
Audacity
MuseScore
PulseAudio Volume Control
Rhythmbox
AudioVideo
Cheese
VLC media player
Audacity
Rhythmbox
MuseScore
Videos
OpenShot Video Editor
Brasero
PulseAudio Volume Control
Rhythmbox
AudioVideoEditing
Audacity
MuseScore
OpenShot Video Editor
BoardGame
Mahjongg
Calculator
Calculator
Le script suivant donnera une sortie très similaire à ce que vous voulez.
var=$(echo $(for f in /usr/share/applications/*.desktop;do cat $f|grep -i categories|sed -e 's/Categories=//g;s/\;/\n/g';done|sort|uniq))
for n in $var
do
echo $n
for f in /usr/share/applications/*.desktop
do
echo -e -n "\t" $f|sed -e 's!/usr/share/applications/!!g;s/.desktop/::/g'
echo $(cat $f |grep -i categories|sed -e 's/Categories=//g;s/\;/:/g')
done |grep -i :$n: |sed s/'::.*'//
done
Donnera la sortie comme
...
Development
bluefish
boa-constructor
Eclipse
gambas3
GNUSim8085
python2.7
python3.2
qtcreator
ubuntusdk
DiscBurning
brasero
furiusisomount
Documentation
Yelp
...
Explication
var
: stocke la liste de toutes les catégories possibles.J'ai également essayé un autre script qui génère le vrai nom (GIMP Image Editor) plutôt que le nom du package (gimp) mais il donne des résultats étranges car certains fichiers de bureau ne contiennent pas de nouvelles lignes
Si vous exécutez ceci:
dpkg-query -W --showformat='${Package} ${Version} ${Section}\n' > filesystem.manifest
Ensuite, filesystem.manifest ressemble à ceci:
abiword-common 2.9.2+svn20120213-1 editors
accountsservice 0.6.15-2ubuntu9.7 admin
acl 2.2.51-5ubuntu1 utils
acpi-support 0.140.1 admin
acpid 1:2.0.10-1ubuntu3 admin
activity-log-manager-common 0.9.4-0ubuntu3.2 utils
activity-log-manager-control-center 0.9.4-0ubuntu3.2 utils
adduser 3.113ubuntu2 admin
adium-theme-ubuntu 0.3.2-0ubuntu1 gnome
Cela montre tous les détails d'une application.
apt-cache show zim