XDG MIME 应用程序
《XDG MIME Applications 规范》基于《共享 MIME 数据库》和《桌面条目》提供《默认应用程序》。
- 应用程序使用《桌面条目》描述它们可以处理的 MIME 类型。
- desktop-file-utils 注册了一个 pacman hook 来构建一个由桌面条目处理的 MIME 类型缓存数据库,请参阅 update-desktop-database(1)。
- 应用程序可以通过将 XML 文件放在
/usr/share/mime/packages/目录下来安装新的 MIME 类型。 - shared-mime-info 注册了一个 pacman hook 来构建共享 MIME 信息数据库缓存,请参阅 update-mime-database(1)。
- 桌面环境和用户可以使用 mimeapps.list 文件更改默认应用程序以及添加或删除 MIME 类型到应用程序的关联。
共享 MIME 数据库
《XDG Shared MIME-info Database 规范》促进了跨桌面环境的共享 MIME 数据库,并允许应用程序轻松地在系统范围内注册新的 MIME 类型。
该数据库是通过 shared-mime-info 的工具,由安装在 /usr/share/mime/packages/ 中的 XML 文件构建的。
不应直接编辑 /usr/share/mime/ 中的文件,但可以在用户级别维护一个独立的数据库,位于 ~/.local/share/mime/ 目录中。
"URI scheme handling [..] are handled through applications handling the x-scheme-handler/foo MIME type, where foo is the URI scheme in question."[1]
新的 MIME 类型
此示例定义了一个新的 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.desktop和baz.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 应用程序,可以列出支持各种 mimetypes 的所有应用程序,并允许您快速将其设置为所有或部分支持的 mimetypes 的默认值(通过修改 mimeapps.list)。
它还会显示“可读”名称和文件扩展名,因此您无需记住 mimetypes 的名称。
故障排除
如果一个文件未由您期望的默认应用程序打开,可能有几种原因。您可能需要检查每种情况。
缺少桌面条目
为了将应用程序与 MIME 类型关联,需要一个 桌面条目。确保存在此类条目,并且可以用于(手动)在应用程序中打开文件。
缺少关联
如果应用程序的桌面条目在其 MimeType 键下未指定 MIME 类型,则在需要应用程序打开该类型时不会考虑它。编辑 mimeapps.list 以在 .desktop 文件和 MIME 类型之间添加关联。
非默认应用程序
如果桌面条目已与 MIME 类型关联,但可能尚未设置为默认值。编辑 mimeapps.list 以设置默认关联。
非标准关联
应用程序可以自由忽略或仅部分实现 XDG 标准。检查是否使用了已弃用的文件,例如 ~/.local/share/applications/mimeapps.list 和 ~/.local/share/applications/defaults.list。如果您正尝试从另一个应用程序(例如网页浏览器或文件管理器)打开文件,请检查该应用程序是否具有自己的选择默认应用程序的方法。
影响应用程序启动的 .desktop 文件中的变量
支持这些规范的桌面环境和文件管理器会根据 .desktop 文件中的定义启动程序。请参阅 Desktop entries#Desktop entries for applications。
通常,不需要配置打包的 .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 | 在默认终端中启动 |
KDE 中的空 MIME 关联 / 打开方式菜单
安装 archlinux-xdg-menu 并运行 XDG_MENU_PREFIX=arch- kbuildsycoca6,或者将 export XDG_MENU_PREFIX=plasma- 添加到 .xinitrc。