簡単に言うと:

簡単に言うと:

簡単に言うと:

Debianでは、xdg-open(経由xdg-mime)私が好む仕様に従っていませんmailcaprun-mailcapxdg-openアイテムを追跡するための体系的な方法はありますかmailcapxdg-open常に呼び出すようにスクリプトを変更するよりも理想的には簡単ですrun-mailcap

コンテキスト

Debian(9.5stretchベース)には、デフォルトのアプリケーションを設定するか、より具体的にはファイル拡張子、MIMEタイプ、およびプログラム(またはプログラム操作)をリンクする複数のシステムがあります。それらの簡単なレビューこの回答では。 MIME関連の点で最も細かい2つの主な項目は次のとおりです。

  1. デスクトップ環境のための「より現代的な」XDG規格
  2. 以前mailcapのシステムは、メールプロキシとターミナル環境をさらに対象としていました(またはデスクトップとは関係ありませんでした)。非常によく説明されていますこの回答では

ターゲット

私は2番目のmailcapシステムを好みます。その理由は、ワイルドカードmailcap.orderアプローチを使用すると、アプリケーションをサポートするすべてのMIMEタイプ(またはサブセット)に自動的に接続するのが非常に便利であり、特定のMIMEタイプのビューアとエディタを区別する可能性があるためです。さらに、システムはシステムアップデートと緊密に統合されています。つまり、パッケージを更新しても接続順序は変わりません。

実行エントリポイント

上記の2つの方法には異なるエントリポイントがあります。

  1. XDGの使用xdg-open
  2. mailcapシステムの使用法run-mailcapまたはエイリアス(view、、edit

ただし、プログラムごとに異なるエントリポイントを呼び出すため、結果が一貫していない可能性があります。それでも私はその仕事をしています。

xdg-openとして返されることがあります。run-mailcap

/usr/bin/xdg-openテストの結果、デスクトップが有効になっている場合(通常の意味では必ずしもデスクトップ環境である必要はありません)、試してみてください。そうしないと、利用可能なものに置き換えることができます。xdg-utils-1.1.1-1+deb9u1xdg-openxdg-mimerun-mailcap

# ... line 787 in /usr/bin/xdg-open
open_generic()
{
    if is_file_url_or_path "$1"; then
        local file="$(file_url_to_path "$1")"

        check_input_file "$file"

        if [ -n "$DISPLAY" ]; then
            filetype=`xdg-mime query filetype "$file" | sed "s/;.*//"`
            open_generic_xdg_mime "$file" "$filetype"
        fi

        if which run-mailcap 2>/dev/null 1>&2; then
            run-mailcap --action=view "$file"
            if [ $? -eq 0 ]; then
                exit_success
            fi
        fi
# ...

不一致の具体例

目標は、EvinceをPDF、Djvuなどのデフォルトのビューアにすることです。

アイテムを実行しevince:*/*た後/etc/mailcap.order(おそらくパッケージを更新した後に自動的に)、そのアイテムがupdate-mime最初にapplication/pdf; evince %s; test=test -n "$DISPLAY"表示されます/etc/mailcap。したがって、ランチャーはrun-mailcap必要に応じてEvinceを使用できます。

しかし、何かを使用すると、xdg-openLibreoffice DrawでPDFが開きます。その理由は次のとおりです(set -xスクリプトに挿入して決定されます)。

  1. xdg-openxdg-mime query filetype file.pdfMIMEタイプが誰であるかを確認するために呼び出されます。application/pdf
  2. xdg-mime次に、対応するMIMEタイプのデフォルトアプリケーションがあるかどうかを問い合わせます。
  3. 実際の接続がないため、対応する*.dekstopMIMEタイプをサポートするエントリを探し始めます。各*.desktopファイルについてこのフィールドを調べて、InitialPreference適切な候補を決定します。
  4. 使用libreoffice-draw.desktopすることがあります。initialPreference=5

デバッグ情報を含む詳細なログは次のとおりですxdg-mime query default call

$ XDG_UTILS_DEBUG_LEVEL=3 xdg-mime query default application/pdf              
Checking /home/$USER/.config/mimeapps.list
Checking /etc/xdg/mimeapps.list
Checking /home/$USER/.local/share/applications/mimeapps.list
Checking /usr/share//applications/mimeapps.list
Checking /home/$USER/.local/share/applications/defaults.list and 
        /home/$USER/.local/share/applications/mimeinfo.cache
Checking /home/$USER/.local/share/applications/defaults.list and 
         /home/$USER/.local/share/applications/mimeinfo.cache
Checking /usr/local/share//applications/defaults.list and 
         /usr/local/share//applications/mimeinfo.cache
Checking /usr/local/share//applications/defaults.list and 
/usr/local/share//applications/mimeinfo.cache
Checking /usr/share//applications/defaults.list and 
         /usr/share//applications/mimeinfo.cache
Checking /usr/share//applications/defaults.list and 
         /usr/share//applications/mimeinfo.cache
 Checking /home/$USER/.local/share/applications/wine-extension-pdf.desktop
   Select /home/$USER/.local/share/applications/wine-extension-pdf.desktop 
           [ -1 => 0 ]
 Checking /usr/share//applications/FoxitReader.desktop
 Checking /usr/share//applications/evince.desktop
 Checking /usr/share//applications/gimp.desktop
 Checking /usr/share//applications/inkscape.desktop
 Checking /usr/share//applications/libreoffice-draw.desktop
   Select /usr/share//applications/libreoffice-draw.desktop [ 0 => 05 ]
 Checking /usr/share//applications/mcomix.desktop
 Checking /usr/share//applications/mupdf.desktop
 Checking /usr/share//applications/pdf-presenter-console.desktop
 Checking /usr/share//applications/vprerex.desktop
 Checking /usr/share//applications/xpdf.desktop
 Checking /usr/share//applications/zathura-pdf-poppler.desktop
 libreoffice-draw.desktop

の数字は[ X => ]このような呼び出しで得られ、それをawk -F= /InitialPreference=/ {print($2)} /usr/share//applications/libreoffice-draw.desktopスクリプトに入れて決定しました。set -xxdg-mime

これまでに提案された解決策

これまで私が考えた解決策は次のとおりです。私はより良い、理想的にはより体系的なソリューションを探しています。

  • 一つのオプションはxdg-open常にrun-mailcap。私が使用しても、dpkg-divertそれはまだ私が自分で管理する必要があることを意味します。

  • XDGシステムを使用し、このような*/*:xdg-openものをmailcap

ベストアンサー1

xdg-openまた、さまざまな制限により、しばしば混乱します。

ここでは完全なチャックではありませんが、次のデスクトップ項目を使用しています。

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
NoDisplay=true
Exec=run-mailcap %u
Name=run-mailcap
Comment=run-mailcap

すべてを私に委任してくださいmimeapps.list

[Default Applications]
application/ogg=run-mailcap.desktop
application/pdf=run-mailcap.desktop
application/postscript=run-mailcap.desktop
application/rar=run-mailcap.desktop
application/rss+xml=run-mailcap.desktop
application/vnd.openxmlformats-officedocument.wordprocessingml.document=run-mailcap.desktop
application/x-cue=run-mailcap.desktop
application/x-extension-eml=run-mailcap.desktop
application/x-extension-htm=run-mailcap.desktop
application/x-extension-html=run-mailcap.desktop
application/x-extension-rss=run-mailcap.desktop
application/x-extension-xhtml=run-mailcap.desktop
application/x-ms-dos-executable=run-mailcap.desktop
application/x-xpinstall=run-mailcap.desktop
application/xhtml+xml=run-mailcap.desktop
application/xml=run-mailcap.desktop
application/xspf+xml=run-mailcap.desktop
application/zip=run-mailcap.desktop
audio/midi=run-mailcap.desktop
audio/prs.sid=run-mailcap.desktop
...

理論的には、このおよび/またはカスタム転送はxdg-open仮想xdg-utils実装に変換できます。

おすすめ記事