我应该如何处理两个看似冲突的 XDG Desktop Entry 要求?

我应该如何处理两个看似冲突的 XDG Desktop Entry 要求?

根据我的理解文件命名部分在 XDG 桌面条目规范中,我应该.desktop按照反向 DNS 表示法命名我的文件:

桌面条目的名称应遵循“反向 DNS”约定:应以应用程序作者控制的反向 DNS 域名开头(小写)。域名后面应该跟有应用程序的名称,通常采用连在一起的单词和首字母大写的形式(驼峰式命名法)。例如,如果 example.org 的所有者写入“Foo Viewer”,他们可能会选择名称 org.example.FooViewer,从而生成名为 org.example.FooViewer.desktop 的文件。

以这种方式命名桌面文件并将其放入XDG_DATA_HOME/applications然后运行xdg-desktop-menu forceupdate确实会导致我的应用程序出现在所有常见的地方..除了 gnome。由于某种原因,我的应用程序不会出现在“推荐应用程序”中,Gnome 相当于其他文件管理器/桌面环境中的“打开方式...”。

桌面根据 有效desktop-file-validate

经过大量挖掘后,我发现了使用另一个程序xdg-desktop-menu install来验证文件的建议。当我这样做时,它产生了以下错误:

xdg-desktop-menu:文件名“org.example.FooViewer.desktop”没有正确的供应商前缀供应商前缀由字母字符([a-zA-Z])组成,并以破折号(“-”)结尾。示例文件名为“example-org.example.FooViewer.desktop”,使用 --novendor 覆盖或使用“xdg-desktop-menu --manual”获取其他信息。

当我通过删除反向 DNS 符号并仅命名该文件来尝试此操作时example-FooViewer.desktop,它最终出现在 gnome 中。

现在我很困惑。当我根据规范命名文件时,为什么 gnome 会崩溃?xdg-desktop-menu尽管该文件符合规范,为什么仍拒绝处理该文件?为什么 gnome 不会破坏其他类似名称的桌面条目文件 - 所有 Flatpaks 都显示在 gnome 的“打开方式”菜单中,尽管它们的桌面条目以反向 DNS 表示法命名,并且大多数不包含供应商前缀或单个破折号!

这里发生了什么?作为独立的第三方打包商我应该如何处理这个冲突?我错过了什么吗?

答案1

为什么 xdg-desktop-menu 拒绝处理该文件,尽管它符合规范?

因为 xdg-desktop-menu 对供应商前缀的检查并没有精确实现您在 OP 中引用的规范中指定的条件。

正如我们可以读到的函数的代码check_vendor_prefix()(从第521行开始),成功通过的条件由以下测试触发:

case "$file" in
   [a-zA-Z]*-*)

如果作为命令参数给出的文件名以字母字符开头,则大小写匹配并且至少包含一个破折号

而且 中没有破折号org.example.FooViewer.desktop

因此,如果您希望用于xdg-desktop-menu安装 .desktop 文件,只需按照错误消息中给出的建议进行操作即可:

使用 --novendor 覆盖 update-desktop-database


为什么 gnome 不会破坏其他类似名称的桌面条目文件 - 所有 Flatpaks 都显示在 gnome 的“打开方式”菜单中

我无法判断您的其他桌面条目,但扁平包安装会触发执行:

相关内容