コンテンツにスキップ

デスクトップエントリ

提供: ArchWiki
2021年4月14日 (水) 22:56時点におけるBuzztaiki (トーク | 投稿記録)による版 (recognized desktop entry keys のリンク先を en のページと同様に変更)

デスクトップエントリは X Window System で動作するプログラムの挙動を指定する freedesktop.org の仕様です。デスクトップエントリは設定ファイルとしてアプリケーションの起動方法やメニューとアイコンの表示方法を定義します。最も一般的なデスクトップエントリは .desktop と .directory ファイルです。この記事では有用な標準仕様のデスクトップエントリを作成する方法を簡単に説明します。主にパッケージ作成者やメンテナを対象にしていますが、ソフトウェアの開発者なども読む価値があると思われます。

デスクトップエントリには大きくわけて3つのタイプがあります:

アプリケーション
アプリケーションのショートカット
リンク
ウェブリンクのショートカット。
ディレクトリ
メニューエントリのメタデータのコンテナ。

以下のセクションではこれらのエントリを作成したり修正する方法をざっと説明しています。

アプリケーションエントリ

アプリケーションのデスクトップエントリ、または .desktop ファイルは、基本的にメタ情報の集合でありアプリケーションのショートカットです。これらのファイルは基本的に、システム全体でインストールしたアプリケーションなら /usr/share/applications または /usr/local/share/applications に、ユーザー個別にインストールしたアプリケーションなら ~/.local/share/applications に入っています。ユーザーのエントリはシステムのエントリよりも優先されます。

サンプルファイル

以下はデスクトップエントリの構成のサンプルです。このサンプルは雰囲気を伝えるだけのものであり、利用可能なエントリキー全ての使い方を示してはいません。完全なキーのリストは freedesktop.org specification を見てください。

[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.org のサイト にデスクトップが認識する全てのデスクトップエントリが記載されています。例えば、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-utils パッケージに含まれている desktop-file-validate を使うのが確認するのに一番最適かつシンプルな方法です。確証するには、次を実行:

$ desktop-file-validate <your desktop file>

上記のコマンドで詳細かつ有用な警告・エラーメッセージが表示されます。

アイコン

一般的な画像フォーマット

以下はアイコンとしてよく使われている画像フォーマットの簡単な概要です。

freedesktop.org の仕様 で指定されているアイコンとしてサポートされる画像フォーマット
拡張子 フルネームまたは説明 グラフィック形式 コンテナフォーマット サポート
.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 <icon name>.gif <icon name>.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 の画像もあります。

アイコンの取得

大抵 .desktop ファイルが付属しているパッケージにはアイコンが含まれていますが、アイコンは存在するのに .desktop ファイルが開発者によって作られていない場合もあります。まずはソースパッケージの中にアイコンが存在しないか確認すると良いでしょう。ソースパッケージの中に大量の画像が存在するときは、find を使って拡張子でファイルを絞り込んで、それから grep を使ってパッケージ名や "icon" あるいは "logo" などのキーワードで検索をかけましょう:

$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"

アプリケーションの開発者がソースパッケージにアイコンを含めていないときは、アプリケーションのウェブサイトを検索しましょう。tvbrowser など、プロジェクトによってはウェブサイトに アートワーク/ロゴのページ が存在しアイコンをダウンロードすることができます。プロジェクトがマルチプラットフォームの場合、Linux/UNIX パッケージにアイコンが付属していなくても、Windows パッケージには存在する可能性があります。プロジェクトが CVS や SVN などのバージョン管理システムを使用している場合、リポジトリにアイコンが存在しないか確認してください。どうやっても見つからないのであれば、プロジェクトにまだアイコンやロゴがないのかもしれません。

ツール

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 フィールドを設定することができます。

*.desktop ファイルから検索

lsdesktopfAUR bash スクリプトは "Categories" や "Exec" の中身を検索します。"Categories" が存在しないときは "Name" の中身を使います。*.desktop のコマンドラインやカテゴリを使って利用可能なプログラムをコンソールで簡単に確認することが可能です。"DskPath" 配列で定義された既存のベースパスをカラーで表示します。

例:

# lsdesktopf
# lsdesktopf game
# lsdesktopf gtk

fbrokendesktop

fbrokendesktopAUR bash スクリプトは "which" コマンドを使って既存のパスに存在しない Exec を指定していないか確認します。パラメータを指定しなかった場合、fbrokendesktop は "DskPath" 配列のプリセットフォルダを使います。破損している *.desktop だけを表示します。

例:

# fbrokendesktop
# fbrokendesktop /usr
# fbrokendesktop /usr/share/apps/kdm/sessions/icewm.desktop

ヒントとテクニック

デスクトップエントリの隠匿

ヒント デスクトップエントリは /dev/null へのシンボリックリンクを作成することで隠匿できます。例えば: $ ln -s /dev/null ~/.local/share/applications/foo.desktop。

まず、問題のデスクトップエントリファイルを ~/.local/share/applications にコピーして、変更が上書きされないようにして下さい。

次に、全ての環境でエントリが表示されないようにするには、デスクトップエントリファイルをテキストエディタで開いて次の行を追加します: NoDisplay=true。

特定のデスクトップでエントリが表示されないようにするには、デスクトップエントリファイルに次の行を追加します: NotShowIn=desktop-name。

desktop-name は GNOME, Xfce, KDE などに置き換えて下さい。複数のデスクトップでデスクトップエントリを隠匿することもできます。デスクトップの名前をセミコロンで区切って複数指定して下さい。

自動起動

GNOME や KDE など XDG 互換のデスクトップ環境を使っている場合、デスクトップ環境は以下のディレクトリにある *.desktop ファイルを自動的に起動します:

  • システム全体: $XDG_CONFIG_DIRS/autostart/ (デフォルトでは /etc/xdg/autostart/)
  • GNOME は /usr/share/gnome/autostart/ にあるファイルも起動します。
  • ユーザー個別: $XDG_CONFIG_HOME/autostart/ (デフォルトでは ~/.config/autostart/)

システム全体の *.desktop ファイルをユーザー個別の ~/.config/autostart/ フォルダにコピーすることで上書きすることができます。

デスクトップファイルの仕様については Desktop Entry Specification を参照してください。ディレクトリの詳しい説明は Desktop Application Autostart Specification を見て下さい。

ノート この方法は XDG 互換のデスクトップ環境でしか使えません。サポートされていないデスクトップ環境では dapperAUR, dex, fbautostartAUR などのツールを使うことで XDG の自動起動を行うようにすることができます。ただし、それには他の自動起動の手段が必要です。その手段を使って XDG 互換の自動起動ツールを実行して下さい。

環境変数の修正

env を追加するように Exec コマンドを編集します。例:

~/.local/share/applications/abiword.desktop
Exec=env LANG=he_IL.UTF-8 abiword %U

参照