アプリケーションメニューに表示されるすべてのデスクトップファイルのリスト

アプリケーションメニューに表示されるすべてのデスクトップファイルのリスト

コンテキスト

私はGNOME 3.22を使用しており、すべてのデスクトップファイルをグループ化したいと思います。これを行うには、アプリケーションメニューのすべてのデスクトップファイルを一覧表示し、次のコマンドを使用する必要がありました。このガイドそれらを整理します。

これらのデスクトップファイルを含む3つの場所が見つかりました。

~/.local/share/applications
~/.local/share/flatpak/exports/share/applications
/usr/share/applications

使用このスクリプト、私は半分の成功を収めた。しかし、まだどのグループにも属さないいくつかの項目があります。

  • このデスクトップファイルにはフィールドがないため、Categoriesカテゴリ別に管理できません。

  • このデスクトップファイルは上記のディレクトリに属していないため、名前を呼び出すことはできません。

質問

明らかに、GNOMEは上記のディレクトリのデスクトップファイルだけをリストするものではありません。これを保存するどこかが必要です。デスクトップシェルはそれを読んですべてのアプリケーションを一覧表示できます。私はそれを見ることができません。どこにいるのか教えてもらえますか?

修正する

これは私の「戦いの半分」です。 GNOMEアプリケーションメニュー

答え1

Gioファイルシステムを直接検索する代わりに、このライブラリ(Gnomeが構築されたGtk / GObject / GLibエコシステムの一部)を使用できます。 Gnome、Xfce、MATE、CinnamonなどのGtkベースのデスクトップ環境でPythonで使用できます.giモジュールを含むPythonは何もインストールせずに利用可能でなければなりません。

from gi.repository import Gio

all_apps = Gio.AppInfo.get_all()  # Returns a list of DesktopAppInfo objects (see docs)

# For example, print display name and description of all apps
for app in all_apps:
    print(app.get_display_name())
    print(f"\t{app.get_description()}")

APIドキュメント:Gio.App情報Gio.DesktopApp情報

DesktopAppInfoから継承されました。他の種類が何であるかAppInfoわかりませんでした。AppInfo返されたオブジェクトはインスタンスGio.AppInfo.get_allのようですGio.DesktopAppInfo。私が知る限り、私たちはほとんどDesktopAppInfoインスタンスを扱っています。

これらのDesktopAppInfoオブジェクトは、システムで見つかったすべての.desktopファイルを表します。これには、*メソッドを使用してアクセスできるプロパティがあり、get_.desktopファイルのほとんどすべてを表します。

たとえば、(通常は名前と同じですが、時には異なる場合もあります)、(アプリケーションを実行するために呼び出される引数を含むコマンドライン全体)、(コマンドのみ、引数なし)などのオブジェクトのプロパティを取得AppInfoできます。 。 API ドキュメントのメソッドを参照してください。namedisplay_namecommandlineexecutabledescriptionget_*Gio.AppInfo.get_commandline存在する。

、プラス:、、などのDesktopAppInfoすべて。よりAppInfocategoriesgeneric_namekeywordsstartup_wm_classGio.DesktopAppInfo.get_action_name今後

答え2

アプリケーションメニュー検索パスの無料デスクトップ仕様は次のとおりです。ここ。あなたの質問に対する短い答えは、検索パス$ XDG_DATA_DIRSのすべてのディレクトリに「application」を追加することです。

答え3

このリンクは、「カテゴリ」フィールドを持たないデスクトップファイルに役立ちます。 https://wiki.gentoo.org/wiki/Gnome_Applications_Folders

答え4

パーティーに遅れていることはわかりますが、この回答は誰かが出席するのに役立ちます。

システムですべてのデスクトップファイルを検索するには:

find / -iname "*desktop" -type f -not -path "/media*" 2> /dev/null

上記のコマンドは、システム上のすべてのデスクトップファイルを一覧表示します。特定のアプリを見つけるには(<application-name>アプリ名または名前の一部に置き換えて削除する<>):

find / -iname "*desktop" -type f -not -path "/media*" -exec grep -il <application-name> '{}' ';' 2> /dev/null

これがいつか他の人に役立つことを願っています。

関連情報