コンテキスト
私はGNOME 3.22を使用しており、すべてのデスクトップファイルをグループ化したいと思います。これを行うには、アプリケーションメニューのすべてのデスクトップファイルを一覧表示し、次のコマンドを使用する必要がありました。このガイドそれらを整理します。
これらのデスクトップファイルを含む3つの場所が見つかりました。
~/.local/share/applications
~/.local/share/flatpak/exports/share/applications
/usr/share/applications
使用このスクリプト、私は半分の成功を収めた。しかし、まだどのグループにも属さないいくつかの項目があります。
このデスクトップファイルにはフィールドがないため、
Categories
カテゴリ別に管理できません。このデスクトップファイルは上記のディレクトリに属していないため、名前を呼び出すことはできません。
質問
明らかに、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 ドキュメントのメソッドを参照してください。name
display_name
commandline
executable
description
get_*
Gio.AppInfo.get_commandline存在する。
、プラス:、、などのDesktopAppInfo
すべて。よりAppInfo
categories
generic_name
keywords
startup_wm_class
Gio.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
これがいつか他の人に役立つことを願っています。