
簡単に言うと:
Debianでは、xdg-open
(経由xdg-mime
)私が好む仕様に従っていませんmailcap
。run-mailcap
xdg-open
アイテムを追跡するための体系的な方法はありますかmailcap
?xdg-open
常に呼び出すようにスクリプトを変更するよりも理想的には簡単ですrun-mailcap
。
コンテキスト
Debian(9.5stretchベース)には、デフォルトのアプリケーションを設定するか、より具体的にはファイル拡張子、MIMEタイプ、およびプログラム(またはプログラム操作)をリンクする複数のシステムがあります。それらの簡単なレビューこの回答では。 MIME関連の点で最も細かい2つの主な項目は次のとおりです。
- デスクトップ環境のための「より現代的な」XDG規格
- 以前
mailcap
のシステムは、メールプロキシとターミナル環境をさらに対象としていました(またはデスクトップとは関係ありませんでした)。非常によく説明されていますこの回答では。
ターゲット
私は2番目のmailcapシステムを好みます。その理由は、ワイルドカードmailcap.order
アプローチを使用すると、アプリケーションをサポートするすべてのMIMEタイプ(またはサブセット)に自動的に接続するのが非常に便利であり、特定のMIMEタイプのビューアとエディタを区別する可能性があるためです。さらに、システムはシステムアップデートと緊密に統合されています。つまり、パッケージを更新しても接続順序は変わりません。
実行エントリポイント
上記の2つの方法には異なるエントリポイントがあります。
- XDGの使用
xdg-open
- mailcapシステムの使用法
run-mailcap
またはエイリアス(view
、、edit
)
ただし、プログラムごとに異なるエントリポイントを呼び出すため、結果が一貫していない可能性があります。それでも私はその仕事をしています。
xdg-open
として返されることがあります。run-mailcap
/usr/bin/xdg-open
テストの結果、デスクトップが有効になっている場合(通常の意味では必ずしもデスクトップ環境である必要はありません)、試してみてください。そうしないと、利用可能なものに置き換えることができます。xdg-utils-1.1.1-1+deb9u1
xdg-open
xdg-mime
run-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-open
Libreoffice DrawでPDFが開きます。その理由は次のとおりです(set -x
スクリプトに挿入して決定されます)。
xdg-open
xdg-mime query filetype file.pdf
MIMEタイプが誰であるかを確認するために呼び出されます。application/pdf
xdg-mime
次に、対応するMIMEタイプのデフォルトアプリケーションがあるかどうかを問い合わせます。- 実際の接続がないため、対応する
*.dekstop
MIMEタイプをサポートするエントリを探し始めます。各*.desktop
ファイルについてこのフィールドを調べて、InitialPreference
適切な候補を決定します。 - 使用
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 -x
xdg-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
実装に変換できます。