取得已安裝應用程式的清單(不是軟體包)

取得已安裝應用程式的清單(不是軟體包)

如何在不編寫自己的解析器的情況下取得已安裝應用程式的清單(基於 /usr/share/applications/ 中的檔案)?我只需要應用程式名稱、應用程式圖示的路徑和啟動應用程式的路徑。

我正在使用 C++ 和 Qt 庫。當然,你可以寫shell指令給我或類似的東西。

答案1

這是一個快速但簡單的 shell 腳本,可能會對您有所幫助。將輸出格式調整為易於解析的格式。找到正確的圖示可以使用一些改進來選擇最高解析度的圖像。也許有更好的方法來獲得最佳圖標使用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/侏儒特定於視窗管理器,並且不包含系統上每個應用程式的條目(順便說一句,您應該定義應用程式的含義)。

在任何情況下,您都可以只列出目錄中的條目

相關內容