¿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 gconftool
o 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.