XDG MIME 应用程序

出自 ArchWiki
(重定向自 Xdg-mime)

XDG MIME 应用程序规范 构建于 共享 MIME 数据库桌面条目 之上,以提供 默认应用程序

  1. 应用程序使用 桌面条目 描述它们可以处理的 MIME 类型。
  2. desktop-file-utils 注册了一个 pacman hook 以构建由桌面条目处理的 MIME 类型的缓存数据库,参见 update-desktop-database(1)
  3. 应用程序可以通过将 XML 文件放置在 /usr/share/mime/packages/ 中来安装新的 MIME 类型。
  4. shared-mime-info 注册了一个 pacman hook 以构建共享 MIME 信息数据库缓存,参见 update-mime-database(1)
  5. 桌面环境 和用户可以使用 mimeapps.list 文件更改默认应用程序,以及添加或删除 MIME 类型到应用程序的关联。

共享 MIME 数据库

XDG 共享 MIME 信息数据库规范 促进了跨桌面环境的共享 MIME 数据库,并允许应用程序轻松地在系统范围内注册新的 MIME 类型。

该数据库是使用 shared-mime-info 中的工具,从软件包安装在 /usr/share/mime/packages/ 中的 XML 文件构建的。

不应直接编辑 /usr/share/mime/ 中的文件,但是可以在 ~/.local/share/mime/ 树中维护一个单独的、基于每个用户的数据库。

“URI 方案处理 [..] 通过处理 x-scheme-handler/foo MIME 类型的应用程序来处理,其中 foo 是所讨论的 URI 方案。”[1]

新的 MIME 类型

此文章或章节需要扩充。

原因: 为现有 MIME 类型分配扩展名的过程是否不同? (在 Talk:XDG MIME Applications 中讨论)

此示例定义了一个新的 MIME 类型 application/x-foobar,并将其分配给任何名称以 .foo 结尾的文件。只需创建以下文件

~/.local/share/mime/packages/application-x-foobar.xml
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
    <mime-type type="application/x-foobar">
        <comment>foo file</comment>
        <icon name="application-x-foobar"/>
        <glob-deleteall/>
        <glob pattern="*.foo"/>
    </mime-type>
</mime-info>

然后更新 MIME 数据库

$ update-mime-database ~/.local/share/mime

当然,如果没有桌面条目与 MIME 类型关联,这将不会有任何效果。您可能需要创建新的 桌面条目 或修改 mimeapps.list

mimeapps.list

XDG 标准 是配置桌面环境最常用的标准。每个 MIME 类型的默认应用程序都存储在 mimeapps.list 文件中,这些文件可以存储在多个位置。它们按以下顺序搜索,较早的关联优先于较晚的关联

路径 用法
~/.config/mimeapps.list 用户覆盖
/etc/xdg/mimeapps.list 系统范围覆盖
~/.local/share/applications/mimeapps.list (已弃用) 用户覆盖
/usr/local/share/applications/mimeapps.list
/usr/share/applications/mimeapps.list
发行版提供的默认设置

此外,可以在名为 desktop-mimeapps.list 的文件中定义特定于 桌面环境 的默认应用程序,其中 desktop 是桌面环境的名称(来自 XDG_CURRENT_DESKTOP 环境变量)。例如,/etc/xdg/xfce-mimeapps.list 定义了 Xfce 的系统范围默认应用程序覆盖。这些特定于桌面的覆盖优先于相应的非桌面特定文件。例如,/etc/xdg/xfce-mimeapps.list 优先于 /etc/xdg/mimeapps.list,但仍被 ~/.config/mimeapps.list 覆盖。

提示: 尽管已弃用,但某些应用程序仍然会读取/写入 ~/.local/share/applications/mimeapps.list。为了简化维护,只需将其符号链接到 ~/.config/mimeapps.list
$ ln -s ~/.config/mimeapps.list ~/.local/share/applications/mimeapps.list
注意: 您可能还会在这些位置找到名为 defaults.list 的文件。此文件类似于 mimeapps.list,不同之处在于它仅列出默认应用程序(而不是已添加/删除的关联)。它现在已被弃用,应手动与 mimeapps.list 合并。

要发现所有扫描的文件,可以通过设置环境变量 XDG_UTILS_DEBUG_LEVEL=2 来启用调试模式:例如,xdg-mime query default <type> 命令将打印它正在搜索 MIME 信息的每个配置文件。

格式

考虑以下示例

mimeapps.list
[Added Associations]
image/jpeg=bar.desktop;baz.desktop
video/H264=bar.desktop
[Removed Associations]
video/H264=baz.desktop
[Default Applications]
image/jpeg=foo.desktop

每个部分都将一个或多个桌面条目分配给 MIME 类型。

  • 添加的关联 表示应用程序支持打开该 MIME 类型。例如,bar.desktopbaz.desktop 可以打开 JPEG 图像。这可能会影响您在文件浏览器中右键单击文件时看到的应用程序列表。
  • 移除的关联 表示应用程序不支持该 MIME 类型。例如,baz.desktop 无法打开 H.264 视频。
  • 默认应用程序 表示应用程序应是打开该 MIME 类型的默认选择。例如,JPEG 图像应使用 foo.desktop 打开。这隐式地添加了应用程序和 MIME 类型之间的关联。如果有多个应用程序,则按顺序尝试。

每个部分都是可选的,如果不需要可以省略。

工具

虽然可以直接编辑 mimeapps.list共享 MIME 数据库 来配置默认应用程序和 MIME 类型,但有很多工具可以简化此过程。这些工具也很重要,因为应用程序可能会将文件打开操作委托给这些工具,而不是尝试自行实现 MIME 类型标准。

如果您使用 桌面环境,您应该首先检查它是否提供了自己的实用程序。这应优先于这些替代方案。

官方的 xdg-utils 包含根据 XDG 标准管理 MIME 类型和默认应用程序的工具 (xdg-mime)。最重要的是,它提供了 xdg-open,许多应用程序使用它来使用其默认应用程序打开文件。

lsdesktopf

lsdesktopfAUR 提供了几种搜索 MIME 数据库和桌面 MIME 条目的方法。

例如,要查看系统中 .desktop 文件中所有 MIME 类型为 video 的 MIME 扩展名,您可以使用 lsdesktopf --gm -gx video,或者要在 XML 数据库文件中搜索,请使用 lsdesktopf --gdx -gx video。要快速了解有多少以及哪些 .desktop 文件可以与特定 MIME 类型关联,请使用 lsdesktopf --gen-mimeapps。要查看 XML 数据库文件中的所有文件名扩展名,请使用 lsdesktopf --gdx -gfx

selectdefaultapplication

selectdefaultapplication-gitAUR 是一个 GUI 应用程序,它列出了所有支持各种 MIME 类型的应用程序,并让您快速将其设置为它支持的所有或某些 MIME 类型的默认应用程序(通过修改 mimeapps.list)。

它还显示“可读”名称和文件扩展名,因此您无需记住 MIME 类型的名称。

故障排除

如果文件未由您期望的默认应用程序打开,则可能有多种可能的原因。您可能需要检查每种情况。

缺少桌面条目

需要 桌面条目 才能将应用程序与 MIME 类型关联。确保存在这样的条目,并且可以用于(手动)在应用程序中打开文件。

缺少关联

如果应用程序的桌面条目未在其 MimeType 键下指定 MIME 类型,则在需要应用程序打开该类型时将不会考虑它。编辑 mimeapps.list 以在 .desktop 文件和 MIME 类型之间添加关联。

非默认应用程序

如果桌面条目与 MIME 类型关联,则它可能只是未设置为默认值。编辑 mimeapps.list 以设置默认关联。

非标准关联

应用程序可以自由地忽略或仅部分实现 XDG 标准。检查是否使用了已弃用的文件,例如 ~/.local/share/applications/mimeapps.list~/.local/share/applications/defaults.list。如果您尝试从另一个应用程序(例如 Web 浏览器或文件管理器)打开文件,请检查该应用程序是否具有自己的选择默认应用程序的方法。

.desktop 文件中影响应用程序启动的变量

此文章或章节需要扩充。

原因: MimeType 条目可能在桌面文件中缺失的事实在这里只是暗示,即“即使应用程序...”,尽管这是错误的常见原因。某些打开器也可能关联未在桌面文件中显式列出的 MIME 类型(例如 exo)。还有更多特定于环境的因素在起作用,例如 Terminal=true 是否有影响,尽管后者应该在 桌面条目 中进行扩展说明。 (在 Talk:XDG MIME Applications 中讨论)

支持规范的桌面环境和文件管理器根据 .desktop 文件中的定义启动程序。请参阅 桌面条目#应用程序条目

通常,不需要配置打包的 .desktop 文件,但它可能并非没有错误。即使应用程序在用于关联的 .desktop 文件 MimeType 变量中包含必要的 MIME 类型描述,它也可能无法正确启动、根本无法启动或在不打开文件的情况下启动。

例如,如果 Exec 变量缺少打开文件的方式或应用程序在菜单中显示方式所需的内部选项,则可能会发生这种情况。Exec 变量通常以 % 开头;有关其当前支持的选项,请参阅 exec-variables

下表列出了 .desktop 文件的主要变量条目,这些条目会影响应用程序的启动方式(如果它具有与之关联的 MIME 类型)。

变量名 示例 1 内容 示例 2 内容 描述
DBusActivatable DBusActivatable=true DBusActivatable=false 应用程序与 D-Bus 交互。
另请参阅配置:D-Bus
MimeType MimeType=application/vnd.oasis.opendocument.text MimeType=application/vnd.sun.xml.math 应用程序支持的 MIME 类型列表
StartupWMClass StartupWMClass=google-chrome StartupWMClass=xpad 将窗口与所属应用程序关联
Terminal Terminal=true Terminal=false 在默认终端中启动

空的 MIME 关联 / KDE 中的“打开方式”菜单

此文章或章节候选移动到 KDE#故障排除

注意: 特定于 KDE。 (在 Talk:XDG MIME Applications 中讨论)

安装 archlinux-xdg-menu 并运行 XDG_MENU_PREFIX=arch- kbuildsycoca6 或将 export XDG_MENU_PREFIX=plasma- 添加到 .xinitrc