XDG MIME 应用程序
XDG MIME 应用程序规范 构建于 共享 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 类型到应用程序的关联。
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 类型 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 应用程序,它列出了所有支持各种 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 文件中影响应用程序启动的变量
支持规范的桌面环境和文件管理器根据 .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 | 在默认终端中启动 |
安装 archlinux-xdg-menu 并运行 XDG_MENU_PREFIX=arch- kbuildsycoca6
或将 export XDG_MENU_PREFIX=plasma-
添加到 .xinitrc
。