Rap*_*ael 5 defaults configuration mime-types xdg-open xdg
与这个问题类似,我有一些应用程序(Calibre、texdoc)使用 Mendeley 打开 PDF。从 Thunar、Thunderbird、Firefox 等打开 PDF 会打开 evince,这是预期的默认设置。
这些应用程序似乎使用了xdg-open
:
$ xdg-mime query default application/pdf
mendeleydesktop.desktop
Run Code Online (Sandbox Code Playgroud)
我试图找到它的来源,但没有成功;我用它修复了
xdg-mime default evince.desktop application/pdf
Run Code Online (Sandbox Code Playgroud)
问题仍然是:xdg-open
Mendeley 应该成为默认 PDF 查看器的想法是从哪里来的?
我使用的是 Ubuntu 16.04 和 i3 4.11。xdg-open
版本为 1.1.0 rc3。
\n\n问题仍然是:
\nxdg-open
Mendeley 应该成为默认 PDF 查看器的想法从何而来?
这是一个非常合理的问题。\n这是一个有点长的答案,分为三个部分。
\n例如,FreeDesktop 标准\非 mimetype 关联有这样的说法:
\n\n\nMIME 类型和应用程序之间的关联
\n用户、系统管理员、应用程序供应商和发行版可以通过写入\n名为 mimeapps.list 的文件来更改应用程序和 mime 类型之间的关联。
\n该文件的查找顺序如下:
\nRun Code Online (Sandbox Code Playgroud)\n$XDG_CONFIG_HOME/$desktop-mimeapps.list user overrides, desktop-specific (for advanced users)\n$XDG_CONFIG_HOME/mimeapps.list user overrides (recommended location for user configuration GUIs)\n$XDG_CONFIG_DIRS/$desktop-mimeapps.list sysadmin and ISV overrides, desktop-specific\n$XDG_CONFIG_DIRS/mimeapps.list sysadmin and ISV overrides\n$XDG_DATA_HOME/applications/$desktop-mimeapps.list for completeness, deprecated, desktop-specific\n$XDG_DATA_HOME/applications/mimeapps.list for compatibility, deprecated\n$XDG_DATA_DIRS/applications/$desktop-mimeapps.list distribution-provided defaults, desktop-specific\n$XDG_DATA_DIRS/applications/mimeapps.list distribution-provided defaults\n
在此表中,
\n$desktop
是当前桌面的名称之一,\n小写(例如 kde、gnome、xfce 等)
请注意,如果未设置XDG_CONFIG_HOME
和等环境变量,它们将恢复为默认值。XDG_DATA_HOME
\n\n\n
$XDG_DATA_HOME
定义应存储用户特定数据文件的相对基目录。如果$XDG_DATA_HOME
未设置或为空,则应使用等于 $HOME/.local/share 的默认值。\n
$XDG_CONFIG_HOME
定义应存储用户特定配置文件的相对基目录。如果$XDG_CONFIG_HOME
未设置或为空,$HOME/.config
则应使用默认值等于。
这说明了 mimetype 关联最棘手的方面之一:\n它们可以在许多不同的位置设置,\n并且这些设置可能在不同的位置被覆盖。\n但是,~/.config/mimeapps.list
我们应该使用它来设置我们自己的关联。
这也与 GNOME 桌面的文档相匹配。
\n\n\n要覆盖单个用户的系统默认设置,您需要创建一个
\n~/.config/mimeapps.list
文件,其中包含您想要覆盖默认注册应用程序的 MIME 类型列表。
还有这个有用的花絮:
\n\n\n您可以使用 gio mime 命令来验证默认注册的应用程序是否已正确设置:
\nRun Code Online (Sandbox Code Playgroud)\n$ gio mime text/html\nDefault application for \xe2\x80\x9ctext/html\xe2\x80\x9d: myapplication1.desktop\nRegistered applications:\n myapplication1.desktop\n epiphany.desktop\nRecommended applications:\n myapplication1.desktop\n epiphany.desktop\n
检查 mimetype 关联的跨平台命令是:
\nxdg-mime query default application/pdf\n
Run Code Online (Sandbox Code Playgroud)\n对于 GNOME,命令是:
\ngio mime application/pdf\n
Run Code Online (Sandbox Code Playgroud)\n对于 KDE Plasma,命令是:
\nktraderclient5 --mimetype application/pdf\n
Run Code Online (Sandbox Code Playgroud)\n当我查看我的~/.config/mimeapps.list
文件时,\nit 看起来像这样:
[Added Associations]\napplication/epub+zip=calibre-ebook-viewer.desktop;org.gnome.FileRoller.desktop;\n<snip>\napplication/pdf=evince.desktop;qpdfview.desktop;okularApplication_pdf.desktop;<snip>\n<snip>\n[Default Applications]\napplication/epub+zip=calibre-ebook-viewer.desktop\n<snip>\napplication/pdf=evince.desktop;\n
Run Code Online (Sandbox Code Playgroud)\napplication/pdf
您可以看到under下只有一个条目[Default Applications]
;\nsoevince.desktop
是 PDF 文件的默认处理程序。\n我没有安装 Mendeley,但使其成为默认 PDF 处理程序的一种方法\nis 将其桌面文件放在这里而不是evince.desktop
。
请注意,我们相信此处的文档~/.config/mimeapps.list
是正确的文件;我们实际上并不能确定这一点。\n我们将在第 3 部分中再次讨论这一点。
xdg-open
是一个 shell 脚本,其行为\n取决于 的值$XDG_CURRENT_DESKTOP
。\n您可以在此处查看其工作原理:
if [ -n "${XDG_CURRENT_DESKTOP}" ]; then\n case "${XDG_CURRENT_DESKTOP}" in\n # only recently added to menu-spec, pre-spec X- still in use\n Cinnamon|X-Cinnamon)\n DE=cinnamon;\n ;;\n ENLIGHTENMENT)\n DE=enlightenment;\n ;;\n # GNOME, GNOME-Classic:GNOME, or GNOME-Flashback:GNOME\n GNOME*)\n DE=gnome;\n ;;\n KDE)\n DE=kde;\n ;;\n
Run Code Online (Sandbox Code Playgroud)\n由于您正在使用i3
,\nDE
变量将被设置为generic
,并且脚本将调用\nitopen_generic()
函数,\n该函数将依次调用 或run-mailcap
或mimeopen
\n,具体取决于安装的内容。
请注意,您可以通过设置 来获取一些额外的信息\n XDG_UTILS_DEBUG_LEVEL
,例如
XDG_UTILS_DEBUG_LEVEL=4 xdg-open ~/path/to/example.pdf\n
Run Code Online (Sandbox Code Playgroud)\n然而,调试信息对于我们的目的来说并没有那么丰富。
\n根据之前的调查,\n我们知道 mimetype 关联存储在硬盘驱动器上某个位置的文件中,\n而不是作为环境变量或dconf
设置。\n这意味着我们不必依赖文档,\n我们可以使用它strace
来确定该xdg-open
命令实际打开哪些文件。\napplication/pdf
对于 mimetype,我们可以使用:
strace -f -e trace=open,openat,creat -o strace_log.txt xdg-open /path/to/example.pdf\n
Run Code Online (Sandbox Code Playgroud)\n这-f
是为了跟踪子进程,因为xdg-open
它本身并不能完成所有事情。
仅-e trace=open,openat,creat
跟踪系统调用open
、openat
和creat
。\n这些来自man 2 open
或online 的手册页。
这-o strace_log.txt
是保存到日志文件以供稍后检查。
输出有点庞大,\n但我们可以忽略\n的行,因为ENOENT (No such file or directory)
这些文件不存在。
您还可以使用其他命令,例如xdg-mime
或gio mime
。\n我发现gio mime
在我的主目录中读取这些文件:
~/.local/share//mime/mime.cache
~/.config/mimeapps.list
~/.local/share/applications
~/.local/share/applications/mimeapps.list
~/.local/share/applications/defaults.list
~/.local/share/applications/mimeinfo.cache
它还读取这些系统级文件:
\n/usr/share/mime/mime.cache
/usr/share/applications/defaults.list
/usr/share/applications/mimeinfo.cache
/var/lib/snapd/desktop/applications
/var/lib/snapd/desktop/applications/mimeinfo.cache
要寻找application/pdf
关联,这应该可以解决问题:
grep \'application/pdf\' ~/.local/share//mime/mime.cache ~/.config/mimeapps.list ~/.local/share/applications ~/.local/share/applications/mimeapps.list ~/.local/share/applications/defaults.list ~/.local/share/applications/mimeinfo.cache /usr/share/mime/mime.cache /usr/share/applications/defaults.list /usr/share/applications/mimeinfo.cache /var/lib/snapd/desktop/applications /var/lib/snapd/desktop/applications/mimeinfo.cache | less\n
Run Code Online (Sandbox Code Playgroud)\n从这里您可以看到 Mendeley 的桌面文件被添加到哪里。
\n\n\n我有一些应用程序(Calibre、texdoc)使用 Mendeley 打开 PDF。从 Thunar、Thunderbird、Firefox 等打开\nPDF 文件会打开 evince,这是预期的\n默认设置。
\n
Firefox 和 Thunderbird 有自己的默认应用程序设置。\n我相信texdoc
依赖于xdg-open
。\n我不确定 Thunar,\n但我怀疑它依赖于xdg-open
。
所以最终这可能是由于:
\nxdg-open
与 上的其他应用程序相比具有不同的后备i3
;和
Mendeley 的安装程序在某些文件中添加 mimetype 关联,但在其他文件中不添加。
\n附录:xdg-open
不应mimeinfo.cache
在 上使用该文件i3
,\n但如果您需要重新生成它,请使用以下命令:
update-desktop-database ~/.local/share/applications\n
Run Code Online (Sandbox Code Playgroud)\n这是文档:
\n\n\n缓存 MIME 类型
\n为了降低解析所有桌面文件的成本,提供了一个更新桌面数据库程序来生成缓存文件。这个概念与“update-mime-database”程序的概念相同,\n它可以让应用程序避免读入(可能)数百个文件。安装每个桌面文件后都需要运行它。为 $XDG_DATA_DIRS/applications/ 中的每个目录创建一个\n缓存文件,\n并将创建一个名为 $XDG_DATA_DIRS/applications/mimeinfo.cache 的文件。
\n
https://specifications.freedesktop.org/desktop-entry-spec/0.9.5/ar01s07.html
\n有关的:
\nhttps://askubuntu.com/questions/939027/pdf-book-opens-in-mendeley-when-openned-from-calibre
\nhttps://askubuntu.com/questions/992582/how-do-mimeinfo-cache-files-relate-to-mimeapps-list
\n 归档时间: |
|
查看次数: |
1189 次 |
最近记录: |