openコマンドで起動するアプリケーションを設定する方法

ubuntumacOSでは,ターミナルで

$ open hogehoge.pdf

とコマンドを実行すると,pdfのビューアーが起動して pdfを表示できます.

$ open http://www.google.com

とコマンドを実行すると,ブラウザが起動して URLを開いてくれます.

この設定を変更する方法をまとめます.OSはdebian系を想定します

概要

openコマンドにはいくつかの実装が存在します.

debian系だと open コマンドは xdg-open を使っているはずです.確認します

$ type open
open is hashed (/usr/bin/open)
$ ls -la /usr/bin/open
lrwxrwxrwx 1 root root 22 Dec 30 00:00 /usr/bin/open -> /etc/alternatives/open
$ readlink -f /usr/bin/open
/usr/bin/xdg-open

たしかに /usr/bin/xdg-open を使っています

xdg-open の設定変更

xdg-open を使っている場合,設定は xdg-mime コマンドを使います.

アプリケーションの関連付けは,拡張子ではなく,mime type に対して行います.

例として hogehoge.pdf の mime typeを調べます

$ xdg-mime query filetype hogehoge.pdf 
application/pdf

application/pdf でした

application/pdfに関連付けらているアプリケーションを調べます

$ xdg-mime query default application/pdf
gimp.desktop

gimp でした

アプリを変更する場合は以下のコマンドを実行します

$ xdg-mime default org.gnome.Evince.desktop  application/pdf

org.gnome.Evince.desktop の部分がアプリケーションです.ここは /usr/share/applications/ 以下にあるファイルが指定できます.org.gnome.Evince.desktopを指定すると evince が関連付されます. (evince は軽量なpdfビューアです)

内部動作

環境変数 XDG_UTILS_DEBUG_LEVEL でデバッグログが出力されます.大きな値を設定すれば詳細が表示されるのでとりあず999を指定します

$ XDG_UTILS_DEBUG_LEVEL=999  xdg-mime query default application/pdf
Checking /home/xxxxx/.config/mimeapps.list
org.gnome.Evince.desktop

設定ファイルとして ~/.config/mimeapps.list を読んでいることが分かります. 

設定されてない mime type を指定してみましょう.たとえば dummy/X を指定してみます

$ XDG_UTILS_DEBUG_LEVEL=999  xdg-mime query default dummy/X
Checking /home/xxxxx/.config/mimeapps.list
 (割愛)
Checking /usr/share//applications/defaults.list and /usr/share//applications/mimeinfo.cache

ユーザ側の設定ファイルをサーチして,エントリが見つからない場合はシステム側の設定ファイルを順にサーチしていることが分かります.