Liste der installierten Apps abrufen (KEINE Pakete)

Liste der installierten Apps abrufen (KEINE Pakete)

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 gconftooloder 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

verwandte Informationen