デスクトップエントリ
XDG デスクトップエントリ仕様は、XDG Desktop Menu 仕様を実装しているデスクトップ環境のアプリケーションメニューにアプリケーションを統合するための規格です。
基本
デスクトップエントリには、1つの Type
キーと1つの Name
キーが含まれていなければなりません。オプションで、アプリケーションメニューでの見た目を定義することができます。
Type
に指定できるタイプは3つあります:
- Application
- どのようにしてアプリケーションを起動するかや、どの MIME タイプをサポートするかを定義します (MIME タイプの記述は XDG MIME Applications により使用されます)。XDG 自動起動を使えば、アプリケーションエントリを特定のディレクトリに配置することにより、そのエントリを自動起動させることができます。アプリケーションエントリは、ファイル拡張子
.desktop
を使用します。#アプリケーションエントリ を見てください。
- Link
URL
へのショートカットを定義します。リンクエントリは、ファイル拡張子.desktop
を使用します。
- Directory
- アプリケーションメニューでのサブメニューの見た目を定義します。ディレクトリエントリは、ファイル拡張子
.directory
を使用します。
以下のセクションでは、これらのエントリの作成や検証の方法について大まかに説明します。
アプリケーションエントリ
アプリケーションのデスクトップエントリ (.desktop
ファイル) は、基本的にメタ情報リソースの集合であり、アプリケーションのショートカットです。通常、これらのファイルは、システム全体でインストールしたアプリケーションなら /usr/share/applications
か /usr/local/share/applications
に、ユーザ固有のアプリケーションなら ~/.local/share/applications
に入っています。ユーザーのエントリはシステムのエントリよりも優先されます。
ファイル例
以下は、コメントを追加したデスクトップエントリの構成のサンプルです。このサンプルは雰囲気を伝えるだけのものであり、利用可能なエントリキー全ての使い方を示してはいません。完全なキーのリストは freedesktop 仕様 を見てください。
[Desktop Entry] # 先のセクションでリストアップしたタイプ Type=Application # このファイルが準拠しているデスクトップエントリ仕様のバージョン Version=1.0 # アプリケーションの名前 Name=jMemorize # ツールチップとして利用できる/されるコメント Comment=Flash card based learning tool # 実行ファイルが存在するフォルダへのパス Path=/opt/jmemorise # アプリケーションの実行可能ファイル。引数を付けることができます。 Exec=jmemorize # エントリを表示するときに使われるアイコンの名前 Icon=jmemorize # アプリケーションをターミナルで実行する必要があるかどうかを記述 Terminal=false # このエントリをどのカテゴリで表示すべきかを記述 Categories=Education;Languages;Java;
キーの定義
freedesktop のサイトに、認識される全てのデスクトップエントリが記載されています。
例えば、Type
キーは3つのタイプのデスクトップエントリを定義します: アプリケーション (Application, タイプ1), リンク (Link, タイプ2), ディレクトリ (Directory, タイプ3)。
Version
キーはアプリケーションのバージョンを表すものではなく、デスクトップエントリが準拠しているデスクトップエントリ規格のバージョンを指定します。
Name
,GenericName
,Comment
はしばしば以下のように同じような値が使われることがありますが:
Name=Pidgin Internet Messenger GenericName=Internet Messenger
または:
Name=NoteCase notes manager Comment=Notes Manager
上記のような設定はユーザーを混乱させるだけなので避けるべきです。Name
キーにはアプリケーションの名前 (あるいはその省略語や頭字語) だけを書いてください。
GenericName
にはアプリケーションがどのようなものなのかを示す名称を指定するべきです (例えば Firefox なら "Web Browser")。Comment
には何らかの追加情報を記入することを意図しています。
検証
いくつかのキーは非推奨となっているので、desktop-file-validate(1) を使ってデスクトップエントリを検証する必要があるかもしれません。このツールは desktop-file-utils パッケージに含まれています。エントリを検証するには、以下を実行してください:
$ desktop-file-validate <デスクトップファイル>
上記のコマンドで詳細かつ有用な警告・エラーメッセージが表示されます。
インストール
対象のディレクトリに desktop ファイルをインストールするには、desktop-file-install(1) を使ってください。例えば:
$ desktop-file-install --dir=$HOME/.local/share/applications ~/app.desktop
デスクトップエントリデータベースの更新
~/.local/share/applications
で定義されているデスクトップエントリを機能させるには、以下のコマンドを実行してください:
$ update-desktop-database ~/.local/share/applications
アイコン
Icon Theme Specification も参照してください。
一般的な画像フォーマット
以下はアイコンとしてよく使われている画像フォーマットの簡単な概要です。
拡張子 | フルネームまたは説明 | グラフィック形式 | コンテナフォーマット | サポート |
---|---|---|---|---|
.png | Portable Network Graphics | ラスタ | No | Yes |
.svg(z) | Scalable Vector Graphics | ベクタ | No | Yes (オプション) |
.xpm | X PixMap | ラスタ | No | Yes (非推奨) |
.gif | Graphics Interchange Format | ラスタ | No | No |
.ico | MS Windows Icon Format | ラスタ | Yes | No |
.icns | Apple Icon Image | ラスタ | Yes | No |
アイコンの変換
(gif
や ico
など) freedesktop.org の仕様でサポートされていないフォーマットのアイコンしか見つからなかった場合、convert ツールでサポート/推奨されているフォーマットに変換できます (convert は imagemagick パッケージに含まれています):
$ convert <アイコン名>.gif <アイコン名>.png
ico
などのコンテナフォーマットから変換した場合、<icon name>-<number>.png
という名前で ico
ファイルにカプセル化されていた画像が取得できます。画像のサイズや ico
などのコンテナに含まれている画像の数を調べたいときは (imagemagick パッケージに含まれている) identify を使います:
$ identify /usr/share/vlc/vlc48x48.ico
/usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
上記の ico ファイルでは、ファイル名からは 48x48 の画像しか含まれていないように見えますが、実は6つのサイズの画像が含まれていて、中には 48x48 よりも大きな 128x128 の画像もあります。
あるいは、icotool (icoutils にあり) を使って ico コンテナから png イメージを抽出できます:
$ icotool -x <icon name>.ico
.icns コンテナからイメージを展開する場合、icns2png (libicns により提供) を使うことができます:
$ icns2png -x <icon name>.icns
アイコンの取得
大抵 .desktop ファイルが付属しているパッケージにはアイコンが含まれていますが、アイコンは存在するのに .desktop ファイルが開発者によって作られていない場合もあります。まずはソースパッケージの中にアイコンが存在しないか確認すると良いでしょう。 ソースパッケージの中に大量の画像が存在するときは、find を使って拡張子でファイルを絞り込んで、それから grep を使ってパッケージ名や "icon" あるいは "logo" などのキーワードで検索をかけましょう:
$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
アプリケーションの開発者がソースパッケージにアイコンを含めていないときは、アプリケーションのウェブサイトを検索しましょう。tvbrowserAUR など、プロジェクトによってはウェブサイトに アートワーク/ロゴのページ が存在しアイコンをダウンロードすることができます。プロジェクトがマルチプラットフォームの場合、Linux/UNIX パッケージにアイコンが付属していなくても、Windows パッケージには存在する可能性があります。プロジェクトが CVS や SVN などのバージョン管理システムを使用している場合、リポジトリにアイコンが存在しないか確認してください。 どうやっても見つからないのであれば、プロジェクトにまだアイコンやロゴがないのかもしれません。
アイコンのパス
freedesktop.org 仕様は、プログラムがアイコンを探索するディレクトリと、探索する順番を規定しています:
$HOME/.icons
(後方互換性のため)$XDG_DATA_DIRS/icons
/usr/share/pixmaps
ツール
arronax
Arronax は、アプリケーションやショートカットのデスクトップエントリを作成/変更するためのグラフィカルなプログラムです。
alacarte
alacarte は、GNOME のためのグラフィカルなメニューエディタで、freedesktop.org のメニュー仕様を使用します。デスクトップエントリのオーバーライドもサポートしています。
gendesk
gendesk は PKGBUILD ファイルから直接情報を取得して .desktop ファイルを生成する Arch Linux 専用のツールとして開発がスタートしました。今ではコマンドライン引数を使用する汎用のツールとなっています。
アイコンは openiconlibrary から自動的にダウンロードすることが可能です (アイコンのソースは将来変更される可能性があります)。
使用法
gendesk
を makedepends に追加
prepare()
関数に以下を記入:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
- もしくは、アイコンが既に含まれている場合 (例: $pkgname.png)、アイコンをダウンロードしない、あるいはデフォルトのアイコンを使うために
-n
フラグを使います。例:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
- 作成された
$srcdir/$pkgname.desktop
はpackage()
関数でインストールします:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
- アイコンをインストールするには:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
--name='Program Name'
でメニューエントリの名前を決めることができます。
--exec='/opt/some_app/elf --with-ponies'
で exec フィールドを設定することができます。
- 詳しくは gendesk プロジェクト を参照。
lsdesktopf
lsdesktopfAUR は、利用可能な .desktop ファイルを一覧表示したり、エントリの内容を検索したりできます。
$ lsdesktopf $ lsdesktopf --list $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
MIME タイプ関連の検索を行うこともできます。XDG MIME Applications#lsdesktopf を見てください。
fbrokendesktop
fbrokendesktopAUR Bash スクリプトは、既存のパスを指していない壊れた Exec
の値を検出します。パラメータを指定しなかった場合、fbrokendesktop は DskPath
配列のプリセットフォルダを使います。破損している .desktop だけを完全なパスとファイル名と共に表示します。
例:
$ fbrokendesktop $ fbrokendesktop /usr $ fbrokendesktop /usr/share/xsessions/icewm.desktop
ヒントとテクニック
ターミナルから desktop ファイルを実行する
gtk3 がインストールされている場合、gtk-launch application.desktop
と実行してください。
あるいは、dex パッケージをインストールして、dex /path/to/application.desktop
と実行してください。
desktop ファイルの変更
システム全体で使用される .desktop ファイル (例えば、パッケージからインストールしたもの) を変更したい場合、まず関連する .desktop ファイルを $XDG_DATA_HOME/applications/
にコピーしてください (例えば、/usr/share/applications/
から ~/.local/share/applications/
へ)。こうすることで、システムのアップグレードの際に対象のパッケージがアップデートされても、あなたが加えた変更が上書きされることはありません。ローカルのユーザ固有の .desktop ファイルは、自動的にシステム全体の .desktop ファイルよりも優先されるはずです。これで、必要に応じてローカルのユーザ固有の .desktop ファイルを変更できます。
デスクトップエントリの隠匿
デスクトップエントリの可視性は、複数の方法で制御できます。詳細は Desktop Entry Specification を見てください。以下の内容のうち1つを .desktop ファイルに追加してください:
- 全てのデスクトップ環境に適用。以下のうち1つ (あるいは両方) を選んでください:
- メニューに表示したくないアプリケーションに対して
NoDisplay=true
行を追加する。 - 削除済みでありメニューに表示したくないアプリケーションに対して
Hidden=true
行を追加する。
- メニューに表示したくないアプリケーションに対して
- デスクトップ環境を指定。以下のうち1つを選んでください。
desktop_names
の部分はデスクトップ環境のリストであり、セミコロンで区切ってください (例:GNOME
,GNOME;Xfce;KDE;
):NotShowIn=desktop_names
行を追加すると、指定したデスクトップ環境でエントリを隠します。OnlyShowIn=desktop_names
行を追加すると、指定したデスクトップ環境でのみエントリを表示します。
環境変数の変更
環境変数を設定するには、env(1) コマンドで環境変数を設定するように .desktop ファイル内の Exec=
行を編集してください。例えば:
~/.local/share/applications/abiword.desktop
# Exec=abiword %U Exec=env LANG=he_IL.UTF-8 abiword %U