デフォルトアプリケーション
プログラムはさまざまな方法でデフォルトのアプリケーションの関連付けを実装します。コマンドラインプログラムは伝統的に環境変数を使いますが、グラフィカルアプリケーションでは、GIO API、Qt API または xdg-utils の一部である /usr/bin/xdg-open
を実行することで、XDG MIME Applications を使用する傾向があります。xdg-open や XDG MIME Applications は非常に複雑なので、様々な代替リソースオープナーが開発されました。次の表は、それぞれの方法のアプリケーション例です。
メソッド | XDG を使用 | アプリケーション例 |
---|---|---|
GIO's GAppInfo | Yes | Firefox, GNOME Files, PCManFM, Thunar, Thunderbird, Telegram |
/usr/bin/xdg-open |
By default | Chromium (ダウンロードしたファイルを開く) |
custom | Usually not | mc, ranger |
環境変数 | No | man, sudoedit, systemctl |
D-Bus の FileManager1 | org.freedesktop.FileManager1 | Firefox (Open containing folder), Zotero (ファイルを表示), Telegram (フォルダに表示) |
多くのデスクトップ環境とグラフィカルファイルマネージャは、デフォルトのアプリケーションを設定するための GUI を提供します。
目次
背景情報
プログラムは、ファイルや URI をユーザーの好みのアプリケーションで開く必要がある場合があります。ユーザーの好みのアプリケーションでファイルを開くには、ファイルタイプを検出し(通常はファイル名の拡張子か MIME タイプにマッピングされたマジックナンバーを使用)、そのファイルタイプに関連するアプリケーションが存在する必要があります。
Heirloom UNIX のプログラムでは、MIME タイプの検出には mime.types を、アプリケーションの関連付けには mailcap を使用していました。
リソースオープナー
- XDG MIME Apps: implements the XDG MIME Applications specification
- RegEx rules: allows MIME types to be associated with applications using regular expressions
- URI support: allows arbitrary URI schemes to be associated with applications
Name | Package | XDG MIME Apps | RegEx rules | URI support |
---|---|---|---|---|
xdg-open | xdg-utils | Yes | No | Yes |
mimeopen(1p) | perl-file-mimeinfo | Yes | No | No |
mimeo | mimeoAUR | Yes | Yes | Yes |
whippet | whippetAUR | Yes | No | Yes |
linopen | linopenAUR | No | Yes | Yes |
mimi | mimi-gitAUR | No | No | partly |
busking | busking-gitAUR | No | Yes | Yes |
sx-open | sx-openAUR | No | Yes | Yes |
rifle(1) | ranger | No | Yes | No |
handlr | handlr-binAUR | Yes | No | Yes |
xdg-open
xdg-open (xdg-utils の一部) は、XDG MIME Applications を実装し、多くのプログラムで使用されています。
xdg-utils 版の xdg-open は複雑なため、間違ったデフォルトのアプリケーションが開かれる場合はデバッグが困難になる場合があります。このため、これを改善しようとする代替手段が多く存在します。これらの代替品のいくつかは、/usr/bin/xdg-open
実行ファイルを置き換えるので、ほとんどのアプリケーションのデフォルトのアプリケーションの動作を変更します。その他は、単にデフォルトアプリケーションを選択するための代替方法を提供するものです。
perl-file-mimeinfo
perl-file-mimeinfo は mimeopen(1p) と mimetype(1p) というツールを提供します。これらは、xdg-utils の同等品より少し良いインターフェイスを持っています。
# determine a file's MIME type $ mimetype photo.jpeg photo.jpeg: image/jpeg # choose the default application for this file $ mimeopen -d photo.jpeg Please choose an application 1) Feh (feh) 2) GNU Image Manipulation Program (gimp) 3) Pinta (pinta) use application # # open a file with its default application $ mimeopen -n photo.jpeg
最も重要なことは、xdg-utils プログラムがデスクトップ環境を検出しない場合、MIME タイプ検出のために mimetype
の代わりに file
を実際に呼び出すことです。file
は XDG 標準に準拠していないため、これは重要なことです。
mimeo
mimeoAUR provides the tool mimeo
, which unifies the functionality of xdg-open
and xdg-mime
.
# determine a file's MIME type $ mimeo -m photo.jpeg photo.jpeg image/jpeg # choose the default application for this MIME type $ mimeo --add image/jpeg feh.desktop # open a file with its default application $ mimeo photo.jpeg
However a big difference with xdg-utils is that mimeo also supports custom "association files" that allow for more complex associations. For example, passing specific command line arguments based on a regular expression match:
# open youtube links in VLC without opening a new instance vlc --one-instance --playlist-enqueue %U ^https?://(www.)?youtube.com/watch\?.*v=
xdg-utils-mimeoAUR patches xdg-utils so that xdg-open
falls back to mimeo if no desktop environment is detected.
whippet
whippetAUR provides the tool whippet
, which is similar to xdg-open
. It has X11 integration by using libnotify to display errors and dmenu to display choices between applications to open.
# open a file with its default application $ whippet -M photo.jpeg # choose from all possible applications for opening a file (without setting a default) $ whippet -m photo.jpeg
In addition to implementing XDG MIME Applications, whippet can also use a SQlite database of weighted application/MIME type/regex associations to determine which app to use.
handlr
handlr-binAUR, written in Rust, provides the functionality of xdg-open
and xdg-mime
with a streamlined interface.
Compared to xdg-utils
, it includes:
- setting associations by extension, removing the need to look up or remember mime types
- validation for mime types and extensions
- removal of invalid entries from
mimeapps.list
- intelligent detection of mime types from file content in case filename is ambiguous
- autocompletion of mimes, extensions, and desktop entries
# The following two are identical handlr set .png feh.desktop handlr set image/png feh.desktop # List default apps handlr list # Get the handler for a mime/extension $ handlr get .png --json {"handler":"pqiv.desktop","name":"pqiv","cmd":"/usr/bin/pqiv"} # Launch a handler with optional path/URL handlr launch x-scheme-handler/https handlr launch x-scheme-handler/https -- https://google.ca
xdg-utils-handlrAUR provides an xdg-open
that uses handlr
under the hood to replace xdg-utils
.
Minimalist replacements
The following packages conflict with and provide xdg-utils because they provide their own /usr/bin/xdg-open
script.
If you want to use one of these resource openers while still being able to use xdg-utils, install them manually in a PATH directory before /usr/bin
.
- linopenAUR - 170-line Bash script, supports regex rules
- mimi-gitAUR - 130-line Bash script, can change command arguments for each MIME type
- busking-gitAUR - 80-line Perl script similar to mimi but also supports regex rules
- sx-openAUR - 60-line Bash script, uses a simple shell-based config file