Ond*_*ver 7 defaults debian mime-types xdg-open
在 Debian 中xdg-open(通过xdg-mime)不遵循我更喜欢使用的mailcap规范run-mailcap。是否有一些系统的方法来xdg-open跟踪mailcap条目?理想情况下,比修改xdg-open脚本以始终调用run-mailcap.
Debian(从 9.5 开始)有几个系统用于设置默认应用程序,或者更具体地说,关联文件扩展名、MIME 类型和程序(或程序操作)。在这个答案中简要回顾了它们。粒度最大的两个主要(就 MIME 关联而言)是
mailcap系统更多地针对邮件代理和终端环境(或与桌面无关)。在这个答案中有很好的描述。我更喜欢使用第二个 mailcap 系统,因为它的通配符mailcap.order方法可以非常方便地自动将应用程序与其支持的所有(或部分)MIME 类型相关联,并且还可以区分给定 MIME 类型的查看器和编辑器。该系统也与系统更新紧密相关,即更新包不会改变关联顺序。
上面提到的两种方法有不同的入口点
xdg-openrun-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
# ...
Run Code Online (Sandbox Code Playgroud)
目标是让 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/pdfxdg-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
Run Code Online (Sandbox Code Playgroud)
在这些数字[ 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. 但可能会导致终端会话中的循环调用。
我xdg-open也经常对各种限制感到困惑。
我在这里并不假装完整,但我正在使用以下桌面条目:
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
NoDisplay=true
Exec=run-mailcap %u
Name=run-mailcap
Comment=run-mailcap
Run Code Online (Sandbox Code Playgroud)
并将所有内容委托给我的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
...
Run Code Online (Sandbox Code Playgroud)
理论上,可以将此和/或您的自定义转移转换为xdg-open虚拟xdg-utils实现。
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |