デフォルトアプリケーション
プログラムはさまざまな方法でデフォルトのアプリケーションの関連付けを実装します。コマンドラインプログラムは伝統的に環境変数を使いますが、グラフィカルアプリケーションでは、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-open の xdg-utils 版は複雑なため、間違ったデフォルトのアプリケーションが開かれる場合はデバッグが困難になる場合があります。このため、これを改善しようとする代替手段が多く存在します。これらの代替品のいくつかは、/usr/bin/xdg-open
実行ファイルを置き換えるので、ほとんどのアプリケーションのデフォルトのアプリケーションの動作を変更します。その他は、単にデフォルトアプリケーションを選択するための代替方法を提供するものです。
perl-file-mimeinfo
perl-file-mimeinfo provides the tools mimeopen(1p) and mimetype(1p). These have a slightly nicer interface than their xdg-utils equivalents:
# 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
Most importantly, xdg-utils programs will actually call file
instead of mimetype
for MIME type detection if it does not detect your デスクトップ環境. This is important because file
does not follow the XDG standard.
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