mimetype が PDF ファイルを識別しない: mime 地獄

mimetype が PDF ファイルを識別しない: mime 地獄

最近まで、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

OK、おそらく 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 の設定がシェル設定ファイルに入り、デフォルトのディレクトリが除外されていたことが判明しました。

によるとXDG仕様デフォルトでは「/usr/local/share:/usr/share」に設定されていますが、私の設定はこれらを上書きしていたため、/usr/share/mime/freedesktop.org.xml にあるデフォルトの MIME データベースが MIME 検出システムに読み込まれませんでした。

誤った設定により flatpak 関連のディレクトリがいくつか追加されたため、flatpak を試すために設定を追加したに違いありませんが、そのようなことをした覚えがないので、知らないうちに config.fish ファイルに設定が追加されたのかもしれません。

とにかく、これが将来誰かの役に立つことを願っています。

関連情報