試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

デスクトップ環境のファイルマネージャにおける未登録なファイルタイプの登録とアプリケーションの関連付けについて

未知の種類と関連付け

ファイル種類について

多くの一般的なファイルの「種類」は、shared-mime-infoが提供する(freedesktop.orgによる)データベースによってサポートされていて、GUIファイルマネージャなどから、その種類が認識されていると分かる。しかし、世界的に無名な形式やアプリケーション独自の形式のファイルを使用する場合、未知のファイル形式という扱いになってしまう。
そこで、未知のファイル形式は、決められた場所に決められた書式のファイルを配置することでシステムに登録することになる。

関連付けについて

GUIファイルマネージャ上ではファイル形式によって開くアプリケーションの候補が変わり、画像なら画像ビューアや画像エディタ、オフィス文書ならオフィススイートなどから(ファイルアイコンの)右クリックメニューで開くことができ、その中から既定のもの(ファイルマネージャで設定*1したもの)がダブルクリックで起動できる。
その際の関連付け候補は、アプリケーションの.desktopファイルに記述されているMIMEタイプから決められていて、新しいアプリケーションを作成したとき*2には、そのアプリケーションが扱う形式に関連付けておくと、ファイルマネージャから開けるようにすることができる。

既知のMIMEタイプに対する関連付けを変更する

既知のMIMEタイプに対して、ファイルアイコン右クリック時のメニューやダブルクリック時に開くアプリケーションが望みのものでない場合(どのアプリケーションから開きたいのかを変更したい場合)は、ファイルアイコンの右クリックメニューにある「別(他)のアプリで開く」といった名前のメニュー項目からアプリケーションを選択もしくはコマンド名の直接入力を行い、一度そのアプリケーションで開くと、次からはそのアプリケーションで開くことができるようになる。設定した関連付けは${HOME}/.local/share/applications/mimeapps.list${HOME}/.local/share/applications/defaults.listといったファイルに

[MIMEタイプ]=[desktopファイルのファイル名];

という内容で記録され、コマンド名を手動で指定した場合は${HOME}/.local/share/applications/[コマンド名]-usercreated.desktop${HOME}/.local/share/applications/userapp-[コマンド名]-[文字列].desktopといった.desktopファイルも保存される。

新しいMIMEタイプを登録する

未登録なMIMEタイプは、/usr/share/mime/packages/[名前].xmlというファイルにその定義を記述することで登録することができる。
一般ユーザが自分用に定義をすることも可能で、その場合は${HOME}/.local/share/mime/packages/以下にXMLファイルを配置する。
今回は例として、RCP(レコンポーザ形式のMIDIデータ)という形式を登録することにする。
ファイル名: ~/.local/share/mime/packages/sted2.xml

<?xml version="1.0" encoding="UTF-8"?>

<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">

 <mime-type type="audio/rcp">
  <comment>Recomposer MIDI audio</comment>
  <comment xml:lang="ja">レコンポーザ形式MIDIオーディオ</comment>
  <alias type="audio/x-rcp"/>
  <magic priority="50">
   <match value="RCM" type="string" offset="0"/>
  </magic>
  <glob pattern="*.rcp"/>
 </mime-type>

</mime-info>

「magic」というのは、ファイルの先頭に書かれている、ファイルの種類ごとに固有なデータのこと*3で、RCP形式では、GHexなどのバイナリエディタで開くと「RCM-PC98V2.0...」から始まっていることが分かるので、「RCM」と記述した*4。他の部分には種類の説明やMIMEタイプ文字列、別名、ファイル名パターン(拡張子の指定に使用)といった情報が書かれている。/usr/share/mime/packages/以下の既存のXMLファイルを色々開くと参考になる。
XMLファイルを配置した後は、変更を反映するためにupdate-mime-databaseを実行する。

$ update-mime-database ~/.local/share/mime/

システム全体で有効にしたいのであれば上のファイルを/usr/share/mime/packages/以下に作成し

$ sudo update-mime-database /usr/share/mime/

管理者権限で/usr/share/mime/以下に対して実行する。

新しいアプリケーションにMIMEタイプを関連付ける

アプリケーションとMIMEタイプを.desktopファイルで結びつける。一般ユーザが自分用に使用する場合は${HOME}/.local/share/applications/以下、システム全体で使用する場合は/usr/share/applications/以下に配置する。
ここでは、上のRCP形式のファイルをSTed2に関連付ける。
ファイル名: ~/.local/share/applications/sted2.desktop

[Desktop Entry]
Name=STed2
Comment=High-performance MIDI sequence editor / Music composer system
Comment[ja]=高機能な MIDI シーケンスエディタ・ミュージックコンポーザ
Exec=sted2
Terminal=false
Type=Application
StartupNotify=false
MimeType=audio/midi;audio/rcp;
Categories=Application;AudioVideo;Audio;Midi;Sequencer;

こちらも反映作業が必要で、update-desktop-databaseを使用する。

$ update-desktop-database ~/.local/share/applications/

システム全体では/usr/share/applications/へ.desktopファイルを配置して

$ sudo update-desktop-database /usr/share/applications/

管理者権限で/usr/share/applications/に対して処理をする。

動作を確認

この後ファイルマネージャからファイルの種類の認識と関連付けを確認する。

今回の例では他に候補もなく、そのままダブルクリックでも開ける。同じ種類を扱えるアプリケーションが他にある場合、この記事の上にも書いている通り、ユーザがファイルマネージャの設定でどれを既定にするかを決められる。
なお、Thunarがデーモンモードで動作している場合、データベース更新後に一度「Thunar -q」で完全に止めてから起動する必要がある。

*1:GNOMENautilusではファイルのプロパティダイアログにある「開き方」で候補から選択

*2:もしくは、既存のアプリケーションだがファイルに関連付けられていないものがある場合

*3:fileというコマンドは、この情報をもとにファイルの判別を行い、更に、種類によっては追加の情報も得られる

*4:もしかすると、確実に判別するには3文字では短いかもしれない