Firefox 从哪里获得用于打开文件的“默认”应用程序?

Firefox 从哪里获得用于打开文件的“默认”应用程序?

默认情况下,我的 FreeBSD 11.0-CURRENT 上的 Firefox (33.0) 将用于打开 PDF 文件的默认应用程序设置为 Inkscape。 Firefox 确实记得我之前的选择,表明,在“Firefox 应该如何处理这个文件?”对话框,所以直到最近我还很困惑这个配置来自哪里,但大多忽略它,因为它几乎不关心我。

然而,我最近开始使用 Zotero 作为我的文献数据库。 Zotero 作为 Firefox 插件运行,忽略我在 Firefox 首选项中使用 evince 打开 PDF 文件或询问我如何处理它们的选择,而只是使用 Inkscape 打开它们。这让我尝试跟进 Firefox 的这个特定配置项,但我找不到默认设置的位置。

我在我的主目录中的任何与 Firefox 相关的文件中找不到该字符串Inkscape(或)。inkscape

答案1

指向“类似问题”的链接(xdg-打开默认应用程序行为– 没有明显的相关性,但一些实验表明该行为确实相当于xdg-open) 导致我更深地陷入兔子洞。虽然 Firefox 不依赖或继承规则,但xdg-open它仍然使用 MIME 规范文件xdg-open

在用户基础上,MIME 打开行为由规范文件配置~/.local/share/applications/mimeapps.list

对我来说,这个文件只包含一些合理的协议和连接到的 HTML(和类似)文件userapp-Firefox-??????.desktop,但您可以轻松添加一行,例如

application/pdf=evince.desktop

在每个用户的基础上解决这个问题。如果该文件尚不存在,请确保添加节头,例如

[Default Applications]
application/pdf=evince.desktop

更深入地说,mime 类型是在(如果您不在 FreeBSD 系统上的话/usr/local/share/applications/mimeinfo.cache可能是这样)定义的,其中列出了.该文件夹中的和都包含./usr/share/…application/pdf=inkscape.desktop;evince.desktop;evince.desktopinkscape.desktopMimeType=[…]application/pdf;[…]

mimeinfo.cache从文件中列出的 mime 类型自动生成的,.desktop没有任何明确定义的顺序,因此您必须从 Inkscape 中删除 PDF mime 类型并使用 重新生成缓存update-mime-database,或者生成一个 mimeapps.list (全局在/usr/local/share/applications/或为您的用户~/.local/share/applications/mimeapps.list)。

答案2

在 Firefox 38.8.0 ESR 中,在 Debian Lenny 和 GNOME 2 下,我发现通过关联的应用程序XDG(描述于OP的答案) 仅在打开从库中的下载中下载的文件时使用。

即使在那里,实现也会给出与 不一致的结果,xdg-open因为它忽略了 GNOME 特定的路径(在我的例子中/usr/share/gnome/applications/defaults.list,它是 的符号链接/etc/gnome-vfs-2.0/defaults.list)。我必须application/pdf=evince.desktop在我的~/.local/share/applications/defaults.list. (请注意,defaults.list已合并到mimeapps.list更新版本的 XDG 中。)

代替XDG,元邮件功能 (mailcap)用于解决以下用例的关联应用程序:

  • 从下载面板打开下载的文件(按工具栏中的下载按钮后显示)
  • 文件下载对话框下拉菜单中的默认应用程序
  • 首选项→应用程序下拉菜单中的默认应用程序 ( about:preferences#applications)

导航到具有该内容类型的 URL 时,将使用中的首选项about:preferences#applications,除非强制下载。

Mailcap 是一种比 XDG 更古老的机制,其根源在于电子邮件,MIME 也源自电子邮件。该run-mailcap实用程序类似于xdg-open.其配置包含三个文件(优先级递减):

  • ~/.mailcap— 用户条目
  • /etc/mailcap.order— 系统范围的条目排序规范
  • /etc/mailcap— 系统范围的条目(与用户条目的格式相同)

它们一起生成一个单行条目列表,指定用于任何给定 MIME 类型的应用程序。条目是自上而下匹配的,因此先出现的优先。

要在系统范围内更改条目优先级,您需要编辑/etc/mailcap.order并运行update-mime.

要覆盖某些条目或在系统范围内指定您自己的条目,您需要编辑顶部部分(用于手动创建的条目)/etc/mailcap并运行update-mime。请参阅顶部部分的评论。

对于用户条目和覆盖,请使用~/.mailcap.更改立即生效。不~/.mailcap.order存在;如果要更改条目优先级,请对它们进行物理重新排序(如果它们位于 中~/.mailcap),或使用首选版本覆盖它们(如果它们位于 中/etc/mailcap)。

man update-mime,man mailcapman mailcap.order

请注意,某些应用程序使用通用实用程序(例如x-www-browserpager)而不是检测首选应用程序。您可能需要使用update-alternatives或类似的机制,用于选择发行版中通用实用程序的首选实现。或者,要覆盖特定用户的系统范围首选替代方案,请设置环境变量,例如EDITOR(或VISUAL)PAGERBROWSER。他们的支持sensible-browser以及其他通常更具体的工具(例如git commit使用EDITORVISUAL)。

答案3

我有类似的问题 - telegram 等确实使用 chrome 打开 pdf 文件而不是 evince。

根据https://wiki.archlinux.org/title/Xdg-utils我做到了

$ env XDG_UTILS_DEBUG_LEVEL=10 xdg-mime query default application/pdf

看看这确实chromium.desktop是最终的答案。正在做

$ xdg-mime default evince.desktop application/pdf

没有解决问题。

我必须搜索正确的桌面文件(我使用查找替换fd):

$ cd /
$ fd -LH evince.desktop
org.gnome.Evince.desktop

得到org.gnome.Evince.desktop.

设置

$ xdg-mime default org.gnome.Evince.desktop application/pdf

确实解决了电报、黑曜石等的问题。

相关内容