![mimetype 无法识别 pdf 文件:mime hell](https://linux22.com/image/1071656/mimetype%20%E6%97%A0%E6%B3%95%E8%AF%86%E5%88%AB%20pdf%20%E6%96%87%E4%BB%B6%EF%BC%9Amime%20hell.png)
直到最近,我才遇到打开 pdf 文件的问题。然后,我想阅读 TeX 的 xcolor 包,并输入以下命令:
texdoc xcolor
这一直有效,可以在我首选的 pdf 查看器 qpdfview 中打开文档。但现在,它尝试使用 qpdfview 打开它,但 qpdfview 显示错误:
Could not open '/usr/share/texlive/texmf-dist/doc/latex/xcolor/xcolor.pdf'.
在终端,我收到以下错误消息:
Unknown MIME type: ""
"Could not match file type of '/usr/share/texlive/texmf-dist/doc/latex/xcolor/xcolor.pdf'!"
我在 Ubuntu 21.04 下运行 i3 平铺窗口管理器,并且我的 $XDG_CURRENT_DESKTOP 和 $DESKTOP_SESSION 设置为“i3”。
因此,在一个已知良好的 pdf 文件中,我输入:
$ mimetype TrigLocal.pdf
TrigLocal.pdf: text/plain
尽管,
$ file --mime-type
application/pdf
正确的。
所以我尝试了
$ xdg-open TrigLocal.pdf
gio: file:///home/ded/TeXexamples/TrigLocal.pdf: No application is registered as handling this file
好的,也许 gio 设置不正确:
$ gio mime TrigLocal.pdf
No default applications for “TrigLocal.pdf”
我尝试使用设置处理程序
$ xdg-mime default qpdfview.desktop application/pdf
但当我查询它时:
$ xdg-mime query default application/pdf
qpdfview-chromium.desktop
这是一个变体,但我没有设置。无论如何,它对 xdg-open 没有影响:
$ xdg-open TrigLocal.pdf
gio: file:///home/ded/TeXexamples/TrigLocal.pdf: No application is registered as handling this file
我不知道哪里出了问题,而且我在任何地方都找不到明确的指导,至少没有有效的指导。
在 ubuntu 下将文件类型与处理程序关联的整个生态系统让我感到困惑,因此我希望能有一个很好的概述教程来解释以下关系:
mime 类型 xdg-open gio
以及任何其他与帮助我修复非 Gnome、非 KDE 系统相关的内容。
更新
根据@steeldriver 的建议,我运行了:
$ mimetype --debug TrigLocal.pdf
> Data dirs are: /home/ded/.local/share, /var/lib/flatpak/exports/share /home/ded/.local/share /flatpak/exports/share
> Checking inode type
> Checking globs for basename 'TrigLocal.pdf'
> Checking for extension '.pdf'
> Checking globs for basename 'triglocal.pdf'
> Checking for extension '.pdf'
> File exists, trying default method
TrigLocal.pdf: text/plain
我在 ~/.local/share 中没有看到任何有趣的东西,但是我看到了这个:
$ cat ~/.local/share/applications/mimeapps.list
[Default Applications]
application/pdf=qpdfview.desktop
application/html=google-chrome.desktop
text/html=google-chrome.desktop
x-scheme-handler/http=google-chrome.desktop
x-scheme-handler/https=google-chrome.desktop
x-scheme-handler/about=google-chrome.desktop
x-scheme-handler/unknown=google-chrome.desktop
[Added Associations]
application/pdf=evince.desktop;zathura-pdf-poppler.desktop;
答案1
我找到了问题。运行 mimetype --debug 给出了提示,但我没有看到它。(感谢@steeldriver)我尝试以 root 身份对同一个文件执行相同的命令,它给出了正确的答案。
事实证明,由于某种原因,环境变量 XDG_DATA_DIRS 的设置进入了我的 shell 配置文件,并且它排除了默认目录。
根据XDG 规范,它默认设置为“/usr/local/share:/usr/share”,而我的设置覆盖了这些,因此 /usr/share/mime/freedesktop.org.xml 处的默认 mime 数据库没有被读入 mime 检测系统。
由于错误的设置添加了一些与 flatpak 相关的目录,所以我一定是在尝试 flatpaks 时添加了该设置,但我不记得做过任何这样的事情,所以也许该设置是在我背后添加到我的 config.fish 文件中的。
无论如何,我希望这对将来的某些人有所帮助。