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