설치된 애플리케이션 목록 가져오기(패키지 아님)

설치된 애플리케이션 목록 가져오기(패키지 아님)

자체 파서를 작성하지 않고 설치된 애플리케이션 목록(/usr/share/applications/에 있는 파일 기반)을 어떻게 얻을 수 있습니까? 애플리케이션 이름, 애플리케이션 아이콘 경로, 애플리케이션 실행 경로만 있으면 됩니다.

저는 C++ 및 Qt 라이브러리를 사용하고 있습니다. 물론 쉘 명령이나 그와 유사한 것을 작성할 수도 있습니다.

답변1

다음은 도움이 될 수 있는 빠르고 간단한 쉘 스크립트입니다. 출력을 쉽게 구문 분석할 수 있는 형식으로 지정합니다. 올바른 아이콘을 찾으면 몇 가지 개선 사항을 사용하여 가장 높은 해상도의 이미지를 선택할 수 있습니다. 어쩌면 최고의 아이콘 사용법을 얻는 더 좋은 방법이 있을 수도 있습니다 gconftool. 모르겠습니다.

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

답변2

내가 아는 한 /usr/share/applications/그렇다.난쟁이창 관리자에만 해당되며 시스템의 모든 응용 프로그램에 대한 항목을 포함하지 않습니다(그런데 응용 프로그램의 의미를 정의해야 합니다).

어떤 경우든 디렉토리에 있는 항목만 나열할 수 있습니다.

관련 정보