オプション1:マニュアルを読む

オプション1:マニュアルを読む

〜のようにこの問題、Mendeleyを使用してPDFを開くいくつかのアプリケーション(Caliber、texdoc)があります。 Thunar、Thunderbird、FirefoxなどでPDFを開くと、期待されるデフォルトのevinceが開きます。

次のアプリは以下を使用しているようですxdg-open

$ xdg-mime query default application/pdf
mendeleydesktop.desktop

検索しようとしていますこれはどこから来たが成功しなかった。

xdg-mime default evince.desktop application/pdf

質問は残ります。xdg-openMendeleyが基本的なPDFビューアでなければならないというアイデアはどこから来ましたか?

私はUbuntu 16.04とi3 4.11を使用しています。xdg-openバージョンは1.1.0 rc3です。

ベストアンサー1

質問は残ります。xdg-openMendeleyが基本的なPDFビューアでなければならないというアイデアはどこから来ましたか?

これは非常に妥当な質問です。これは3つの部分に分かれた少し長い答えです。

オプション1:マニュアルを読む

例えば、無料デスクトップ標準 MIMEタイプの関連付けについては、次のような言葉があります。

MIMEタイプとアプリケーション間の関連付け

ユーザー、システム管理者、アプリケーションベンダー、およびディストリビューションをmimeapps.listというファイルに書き込むことで、アプリケーションとMIMEタイプの間の接続を変更できます。

ファイルは次の順序で検索されます。

$XDG_CONFIG_HOME/$desktop-mimeapps.list            user overrides, desktop-specific (for advanced users)
$XDG_CONFIG_HOME/mimeapps.list                     user overrides (recommended location for user configuration GUIs)
$XDG_CONFIG_DIRS/$desktop-mimeapps.list            sysadmin and ISV overrides, desktop-specific
$XDG_CONFIG_DIRS/mimeapps.list                     sysadmin and ISV overrides
$XDG_DATA_HOME/applications/$desktop-mimeapps.list for completeness, deprecated, desktop-specific
$XDG_DATA_HOME/applications/mimeapps.list          for compatibility, deprecated
$XDG_DATA_DIRS/applications/$desktop-mimeapps.list distribution-provided defaults, desktop-specific
$XDG_DATA_DIRS/applications/mimeapps.list          distribution-provided defaults

この表では、$desktop現在のデスクトップの名前の1つで、小文字です(例:kde、gnome、xfceなど)。

環境変数がと のXDG_CONFIG_HOME場合XDG_DATA_HOMEデフォルトに戻す

$XDG_DATA_HOMEユーザー固有のデータファイルを保存する必要がある相対デフォルトディレクトリを定義します。設定されていないか空の場合は、$XDG_DATA_HOME$HOME/.local/shareと同じデフォルト値を使用する必要があります。

$XDG_CONFIG_HOMEユーザー固有の構成ファイルを保存する必要がある相対デフォルトディレクトリを定義します。設定されていないか空の場合、デフォルト値$XDG_CONFIG_HOMEは同じを使用する必要があります。$HOME/.config

これは、MIMEタイプの関連付けの最も要求の厳しい側面の1つを示しています。これはさまざまな場所で設定でき、これらの設定は他の場所で上書きできます。しかし、~/.config/mimeapps.list私たちはそれを私たち自身の協会を設立するために使用する必要があります。

これも次のように一致します。GNOMEデスクトップドキュメント

~/.config/mimeapps.list個々のユーザーのシステム設定を上書きするには、デフォルトの登録アプリケーションを上書きするMIMEタイプのリストを含むファイルを作成する必要があります。

そして、この有用な情報は次のとおりです。

gio mime コマンドを使用すると、デフォルトの登録アプリケーションが正しく設定されていることを確認できます。

$ gio mime text/html
Default application for “text/html”: myapplication1.desktop
Registered applications:
  myapplication1.desktop
  epiphany.desktop
Recommended applications:
  myapplication1.desktop
  epiphany.desktop

MIMEタイプの接続を確認するクロスプラットフォームコマンドは次のとおりです。

xdg-mime query default application/pdf

GNOMEの場合、コマンドは次のようになります。

gio mime application/pdf

KDEプラズマの場合、コマンドは次のとおりです。

ktraderclient5 --mimetype application/pdf

私のファイルを見ると、~/.config/mimeapps.list次のようになります。

[Added Associations]
application/epub+zip=calibre-ebook-viewer.desktop;org.gnome.FileRoller.desktop;
<snip>
application/pdf=evince.desktop;qpdfview.desktop;okularApplication_pdf.desktop;<snip>
<snip>
[Default Applications]
application/epub+zip=calibre-ebook-viewer.desktop
<snip>
application/pdf=evince.desktop;

application/pdf以下には項目が1つしかないことがわかります。 PDFファイルの基本ハンドラも[Default Applications]同様です。evince.desktopMendeleyはインストールされていませんが、それをデフォルトのPDFハンドラにする1つの方法はevince.desktop

ここにある文書は正しいと思いますが、~/.config/mimeapps.list 実際にはわかりません。これについては、3部で再度取り上げます。

オプション2:ソースコードをお読みください。

xdg-openの値によって動作が異なるシェルスクリプトです$XDG_CURRENT_DESKTOP。あなたは見ることができますどのように動作しますか?:

if [ -n "${XDG_CURRENT_DESKTOP}" ]; then
  case "${XDG_CURRENT_DESKTOP}" in
     # only recently added to menu-spec, pre-spec X- still in use
     Cinnamon|X-Cinnamon)
       DE=cinnamon;
       ;;
     ENLIGHTENMENT)
       DE=enlightenment;
       ;;
     # GNOME, GNOME-Classic:GNOME, or GNOME-Flashback:GNOME
     GNOME*)
       DE=gnome;
       ;;
     KDE)
       DE=kde;
       ;;

を使用しているため、変数はi3DE設定され、genericスクリプトはその変数を呼び出します。open_generic()機能、これはインストールされている項目に従って順番に呼び出されますrun-mailcapmimeopen

設定により、いくつかの追加情報を取得できますXDG_UTILS_DEBUG_LEVEL

XDG_UTILS_DEBUG_LEVEL=4 xdg-open ~/path/to/example.pdf

しかし、デバッグ情報は私たちの目的に比べて豊富ではありません。

オプション3:開いたファイルを追跡します。

dconf以前の調査では、MIMEタイプの接続が環境変数や設定などではなく、ハードドライブ上のファイルに保存されることを知っています。つまり、ドキュメントに依存する必要はなく、ドキュメントを使用してコマンドが実際に開いているファイルを確認できますstrace。 mimetypexdg-openの場合、application/pdf次のものを使用できます。

strace -f -e trace=open,openat,creat -o strace_log.txt xdg-open /path/to/example.pdf

これは、子プロセスがそれ自体ですべての操作を実行するわけではないため、-f子プロセスを追跡するためのものです。xdg-open

目的は-e trace=open,openat,creatシステムコールのみを追跡することですopen。これはマニュアルページまたはマニュアルページからのものです。openatcreatman 2 openオンライン

これは-o strace_log.txt後で確認できるようにログファイルに保存されます。

出力は少し大きいがENOENT (No such file or directory) ファイルは存在しないので、この行を無視することができます。

xdg-mime別のコマンドを使用することもできますgio mimegio 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

また、次のシステムレベルのファイルを読みます。

  • /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

ここからMendeleyのデスクトップファイルが追加された場所を確認できます。

Mendeleyを使用してPDFを開くいくつかのアプリケーション(Caliber、texdoc)があります。 Thunar、Thunderbird、FirefoxなどでPDFを開くと、期待されるデフォルトのevinceが開きます。

FirefoxとThunderbird独自の基本アプリケーション設定。私はtexdocそれが依存していると信じていますxdg-open。 Thunarについてはよくわかりませんがxdg-open

したがって、最終的にこれは次の原因である可能性があります。

  • xdg-openi3他のアプリと比較して代替機能が異なります。

  • Mendeleyのインストーラは、一部のファイルにMIMEタイプの接続を追加しますが、他のファイルには追加しません。

付録:上記のファイルはxdg-open使用しないでください。再生する必要がある場合は、次のコマンドを使用してください。mimeinfo.cachei3

update-desktop-database ~/.local/share/applications

文書は次のとおりです。

MIMEタイプキャッシュ

すべてのデスクトップファイルを解析するコストを削減するには デスクトップデータベースの更新提供されたプログラムはキャッシュファイルを生成します。この概念は、アプリケーションが(潜在的に)何百ものファイルを読み取ることを防ぐことができるという点で、「update-mime-database」プログラムと同じです。各デスクトップファイルをインストールした後に実行する必要があります。 $XDG_DATA_DIRS/applications/にディレクトリごとにキャッシュファイルが作成され、$XDG_DATA_DIRS/applications/mimeinfo.cacheというファイルが生成されます。

https://specations.freedesktop.org/desktop-entry-spec/0.9.5/ar01s07.html

関連:

おすすめ記事