Wie kann ich eine Liste der installierten Apps (basierend auf Dateien in /usr/share/applications/) erhalten, ohne einen eigenen Parser zu schreiben? Ich brauche nur den App-Namen, den Pfad zum App-Symbol und den Pfad zum Starten der App.
Ich verwende C++ mit Qt-Bibliotheken. Natürlich können Sie mir auch Shell-Befehle oder etwas Ähnliches schreiben.
Antwort1
Hier ist ein schnelles Shell-Skript, das Ihnen vielleicht hilft. Passen Sie das Ausgabeformat an etwas an, das für Sie leicht zu analysieren ist. Das Finden des richtigen Symbols könnte verbessert werden, um das Bild mit der höchsten Auflösung auszuwählen. Vielleicht gibt es einen besseren Weg, das optimale Symbol zu erhalten gconftool
oder so, ich weiß es nicht.
#!/bin/sh
icon_basedir1=/usr/share/icons/gnome
icon_basedir2=/usr/share/icons/hicolor
icon_basedir3=/usr/share/pixmaps
icon_basedir4=/usr/share/app-install/icons
error() {
echo $*
exit 1
}
is_icon() {
test -f "$1" && icon_path="$1" && return 0
icon_path=$(find $2 -name $1.png | sort -r | head -n 1)
test -f "$icon_path" && return 0
}
find_icon() {
test "$icon_filename" || return
is_icon $icon_filename $icon_basedir1 && return
is_icon $icon_filename $icon_basedir2 && return
is_icon $icon_filename $icon_basedir3 && return
is_icon $icon_filename $icon_basedir4 && return
}
find_name() {
test "$fullname" && name=$fullname && return 0
test "$genericname" && name=$genericname && return 0
}
find /usr/share/applications -type f -name \*.desktop | while read file; do
icon_filename=$(cat $file | grep ^Icon= | sed -ne 's/^.*=//' -e '1 p')
find_icon
executable_name=$(cat $file | grep ^Exec= | sed -ne 's/^.*=//' -e 's/ .*//' -e '1 p')
fullname=$(cat $file | grep FullName.en_ | sed -ne 's/^.*=//' -e '1 p')
genericname=$(cat $file | grep GenericName.en_ | sed -ne 's/^.*=//' -e '1 p')
name=$(cat $file | grep -i Name | sed -ne 's/^.*=//' -e '1 p')
find_name
echo app_file=$file
echo name=$name
echo executable=$(which $executable_name || echo $executable_name)
echo icon=$icon_path
echo
done
Antwort2
Soweit ich mich erinnere /usr/share/applications/
istGnomWindows-Manager-spezifisch und enthält nicht für jede Anwendung auf Ihrem System einen Eintrag (übrigens sollten Sie definieren, was Sie mit „Anwendung“ meinen).
In jedem Fall können Sie einfach die Einträge im Verzeichnis auflisten