デフォルトアプリケーション
プログラムはさまざまな方法でデフォルトのアプリケーションの関連付けを実装します。コマンドラインプログラムは伝統的に環境変数を使いますが、グラフィカルアプリケーションでは、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 は xdg-open と xdg-mime の機能を統合したツール mimeo を提供します。
# 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
しかし、xdg-utils との大きな違いは、mimeoはより複雑な関連付けを可能にするカスタムの「関連付けファイル」をサポートしていることです。例えば、正規表現のマッチに基づいた特定のコマンドライン引数を渡すことができます。
# 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 は、デスクトップ環境が検出されない場合に xdg-open が mimeo にフォールバックするように xdg-utils にパッチを当てます。
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