列出应用程序菜单中出现的所有桌面文件

列出应用程序菜单中出现的所有桌面文件

语境

我正在使用 GNOME 3.22,我想将所有桌面文件分组。为此,我必须列出应用程序菜单中出现的所有桌面文件,并使用以下命令本指南来组织他们。

我发现有 3 个地方包含这些桌面文件:

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

使用这个脚本,我成功了一半。但是,仍然有一些项目不属于任何组:

  • 这些桌面文件没有任何Categories字段,因此我无法按类别统治它们

  • 这些桌面文件不属于我上面列出的任何目录,因此我无法调用它们的名称

问题

显然,GNOME 不仅仅列出上面目录中的桌面文件。必须有某个地方存储它们,桌面 shell 只需读取它即可列出所有应用程序。我只是看不到它。你能告诉我它在哪里吗?

更新

这就是我的“成功了一半”: GNOME 应用程序菜单

答案1

Gio您可以使用该库(Gnome 构建于其上的 Gtk/GObject/GLib 生态系统的一部分),而不是自己搜索文件系统。您可以通过 Python 在任何基于 Gtk 的桌面环境(例如 Gnome、Xfce、MATE、Cinnamon 等)上使用它。带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.AppInfo,Gio.DesktopAppInfo

DesktopAppInfo继承自AppInfo.我还没有找到AppInfo可能还有哪些其他类型。返回的对象Gio.AppInfo.get_all似乎都是Gio.DesktopAppInfo实例。据我所知,我们主要是在处理DesktopAppInfo实例。

这些DesktopAppInfo对象代表它在您的系统上找到的所有 .desktop 文件。它们具有可以使用get_* 方法访问的属性,几乎代表 .desktop 文件中的所有内容。

您可以获取AppInfo对象的属性,例如namedisplay_name(通常与名称相同,但有时不同),commandline(带有调用以运行应用程序的参数的完整命令行),executable(仅命令,无参数)description等。请参阅get_*方法在 API 文档中,从Gio.AppInfo.get_commandline在。

以及DesktopAppInfo中的所有内容AppInfo,再加上:categoriesgeneric_namekeywordsstartup_wm_class等。参见Gio.DesktopAppInfo.get_action_name向前

答案2

应用程序菜单搜索路径的免费桌面规范是这里。您的问题的简短答案是将“应用程序”附加到搜索路径 $XDG_DATA_DIRS 中的每个目录。

答案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

希望有一天这可以帮助别人。

相关内容