默认情况下,我的 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.desktop
inkscape.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
)。
答案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 mailcap
和man mailcap.order
。
请注意,某些应用程序使用通用实用程序(例如x-www-browser
或pager
)而不是检测首选应用程序。您可能需要使用update-alternatives
或类似的机制,用于选择发行版中通用实用程序的首选实现。或者,要覆盖特定用户的系统范围首选替代方案,请设置环境变量,例如EDITOR
(或VISUAL
)PAGER
和BROWSER
。他们的支持sensible-browser
以及其他通常更具体的工具(例如git commit
使用EDITOR
和VISUAL
)。
答案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
确实解决了电报、黑曜石等的问题。