Obtener una lista de aplicaciones instaladas (NO paquetes)

Obtener una lista de aplicaciones instaladas (NO paquetes)

¿Cómo puedo obtener una lista de aplicaciones instaladas (basadas en archivos en /usr/share/applications/) sin escribir mi propio analizador? Solo necesito el nombre de la aplicación, la ruta al ícono de la aplicación y la ruta para iniciar la aplicación.

Estoy usando C++ con bibliotecas Qt. Por supuesto, puedes escribirme un comando de shell o algo parecido.

Respuesta1

Aquí tienes un script de shell rápido y sencillo que podría ayudarte. Ajuste el formato de salida a algo que le resulte fácil de analizar. Encontrar el ícono correcto podría necesitar algunas mejoras para seleccionar la imagen de mayor resolución. Tal vez haya una mejor manera de obtener el ícono óptimo gconftoolo algo así, no lo sé.

#!/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

Respuesta2

Por lo que recuerdo /usr/share/applications/esGnomoEl administrador de Windows es específico y no contiene una entrada para cada aplicación en su sistema (por cierto, debe definir qué quiere decir con aplicación).

En cualquier caso, puede enumerar las entradas en el directorio.

información relacionada