設定 - デスクトップエントリ
概要
デスクトップエントリとは、アプリケーションの起動情報やメタデータを記述した設定ファイルである。
拡張子は、.desktopである。
freedesktop.orgが策定するDesktop Entry Specificationによって仕様が標準化されている。
デスクトップエントリファイルを作成することにより、以下に示す機能が利用できるようになる。
- アプリケーションメニューへの登録
- GNOMEのアクティビティ、KDE Plasmaのアプリケーションランチャー等
- デスクトップ上へのショートカットアイコンの配置
- ファイルマネージャにおけるMIMEタイプの関連付け
- 特定の種類のファイルを開くアプリケーションの選択
デスクトップエントリの仕様はfreedesktop.orgによって標準化されているため、
GNOMEやKDE Plasma等のデスクトップ環境に関わらず、またX11やWayland等のディスプレイプロトコルに関わらず、共通の手順で作成することができる。
デスクトップアイコンの作成手順は以下の通りである。
- アイコン画像ファイルの準備
- デスクトップエントリファイル (.desktopファイル)の作成
- デスクトップファイルデータベースの更新
デスクトップアイコンの準備
デスクトップアイコンの画像ファイルは、freedesktop.orgが策定するIcon Theme Specificationによって使用可能な画像形式とサイズが定められている。
使用可能な画像形式
使用可能な画像形式は以下の通りである。
- PNG (推奨)
- 最も一般的な形式であり、全てのデスクトップ環境でサポートされている。
- ピクセルベースの画像であるため、各サイズごとに個別のファイルを用意する必要がある。
- SVG (オプション)
- ベクター形式であるため、1つのファイルで全てのサイズに対応できる。
- ただし、SVGのサポートはオプションであり、全ての環境で利用できるとは限らない。
- SVGアイコンは、scalableディレクトリ に格納する。
- XPM (下位互換、非推奨)
- 古い形式であり、下位互換性のためにのみサポートされている。
- 新規にアイコンを作成する場合は使用すべきではない。
アイコンサイズ
推奨フォーマットであるPNG形式で使用可能なアイコンサイズの一覧を以下に示す。
- 48×48
- 64×64
- 72×72
- 96×96
- 128×128
- 192×192
- 256×256
- 512×512
- 1024×1024
全てのサイズを用意する必要はないが、48×48は最低限必要なサイズとされている。
デスクトップ環境は、要求されたサイズに最も近いアイコンを自動的に選択してスケーリングする。
そのため、高解像度ディスプレイ環境では128×128以上のサイズも用意することが望ましい。
自分の環境が対応しているアイコンサイズは、/usr/share/icons/hicolorディレクトリ を確認すればわかる。
ls /usr/share/icons/hicolor/ # 例 1024x1024 16x16 20x20 24x24 32x32 40x40 48x48 64x64 8x8 icon-theme.cache scalable 128x128 192x192 22x22 256x256 36x36 42x42 512x512 72x72 96x96 index.theme symbolic
アイコン画像ファイルの格納先
アイコン画像ファイルの格納先として以下の3箇所が存在する。
パス中の $Size の部分は、アイコンサイズに対応するディレクトリ名に置き換える。(例: 48x48、512x512等)
~/.local/share/icons/hicolor/$Size/apps (個別ユーザ向け) /usr/share/icons/hicolor/$Size/apps (全ユーザ向け パッケージ管理システムでのインストール) /usr/local/share/icons/hicolor/$Size/apps (全ユーザ向け パッケージ管理システム外でのインストール)
パスに含まれる hicolorは、デフォルトのフォールバックアイコンテーマである。
ユーザが選択したアイコンテーマでアイコンが見つからない場合に hicolorテーマ が参照されるため、
アプリケーション独自のアイコンは hicolorテーマ に配置することが推奨されている。
SVGアイコンの場合は、サイズ別ディレクトリの代わりに scalable/appsディレクトリ に格納する。
~/.local/share/icons/hicolor/scalable/apps (個別ユーザ向け) /usr/share/icons/hicolor/scalable/apps (全ユーザ向け パッケージ管理システムでのインストール) /usr/local/share/icons/hicolor/scalable/apps (全ユーザ向け パッケージ管理システム外でのインストール)
アイコンの命名規則
アイコンファイル名は、デスクトップエントリファイルのIconキーで指定する名前と一致させる必要がある。
freedesktop.org仕様に従って hicolorテーマ に配置する場合、Iconキーには拡張子を含まないファイル名のみを指定する。
デスクトップ環境がアイコンテーマのディレクトリを自動的に検索して、適切なサイズのアイコンファイルを選択する。
# freedesktop.org仕様に従う場合 (推奨) : 拡張子・パスなし
Icon=myapp
# 任意のパスに配置する場合 : 拡張子を含むフルパス
Icon=/opt/myapp/myapp.png
freedesktop.org仕様に則っていないディレクトリにアイコンを配置する場合は、拡張子を含むフルパスを指定する必要がある。
また、近年ではリバースDNS形式の命名が推奨されている。(例 : org.mozilla.firefox.png)
リバースDNS形式を使用することで、他のアプリケーションとのファイル名の衝突を防ぐことができる。
アイコンキャッシュの更新
アイコンファイルを hicolorテーマ に配置した後、アイコンキャッシュの更新が必要な場合がある。
gtk-update-icon-cache /usr/share/icons/hicolor
個別ユーザ向けに配置する場合は、以下に示すコマンドを実行する。
gtk-update-icon-cache ~/.local/share/icons/hicolor
※注意
アイコンキャッシュを更新しないと、新しいアイコンがデスクトップ環境に反映されない場合がある。
デスクトップエントリファイルの作成
デスクトップエントリファイルは、デスクトップアイコン経由で実行するアプリに関する情報をまとめたファイルである。
拡張子は.desktopであり、格納先は3箇所存在する。
~/.local/share/applications (個別ユーザ向け) /usr/share/applications (全ユーザ向け パッケージ管理システムでのインストール) /usr/local/share/applications (全ユーザ向け パッケージ管理システム外でのインストール)
ここでは、~/.local/share/applicationsディレクトリにorg.hoge.desktopファイルを作成する。
touch ~/.local/share/applications/org.hoge.desktop
# ~/.local/share/applications/org.hoge.desktopファイル
[Desktop Entry]
Type=Application # アプリケーションのショートカットである事を意味する
Name=hoge application # アプリケーション名
Comment=Sample Application # アプリケーションの説明文 (ツールチップ)
Exec=/usr/bin/hoge # 実行対象のアプリケーションのパス
Icon=hoge.png # アイコン画像ファイルのパス
Encoding=UTF-8 # 文字コード
Categories=Application;Develop; # アプリケーションの分類
Terminal=false # アプリケーションをターミナルで実行するかどうか
下表に、デスクトップエントリのキーを示す。
| デスクトップエントリキー | 説明 |
|---|---|
| Type | 項目のタイプを指定する。
|
| Name | アプリケーション名やメニュー上の項目名 |
| GenericName | アプリケーションがどのようなものかを示す名称 (例 : Firefoxの場合は、Web Browser等) |
| Version | アプリケーションのバージョン |
| Comment | アプリケーションの説明文 (ツールチップ) |
| Exec | 実行対象のアプリケーション (実行ファイル) のパス |
| Icon | アイコンのファイル名を指定する。 freedesktop.org仕様の場合は、ファイル名のパス、ファイル拡張子は指定しない。 ただし、freedesktop.org仕様に則っていないディレクトリに画像を格納した場合、拡張子を含むフルパスを指定する。 |
| Encoding | デスクトップエントリの文字コードを指定する。(通常は、UTF-8を指定) |
| Terminal | Execキーで指定したコマンドをターミナルで実行するかどうかを指定する。 true : ターミナルを使用 false : ターミナルを使用しない |
| Categories | アプリケーションの分類を指定する。 ;(セミコロン)区切りで複数指定できる。 Categoriesの一覧を下表に後述する。 |
| TryExec | プログラムがシステムにインストールされているかをテストするための実行ファイルのパスを指定する。 絶対パスでない場合は、環境変数 $PATH から検索される。ファイルが存在しないか実行可能でない場合、デスクトップエントリは無視される。(メニューに表示されない等) 値の型 : string 例 : TryExec=/usr/bin/firefox、TryExec=gimp |
| Keywords | アプリケーションの検索・発見を補助するためのキーワードのリストを指定する。 ;(セミコロン)区切りで複数指定できる。 ローカライズ可能である。(例 : Keywords[ja]=画像;編集;描画) ランチャー等の検索機能で使用され、UIには直接表示されない。 NameキーやGenericNameキーと重複する値を含めるべきではない。 値の型 : localestring(s) 例 : Keywords=text;editor;document;writing |
| MimeType | アプリケーションがサポートするMIMEタイプを指定する。 ;(セミコロン)区切りで複数指定できる。 ファイルマネージャ等がファイルを開く際に適切なアプリケーションを選択するために参照される。 値の型 : string(s) 例 : MimeType=text/plain;text/x-python;application/x-sh、MimeType=image/jpeg;image/png;image/gif |
| StartupNotify | アプリケーションがStartup Notification Protocolに対応しているかどうかを指定する。 trueの場合、アプリケーションは DESKTOP_STARTUP_ID 環境変数が設定された状態で起動され、起動完了時にremoveメッセージを送信する。デスクトップ環境はこの信号に基づいてカーソル変更やスプラッシュスクリーン等のユーザフィードバックを提供する。 GTK+やQt等のツールキットを使用するアプリケーションは通常trueを指定する。 値の型 : boolean |
| StartupWMClass | アプリケーションがウインドウにマッピングするWMクラスまたはWM名のヒント文字列を指定する。 デスクトップ環境がウインドウを正しいアプリケーションに関連付けるために使用される。 StartupNotify=trueの場合に特に重要である。 正確な値は xprop WM_CLASSコマンド等で確認できる。値の型 : string 例 : StartupWMClass=firefox、StartupWMClass=code |
デスクトップエントリファイルのCategoriesキーは、以下の項目から任意の個数を選択する。(セミコロン区切り)
| Categoriesキーの種類 | 説明 |
|---|---|
| AudioVideo | プレゼンテーション・作成・加工を行うマルチメディア用アプリケーション |
| Audio | オーディオアプリケーション |
| Video | ビデオアプリケーション |
| Development | 開発用アプリケーション |
| Education | 教育用アプリケーション |
| Game | ゲーム |
| Graphics | ビューワ・作成・加工を行うグラフィックアプリケーション |
| Network | Webブラウザ等のアプリケーション |
| Office | オフィス用アプリケーション |
| Science | 物理・科学で用いるアプリケーション |
| Settings | 環境設定用アプリケーション |
| System | ログビューワやネットワークモニタのようなシステムアプリケーション |
| Uility | 小規模なユーティリティアプリケーション |
フィールドコード
コマンドラインには、1つの%fや%u等のフィールドコードを含めることができる。
ソフトウェアがファイルを開いてはいけない場合、%f、%u、%F、%U等のフィールドコードをコマンドラインから削除する必要がある。
また、フィールドコードは、引用された引数の中で使用してはならない。
%Fと%Uのフィールドコードは、単独で引数としてのみ使用できる。
| フィールドコード | 説明 |
|---|---|
| %f | 複数のファイルが選択されていても、単一のファイル名(パスを含む)として認識する。 また、ファイルがローカルシステム上に存在しない場合(HTTPやFTPにある場合)、 ファイルはローカルシステムにコピーされて、%fは一時ファイルを指すように展開される。 これは、URL構文を処理できないソフトウェアで使用される。 |
| %F | 複数のローカルファイルを1度に開くことができるソフトウェアに使用する。 各ファイルは、別の引数としてソフトウェアに渡される。 |
| %u | 複数のファイルが選択されていても、ローカルファイルは、単一のURLまたはファイルパスとして渡される。 |
| %U | 各URLは、ソフトウェアに個別の引数として渡される。 ローカルファイルは、複数のURLまたはファイルパスとして渡される。 |
| %i | デスクトップエントリのIconキーを、--iconとIconキーの値の2つの引数として展開する。 Iconキーの値が空または見つからない場合は、どの引数にも展開しない。 |
| %c | デスクトップエントリのNameキーに記述されているソフトウェア名に別名を設定する。 |
| %k | デスクトップファイルの場所を、URI (vfolderシステムから取得した場合等) または ローカルファイル名で指定する。 |
| %d | 非推奨 |
| %D | 非推奨 |
| %m | 非推奨 |
| %n | 非推奨 |
| %N | 非推奨 |
| %v | 非推奨 |
デスクトップファイルデータベースの更新
デスクトップファイルデータベースの更新は、[Alt]キー + [F2]キーを押下後、[R]キーを押下するる。
デスクトップエントリファイルを作成または更新した場合は、必ず実行する必要がある。
GUIでデスクトップアイコンを追加する方法
デスクトップ画面で右クリックすれば、[新しいLauncherを追加]する旨の選択肢がある。
それを選択した後、起動対象のアプリケーション情報を入力する画面が表示されるので、
この画面上で必須項目を入力すれば、デスクトップエントリファイルを作成しなくてもデスクトップアイコンが作成できる。
WMClassの値を確認する方法
デスクトップエントリファイルのStartupWMClassキーに設定する値は、対象アプリケーションのウインドウから取得する必要がある。
X11環境の場合
X11環境では、xprop コマンドを使用してWMClassの値を確認できる。
xprop WM_CLASS コマンドを実行すると、カーソルが十字に変化するので、対象のウインドウをクリックする。
xprop WM_CLASS
# 出力例 WM_CLASS(STRING) = "navigator", "firefox"
1番目の値はインスタンス名、2番目の値はクラス名である。
StartupWMClassキーには、2番目のクラス名を指定する。(上記の例では、firefox)
また、アクティブなウインドウを自動的に指定する場合は、xdotool コマンドと組み合わせて使用する。
xprop -id $(xdotool getwindowfocus) WM_CLASS
Wayland環境の場合
Wayland環境では、X11の WM_CLASS に相当するものとして、app_id が使用される。
ただし、XWayland上で動作するアプリケーションの場合は、従来のWM_CLASSが使用される。
使用するコンポジタによって確認方法が異なる。
GNOME (Mutter)
Looking Glassを使用して確認する。
[Alt] + [F2]キーを押下して、lg と入力してLooking Glassを起動する。
[Windows]タブを選択すると、開いているウインドウの一覧が表示され、各ウインドウの wm_class の値を確認できる。
KDE Plasma (KWin)
以下のいずれかの方法で確認する。
- システム設定のウインドウルール
- [システム設定] - [ウインドウの管理] - [ウインドウルール]を開き、[ウインドウプロパティを検出]ボタンを押下する。
- 対象のウインドウをクリックすると、ウインドウクラス等のプロパティが表示される。
- kdotoolコマンド
- KDE環境向けのxdotool相当ツールであり、ウインドウのプロパティを取得できる。
Sway / wlroots系
swaymsg コマンドを使用してウインドウツリーの情報を取得する。
swaymsg -t get_tree
jq コマンドでフィルタリングして、app_id と class の値を確認する。
swaymsg -t get_tree | jq '..|select(.type=="con")?|{app_id, class}'
Waylandネイティブアプリケーションの場合は、app_id フィールドに値が設定される。
XWaylandアプリケーションの場合は、class フィールドに値が設定される。(XWaylandアプリケーションの app_id は null になる)
Hyprland
hyprctl コマンドを使用してウインドウ情報を取得する。
hyprctl clients
出力には各ウインドウの class フィールドが含まれており、その値をStartupWMClassキーに使用する。