Λlisue's blog

つれづれなるままに更新されないブログ

freedesktop.org 規格のデスクトップファイルについてのメモ

どうも徹夜が続いているAlisueです。

今回は毎度忘れてしまうGNOME(もっと正確に言えば freedesktop.org 規格に順したデスクトップ環境) におけるデスクトップファイル(Desktop file)の情報をまとめたいと思います。 おもにDesktop Entry Specification の内容となります。

デスクトップファイル?

GNOMEではデスクトップファイルと呼ばれる特殊なファイルによってインストールされているアプリケーションを管理しています。 パッケージマネージャを利用してアプリケーションをインストールした場合はこのデスクトップファイルは自動的に作成されますが 自前でコンパイルしたプログラムなどはこのデスクトップファイルが無いためTerminalでしか起動することができなくなります。

なおこのデスクトップファイルは主に以下の情報が書かれております。

  • アプリケーションの名前
  • アプリケーションの説明
  • アプリケーションのバージョン
  • アプリケーションのタイプ
  • アプリケーションのアイコン
  • 起動方法(起動コマンド)
  • アプリケーションのカテゴリ(メニュー上でどこに属するか?)

自前でコンパイルしたプログラムでもこのファイルを自前で作成することでGNOME上でも使用可能にすることができます。

フォーマット

デスクトップファイルは以下のようなフォーマットになっています(例としてGvim)。 なお下記において先頭行以外の#以降はコメントとみなします。また*がついている行は必須行です。

#!/usr/bin/env xdg-open     # 実行可能な場合に開くプログラム
[Desktop Entry]             # デスクトップエントリーであることを示す行 *
Type=Application            # アプリケーションのタイプ *
Version=7.4                 # アプリケーションのバージョン
Name=GVim                   # アプリケーションの名前 *
GenericName=Editor          # アプリケーションの種別名称
Comment=Graphical vim       # アプリケーションの説明
Icon=gvim                   # アプリケーションのアイコン
TryExec=gvim                # アプリケーション存在確認用コマンド
Exec=gvim %U                # アプリケーションの起動方法
Terminal=false              # ターミナルを利用してアプリケーションを起動するかどうか
MimeType=text/plain         # アプリケーションが理解するmimetypeを指定(セミコロン区切り)

Type

デスクトップファイルのタイプを規定しています。現在以下の3種類から選ぶことができます。

  • Application -- アプリケーションであることを示す
  • Link -- URLリンクであることを示す
  • Directory -- ディレクトリであることを示す

今回は野良ビルドアプリケーション用のデスクトップファイル作成に関する情報なのでここはApplicationとなります。

Version, Name, GenericName, Comment

各行のコメント通りです。Nameのみ必須の値となります。

Icon

アプリケーションのアイコンです。アイコンは拡張子を除いたファイル名で指定します。 実際にアイコンファイルがどのように検索されるかについては後記します。

TryExec

アプリケーションがインストールされているかどうかを調べるためのコマンドになります。 このコマンドの実行が失敗した場合(ファイルがない・終了コードが0以外) はこのデスクトップファイルは存在しないものとして扱われGNOME上にこのエントリーが 表示されることはありません。

Exec

アプリケーションを実行するコマンドを指定します。 %Uなどフィールドコードと呼ばれる特殊な値を渡すことができます。 下記は使用可能なフィールドコードの例です。 詳細はThe Exec key を参照してください。

%f

起動時に渡されたシングルファイルのパスを表します。 複数のファイルが渡された場合でも一つだけしか渡しません。 また渡されたファイルの場所がローカルファイルシステムではない場合(HTTP, FTP, SSH) はファイルをローカルファイルに一時ファイルとしてコピーしてからその一時ファイルの パスを渡します(URL系のパスを理解しないプログラム用)

%F

起動時に渡されたすべてのファイルのパスを表します。 渡されたファイルの場所がローカルファイルシステムではない場合は%fと同様に ローカルファイルに一時ファイルとしてコピーし、そのパスを渡します。

%u

起動時に渡されたシングルファイルのURLを表します。 主にURLを理解でき、複数のファイルを扱えないプログラム用です。

%U

起動時に渡されたすべてのファイルのURLを表します。 主にURLを理解でき、複数ファイルも扱えるプログラム用です。

%i

Iconの値を--iconという値とともに渡す際に使用します。

%c

使用している言語に合わせたNameの値を表します。

%k

デスクトップファイルのパスを表します。

Terminal

アプリケーションがTerminalを使用するかどうかを表します。 通常GUIアプリケーションではこの値はfalseとなります。

MimeType

アプリケーションが理解できるmimetypeを指定します。 GNOME上から特定の種類のファイルを編集する際に役立ちます。詳しくは後記。

この他にもいくつか指定できるオプションがあります。 詳細はRecognized desktop entry keys を参照してください。

保存場所

デスクトップファイルは/usr/share/applicationsもしくは~/.local/share/applications に保存されます。それぞれシステム用・ユーザー専用となります。

なお新しくデスクトップファイルを作成したあとは下記コマンドにてデスクトップファイルデータベースを更新する必要があります。

% update-desktop-database

アイコン

デスクトップファイルでは通常アイコンのファイル名のみを指定します。 これは状況により使用するアイコン画像を柔軟に切り替えるために必要です。

デスクトップファイルがサポートしているアイコンファイルタイプは

  • png -- ビットマップ形式の画像。綺麗なアイコンを表示するためには様々なサイズを用意する必要がある
  • svg -- ベクター形式の画像。ベクター形式なのでどのようなサイズでも美しく表現することができる
  • xpm -- 非推奨。後方互換性のためだけに用意されている

の3種類ですがxpmに関しては本記事では言及しません。

アプリケーションの開発者であれば様々な環境を考慮してアイコンを様々なサイズで作成する必要がありますが 野良ビルドしたアプリケーションのアイコンを設定したいだけであればsvgのみで構いません。 もしもsvgが手に入らない場合は最低48x48のアイコンを用意すれば問題ありません。

svg形式のアイコンの保存場所

svg形式のアイコンの場合は下記のいずれかに保存すれば使用出来るようになります。

  • ~/.local/share/icons/hicolor/scalable/apps -- ユーザー専用
  • /usr/share/icons/hicolor/scalable/apps -- システム用

なお~/.icons/usr/share/pixmapsに保存した場合でも読み込まれるようですが、 後方互換性のために残されているだけなので上記のいずれかに保存することをおすすめします。

アイコンの保存場所としてhicolorを指定していますが、これはデフォルトテーマを表しています。 現在使用しているテーマに適切なアイコンファイルがない場合はhicolorが最後に呼ばれるためこのディレクトリ にアイコンを保存しています。

png形式のアイコンの保存場所

この場合いくつかのサイズを用意し、別ディレクトリに保存する方法が取られています。 アイコンを美しく表現するためには下記サイズすべてを用意するべきですが、最低48x48のサイズがあれば動くようです (正確に言えば下記サイズすべてが使用されるわけではなくindex.themeで規定されているサイズのみが使用されるようです)。

  • 16x16
  • 22x22
  • 24x24
  • 32x32
  • 36x36
  • 48x48
  • 64x64
  • 72x72
  • 96x96
  • 128x128
  • 192x192
  • 256x256
  • 512x512

これらのサイズの画像を用意し、各サイズごとに以下のいずれかに保存すれば使用出来るようになります。 なおリスト中の??x??はサイズ(16x16など)を表しています。

  • ~/.local/share/icons/hicolor/??x??/apps -- ユーザー専用
  • /usr/local/share/icons/hicolor/??x??/apps -- システム用

参考: - Icon Theme Specification - Tango Icon Theme Guidlines

Mimetype

デフォルトで起動するアプリケーションを指定する際などに役立ちます。 ただMimeTypeをデスクトップファイルで指定するとそのmimetypeのファイル以外ではファイルを開くアプリケーション選択画面 に現れないためよくわからない場合は下手に指定しないほうが良いかと思います。

このmimetypeが最も役立つのは自分で新しいmimetypeを追加した場合です。mimetypeの追加は

  • ~/.local/share/mime/packages -- ユーザー専用
  • /usr/share/mime/packages -- システム用

のどちらかに下記例のような内容でXMLファイルを作成することで追加できます。

<?xml version='1.0' encoding='utf-8'?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
    <mime-type type="application/x-newtype"> 
    <comment>new mime type</comment>
    <glob pattern="*.xyz"/> 
    </mime-type>
</mime-info>

このように独自のmimetypeをglobパターンなどを使用して追加することができます。 なおmimetypeを追加したあとは下記コマンドを実行してmimetypeデータベースを更新 する必要があります。

% update-mime-database ~/.local/share/mime
% update-mime-database /usr/share/mime

なお実際にmimetypeが適切にしていされているかはmimetypeコマンドをファイルで実行することで確認できます。

% mimetype test.xyz
test.xyz: application/x-newtype

参考: - Modifying MIME Types - Registering Applications for MIME Types