Obtendo lista de aplicativos instalados (NÃO pacotes)

0

Como posso obter uma lista de aplicativos instalados (com base em arquivos em / usr / share / applications /) sem gravar o analisador próprio? Preciso apenas do nome do aplicativo, caminho para o ícone do aplicativo e caminho para iniciar o aplicativo.

Estou usando o C ++ com bibliotecas do Qt. Claro, você pode me escrever um comando shell ou algo parecido com isso.

    
por Ivan Akulov 15.06.2012 / 16:18

2 respostas

1

Aqui está um script de shell rápido e sujo que pode ajudá-lo. Ajuste o formato de saída para algo que seja fácil de analisar para você. Encontrar o ícone certo pode usar algumas melhorias para selecionar a imagem de maior resolução. Talvez exista uma maneira melhor de obter o ícone ideal usando gconftool ou algo assim, não sei.

#!/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
    
por 17.06.2012 / 11:06
0

Até onde eu me lembro, /usr/share/applications/ é Gnome gerenciador de janelas específico e não contém uma entrada para cada aplicação em seu sistema (BTW você deve definir o que você quer dizer com aplicação).

Em qualquer caso, você pode apenas listar as entradas no diretório

    
por 15.06.2012 / 16:26