読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

gnome3 (gnome-shell) にて mailto: のリンクを任意のプログラムで処理するための設定

目的

Ubuntu 12.10 を使用している.デフォルトのメーラを Gmail にしたい.ちなみに単に Gmail で開くだけだったら gnome-gmail というパッケージがある.しかしできることならgoogle-chrome のアプリケーションモードで Gmail を起動したい.こういう細かい設定は gnome-gmail では難しい*1

ということで mailto: のリンクをクリックした時に任意のプログラムが起動するようにしたい.

解決方法

目的を達成するには以下の 3 つのファイルを必要とする.

mailto-gmail.sh

まずは google-chrome のアプリケーションモードで Gmail を起動するためのコマンドを記述したシェルスクリプトを作成する. google-chrome のアプリケーションモードをコマンドラインから実行するためには --app=URL というオプションを与えればよい.引数としてメールアドレスを受け取ることを考えて以下のようなシェルスクリプトを作成し適当な場所に保存する.実行権限を付加することを忘れないこと.

#!/bin/bash -f
BROWSER=/opt/google/chrome/google-chrome

ADDRESS=`echo ${1} | sed 's/mailto://'`
if [ -z ${ADDRESS} ]; then
	URL="https://mail.google.com/mail/?view=cm&tf=0"
else
	URL="https://mail.google.com/mail/?view=cm&tf=0&to=${ADDRESS}"
fi
OPT=""

${BROWSER} --app=${URL} ${OPT}
mailto-gmail.desktop

先ほど作成したシェルスクリプトgnome-shell が見つけるための .desktop ファイルを作成する.アプリケーションメニューにショートカットがあるアプリケーションはだいたい /usr/share/applications/ というディレクトリに対応する .desktop ファイルが保存してある.このファイルにはアプリケーションの名前,簡単な説明,実行ファイルの位置,どのようなカテゴリに属するかや挙動などが記述されている.

ホームディレクトリには .local/share/applications/ というディレクトリがあって,ここに自分で作成した .desktop ファイルを置けば gnome-shell に認識される.ということで,このディレクトリに以下のような .desktop ファイルを作成する.

[Desktop Entry]
Name=Compose New Message in Gmail
Exec=/your/path/to/mailto-gmail.sh %u
Terminal=false
Type=Application
Categories=Internet;
StartupWMClass=mail.google.com
NotShowIn=GNOME;KDE;

上から順に名前,実行ファイルの位置,端末を起動するかどうか,ファイルの種類,メニューのカテゴリ,ウィンドウマネージャのクラス,アプリケーションメニューに表示しないようにする設定が記述されている.Exec エントリでは %u が引数の代わりになるらしい.NotShowIn エントリで GNOME を指定すれば gnome 環境ではアプリケーションメニューに表示されなくなる.今回はアプリケーションメニューから実行するのではなくリンクをクリックして起動することを考えているので以上のような設定にした.

default.list

.desktop ファイルが格納されていた /usr/share/applications/ というディレクトリには,どのファイルをどのアプリケーションで開くかという設定を記した default.list というファイルがある.僕の環境では,例えば mailto: のリンクを開くアプリケーションは default.list の中で以下のようにして定義されている.

x-scheme-handler/mailto=thunderbird.desktop

この default.list の記述は .local/share/applicationsdefaults.list というファイルを作成して上書きすることができる.前項で作成した mailto-gmail.desktopmailto: のデフォルトアプリケーションに設定したければ .local/share/applications/defaults.list を以下のように記述すればよい.

[Default Applications]
x-scheme-handler/mailto=mailto-gmail.desktop

結果

以上の設定を終えると,ブラウザ上でメールアドレスをクリックしたときやメールアドレスを右クリックして Send Mail To... メニューを実行した時に thunderbird ではなく作成した mailto-gmail.sh が起動するようになる.もちろん,defaults.list.desktop の記述を変更することによって任意のアプリケーションで mailto: リンクを処理することができるようになる.

*1:できなくはないが実行ファイルを編集する必要がある