XDG MIME 应用程序

来自 ArchWiki

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

  1. 应用程序使用 桌面条目 描述它们可以处理的 MIME 类型。
  2. desktop-file-utils 注册了一个 pacman 钩子 以构建桌面条目处理的 MIME 类型缓存数据库,参见 update-desktop-database(1)
  3. 应用程序可以通过将 XML 文件放置在 /usr/share/mime/packages/ 中来安装新的 MIME 类型。
  4. shared-mime-info 注册了一个 pacman 钩子 以构建共享 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 标准 (xdg-mime) 管理 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 应用程序,它列出了支持各种 mimetype 的所有应用程序,并允许您快速将其设置为它支持的所有或某些 mimetype 的默认应用程序(通过修改 mimeapps.list)。

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

故障排除

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

缺少桌面条目

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

缺少关联

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

非默认应用程序

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

非标准关联

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

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

此条目或章节需要扩充。

原因: 事实上,桌面文件中可能缺少 MimeType 条目仅在此处暗示,即“即使应用程序...”,但这Errors 的常见原因。某些打开器也可能关联未在桌面文件中显式列出的 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