firefox从何处获得用于打开文件的“默认”应用程序?


12

默认情况下,我的FreeBSD 11.0-CURRENT上的Firefox(33.0)具有用于打开PDF文件的默认应用程序,该应用程序设置为Inkscape。Firefox确实记住了我以前的选择,evince是“ Firefox应该如何处理此文件?”。对话框,所以直到最近我才对这种配置的来源感到困惑,但由于它几乎与我无关,因此大多忽略了它。

但是,我最近开始使用Zotero作为我的文献数据库。Zotero作为firefox插件运行,并且忽略了我在Firefox偏好设置中所做的选择,即无法打开文件或询问我如何处理它们,而只是使用Inkscape打开它们。这使我尝试跟进Firefox的此特定配置项,但是找不到默认设置的位置。

我的主目录中没有任何与Firefox相关的文件中的字符串Inkscape(或inkscape)。



我的Firefox默认设置为Font-Viewer。
用户

Answers:


14

链接到“类似问题”(xdg-open默认应用程序行为 –并不明显相关,但是一些实验表明该行为确实等同于xdg-open)之一使我更深入了。尽管Firefox不依赖,也不从中继承规则,但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类型是在list 中定义的/usr/local/share/applications/mimeinfo.cache/usr/share/…如果您不在FreeBSD系统上,则可能是这样)application/pdf=inkscape.desktop;evince.desktop;。双方evince.desktopinkscape.desktop该文件夹中包含MimeType=[…]application/pdf;[…]

mimeinfo.cache自动地从中列出的MIME类型产生.desktop没有任何定义明确的顺序文件,所以你将不得不无论是从Inkscape中除去PDF mime类型和使用再生缓存update-mime-database,或生成一个mimeapps.list(或者在全球范围内/usr/local/share/applications/,或为您的用户~/.local/share/applications/mimeapps.list)。


在我古老的Debian Linux update-mime-database上,我需要做一些不同的事情update-desktop-database ~/.local/share/applications
Palec

另外,xdg-open file.pdf打开Evince(与Nautilus一样),而Firefox打开xpdf。使用find ~/.local/share/applications/ /usr/share/applications/ -type f -exec grep -i pdf '{}' +我发现在用户配置中没有提到PDF,仅在/usr/share/applications/mimeinfo.cache相应的*.desktop文件中提及。的行mimeinfo.cacheapplication/pdf=xpdf.desktop;evince.desktop;xournal.desktop;。我想FF占了第一位。但是怎么xdg-open知道我要埃文斯呢?
Palec

1
通过使用strace,我发现xdg-open调用gnome-opengnome-open读取/usr/share/gnome/applications/defaults.list是对它的符号链接/etc/gnome-vfs-2.0/defaults.list,它指定了application/pdf=evince.desktop。显然,香草FF缺乏GNOME集成,因此忽略了这种偏好。
Palec

7

在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中。)

在以下用例中,使用元邮件功能(mailcap)代替XDG 来解析关联的应用程序:

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

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

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-mimeman mailcapman mailcap.order

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


1
这个答案在Firefox Quantum(64.0)中仍然有效。但是,mailcap的性能要比实际的Firefox好,因此您不能完全依靠run-mailcap --debug --norun。我有这样的条目:application/pdf; sh -c "MEANINGFUL_VAR=preset /usr/bin/evince '%s'"。然后Firefox调用sh downloaded_file.pdf。然后,在我的控制台上,我看到了,除其他外,/tmp/mozilla_user/downloaded_file.pdf: line 3: 5: command not found这种行为将永远存在,除非有人修复了此问题。请参阅Mozilla Bugzilla
u_Ltd。

1
因此,为了给他/她的用户创造一致的体验,部署Debian与Gnome组合的管理员应使用不少于4种实用程序设置mime默认值:(update-mime更新mailcap),xdg-settings(更新xdg-open),gio(以更新gnome-open)和update-alternatives(以更新所谓的通用实用程序)。当然,他/她也不应忘记在整个系统范围内以及针对每个用户分别管理设置(可能最好是阻止用户更改默认设置的能力)...-啊,还有FF的handlers.json文件:mzl.la/1xKrLAq
zenlord
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.