「設定 - デスクトップエントリ」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

編集の要約なし
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
ここでは、Linuxにインストールしたアプリケーションソフトウェアのショートカットを作成する場合、<br>
デスクトップエントリとは、アプリケーションの起動情報やメタデータを記述した設定ファイルである。<br>
デスクトップアイコン(ショートカット)を用意する方法を記載する。<br>
拡張子は、<u>.desktop</u>である。<br>
<br>
<br>
Linuxのデスクトップ環境(GNOMEやKDE等)が複数存在するが、手順はX Window System環境であれば同様である。<br>
freedesktop.orgが策定するDesktop Entry Specificationによって仕様が標準化されている。<br>
その理由は、デスクトップアイコン(ショートカット)の仕様が、freedesktop.orgによって定められているためである。<br>
<br>
<br>
デスクトップアイコンを用意するまでの手順は以下の通りである。<br>
デスクトップエントリファイルを作成することにより、以下に示す機能が利用できるようになる。<br>
* デスクトップアイコンの準備
* アプリケーションメニューへの登録
* デスクトップアイコン経由で実行するアプリの準備
*: GNOMEのアクティビティ、KDE Plasmaのアプリケーションランチャー等
* デスクトップエントリファイルの作成
* デスクトップ上へのショートカットアイコンの配置
* デスクトップファイルデータベースを更新
* ファイルマネージャにおけるMIMEタイプの関連付け
*: 特定の種類のファイルを開くアプリケーションの選択
<br>
デスクトップエントリの仕様はfreedesktop.orgによって標準化されているため、<br>
GNOMEやKDE Plasma等のデスクトップ環境に関わらず、またX11やWayland等のディスプレイプロトコルに関わらず、共通の手順で作成することができる。<br>
<br>
デスクトップアイコンの作成手順は以下の通りである。<br>
# アイコン画像ファイルの準備
# デスクトップエントリファイル (<u>.desktopファイル</u>)の作成
# デスクトップファイルデータベースの更新
<br><br>
<br><br>


== デスクトップアイコンの準備 ==
== デスクトップアイコンの準備 ==
デスクトップアイコンは、freedesktop.orgによって拡張子やサイズの仕様が定められている。<br>
デスクトップアイコンの画像ファイルは、freedesktop.orgが策定するIcon Theme Specificationによって使用可能な画像形式とサイズが定められている。<br>
拡張子は、PNG(推奨)、SVG(オプション)、XPM(下位互換、非推奨)のいずれかである。<br>
<br>
<br>
サイズに関しては、推奨フォーマットのPNGのみを以下に一覧を示す。<br>
==== 使用可能な画像形式 ====
使用可能な画像形式は以下の通りである。<br>
<br>
<br>
PNG形式のアイコンサイズ<br>
* PNG (推奨)
*: 最も一般的な形式であり、全てのデスクトップ環境でサポートされている。
*: ピクセルベースの画像であるため、各サイズごとに個別のファイルを用意する必要がある。
* SVG (オプション)
*: ベクター形式であるため、1つのファイルで全てのサイズに対応できる。
*: ただし、SVGのサポートはオプションであり、全ての環境で利用できるとは限らない。
*: SVGアイコンは、<u>scalableディレクトリ</u> に格納する。
* XPM (下位互換、非推奨)
*: 古い形式であり、下位互換性のためにのみサポートされている。
*: 新規にアイコンを作成する場合は使用すべきではない。
<br>
==== アイコンサイズ ====
推奨フォーマットであるPNG形式で使用可能なアイコンサイズの一覧を以下に示す。<br>
* 48×48
* 48×48
* 64×64
* 64×64
30行目: 50行目:
* 1024×1024
* 1024×1024
<br>
<br>
アイコン画像ファイルの格納先は3箇所存在する。<br>
全てのサイズを用意する必要はないが、48×48は最低限必要なサイズとされている。<br>
$Sizeの箇所は、アイコン画像のサイズによってディレクトリ名を変更する。(48×48の場合 : $Size=48×48、512×512の場合 : $Size=512×512)<br>
/home/ユーザ名/.local/share/icons/hicolor/$Size/apps  (個別ユーザ向け)
/usr/share/icons/hicolor/$Size/apps                    (全ユーザ向け パッケージ管理システムでのインストール)
/usr/local/share/icons/hicolor/$Size/apps              (全ユーザ向け パッケージ管理システム外でのインストール)
<br>
<br>
また、/usr/share/icons/hicolorディレクトリを確認すれば、自分の環境がどのサイズの画像に対応しているかが分かる。<br>
デスクトップ環境は、要求されたサイズに最も近いアイコンを自動的に選択してスケーリングする。<br>
  ls /usr/share/icons/hicolor/
そのため、高解像度ディスプレイ環境では128×128以上のサイズも用意することが望ましい。<br>
<br>
自分の環境が対応しているアイコンサイズは、<u>/usr/share/icons/hicolorディレクトリ</u> を確認すればわかる。<br>
  ls /usr/share/icons/hicolor/
   
   
# 例
  1024x1024  16x16    20x20  24x24    32x32  40x40  48x48    64x64  8x8    icon-theme.cache  scalable
  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
  128x128    192x192  22x22  256x256  36x36  42x42  512x512  72x72  96x96  index.theme      symbolic
<br>
==== アイコン画像ファイルの格納先 ====
アイコン画像ファイルの格納先として以下の3箇所が存在する。<br>
<br>
パス中の <u>$Size</u> の部分は、アイコンサイズに対応するディレクトリ名に置き換える。(例: 48x48、512x512等)<br>
~/.local/share/icons/hicolor/$Size/apps    (個別ユーザ向け)
/usr/share/icons/hicolor/$Size/apps        (全ユーザ向け パッケージ管理システムでのインストール)
/usr/local/share/icons/hicolor/$Size/apps  (全ユーザ向け パッケージ管理システム外でのインストール)
<br>
パスに含まれる <u>hicolor</u>は、デフォルトのフォールバックアイコンテーマである。<br>
ユーザが選択したアイコンテーマでアイコンが見つからない場合に <u>hicolorテーマ</u> が参照されるため、<br>
アプリケーション独自のアイコンは <u>hicolorテーマ</u> に配置することが推奨されている。<br>
<br>
SVGアイコンの場合は、サイズ別ディレクトリの代わりに <u>scalable/appsディレクトリ</u> に格納する。<br>
~/.local/share/icons/hicolor/scalable/apps    (個別ユーザ向け)
/usr/share/icons/hicolor/scalable/apps        (全ユーザ向け パッケージ管理システムでのインストール)
/usr/local/share/icons/hicolor/scalable/apps  (全ユーザ向け パッケージ管理システム外でのインストール)
<br>
==== アイコンの命名規則 ====
アイコンファイル名は、デスクトップエントリファイルのIconキーで指定する名前と一致させる必要がある。<br>
<br>
freedesktop.org仕様に従って <u>hicolorテーマ</u> に配置する場合、Iconキーには拡張子を含まないファイル名のみを指定する。<br>
デスクトップ環境がアイコンテーマのディレクトリを自動的に検索して、適切なサイズのアイコンファイルを選択する。<br>
<br>
<syntaxhighlight lang="ini">
# freedesktop.org仕様に従う場合 (推奨) : 拡張子・パスなし
Icon=myapp
# 任意のパスに配置する場合 : 拡張子を含むフルパス
Icon=/opt/myapp/myapp.png
</syntaxhighlight>
<br>
freedesktop.org仕様に則っていないディレクトリにアイコンを配置する場合は、拡張子を含むフルパスを指定する必要がある。<br>
<br>
また、近年ではリバースDNS形式の命名が推奨されている。(例 : <u>org.mozilla.firefox.png</u>)<br>
リバースDNS形式を使用することで、他のアプリケーションとのファイル名の衝突を防ぐことができる。<br>
<br>
==== アイコンキャッシュの更新 ====
アイコンファイルを <u>hicolorテーマ</u> に配置した後、アイコンキャッシュの更新が必要な場合がある。<br>
gtk-update-icon-cache /usr/share/icons/hicolor
<br>
個別ユーザ向けに配置する場合は、以下に示すコマンドを実行する。<br>
gtk-update-icon-cache ~/.local/share/icons/hicolor
<br>
<u>※注意</u><br>
<u>アイコンキャッシュを更新しないと、新しいアイコンがデスクトップ環境に反映されない場合がある。</u><br>
<br><br>
<br><br>


46行目: 112行目:
デスクトップエントリファイルは、デスクトップアイコン経由で実行するアプリに関する情報をまとめたファイルである。<br>
デスクトップエントリファイルは、デスクトップアイコン経由で実行するアプリに関する情報をまとめたファイルである。<br>
拡張子は.desktopであり、格納先は3箇所存在する。<br>
拡張子は.desktopであり、格納先は3箇所存在する。<br>
/home/ユーザ名/.local/share/applications  (個別ユーザ向け)
/usr/share/applications                    (全ユーザ向け パッケージ管理システムでのインストール)
/usr/local/share/applications              (全ユーザ向け パッケージ管理システム外でのインストール)
<br>
<br>
ここでは、/home/ユザー名/.local/share/applicationsディレクトリにorg.hoge.desktopファイルを作成する。<br>
~/.local/share/applications    (個別ユーザ向け)
  touch /home/ユーザ名/.local/share/applications/org.hoge.desktop
/usr/share/applications        (全ユーザ向け パッケージ管理システムでのインストール)
   
/usr/local/share/applications  (全ユーザ向け パッケージ管理システム外でのインストール)
  # /home/ユーザ名/.local/share/applications/org.hoge.desktopファイル
<br>
ここでは、~/.local/share/applicationsディレクトリにorg.hoge.desktopファイルを作成する。<br>
  touch ~/.local/share/applications/org.hoge.desktop
<br>
  <syntaxhighlight lang="ini">
  # ~/.local/share/applications/org.hoge.desktopファイル
  [Desktop Entry]
  [Desktop Entry]
  Type=Application                          # アプリケーションのショートカットである事を意味する
  Type=Application                          # アプリケーションのショートカットである事を意味する
  Name=hoge application                    # アプリケーション名
  Name=hoge application                    # アプリケーション名
Exec=/home/ユーザ名/hoge/hoge.sh          # 実行対象のアプリケーション(実行ファイル)のパス
  Comment=Sample Application                # アプリケーションの説明文 (ツールチップ)
  Comment=Sample Application                # アプリケーションの説明文(ツールチップ)
  Exec=/usr/bin/hoge                       # 実行対象のアプリケーションのパス
  Icon=/home/ユーザ名/hoge/hoge.png         # アイコン画像ファイルのパス
Icon=hoge.png                             # アイコン画像ファイルのパス
  Encoding=UTF-8                            # 文字コード
  Encoding=UTF-8                            # 文字コード
Categories=Application;Develop;          # アプリケーションの分類
  Terminal=false                            # アプリケーションをターミナルで実行するかどうか
  Terminal=false                            # アプリケーションをターミナルで実行するかどうか
  Categories=Application;Develop;          # アプリケーションの分類
  </syntaxhighlight>
<br>
<br>
デスクトップエントリキーの一部を下表に示す。<br>
下表に、デスクトップエントリのキーを示す。<br>
更に詳細な設定もできるが、一般的な用途であれば下表のキーを設定すればよい。<br>
<center>
<center>
{| class="wikitable"
{| class="wikitable"  
|-
|-
! デスクトップエントリキー !! 説明
! デスクトップエントリキー !! 説明
77行目: 145行目:
| Name || アプリケーション名やメニュー上の項目名
| Name || アプリケーション名やメニュー上の項目名
|-
|-
| GenericName || アプリケーションがどのようなものかを示す名称(例 : Firefoxの場合は、Web Browser等)
| GenericName || アプリケーションがどのようなものかを示す名称 (例 : Firefoxの場合は、Web Browser等)
|-
|-
| Version || アプリケーションのバージョン
| Version || アプリケーションのバージョン
|-
|-
| Comment || アプリケーションの説明文(ツールチップ)
| Comment || アプリケーションの説明文 (ツールチップ)
|-
|-
| Exec || 実行対象のアプリケーション(実行ファイル)のパス
| Exec || 実行対象のアプリケーション (実行ファイル) のパス
|-
|-
| Icon || アイコンのファイル名を指定する。<br>freedesktop.org仕様の場合は、ファイル名のパス、ファイル拡張子は指定しない。<br>ただし、freedesktop.org仕様に則っていないディレクトリに画像を格納した場合、拡張子を含むフルパスを指定する。  
| Icon || アイコンのファイル名を指定する。<br>freedesktop.org仕様の場合は、ファイル名のパス、ファイル拡張子は指定しない。<br>ただし、freedesktop.org仕様に則っていないディレクトリに画像を格納した場合、拡張子を含むフルパスを指定する。  
|-
|-
| Encoding || デスクトップエントリの文字コードを指定する。(一般的には、UTF-8でよい)
| Encoding || デスクトップエントリの文字コードを指定する。(通常は、UTF-8を指定)
|-
|-
| Terminal || Execキーで指定したコマンドをターミナルで実行するかどうかを指定する。<br>* true : ターミナルを使用<br>false : ターミナルを使用しない
| Terminal || Execキーで指定したコマンドをターミナルで実行するかどうかを指定する。<br><br>true : ターミナルを使用<br>false : ターミナルを使用しない
|-
|-
| Categories || アプリケーションの分類を指定する。<br>;(セミコロン)区切りで複数指定できる。<br>Categoriesの一覧を下表に後述する。
| Categories || アプリケーションの分類を指定する。<br>;(セミコロン)区切りで複数指定できる。<br>Categoriesの一覧を下表に後述する。
|-
| TryExec || プログラムがシステムにインストールされているかをテストするための実行ファイルのパスを指定する。<br>絶対パスでない場合は、環境変数 <code>$PATH</code> から検索される。<br>ファイルが存在しないか実行可能でない場合、デスクトップエントリは無視される。(メニューに表示されない等)<br><br>値の型 : string<br>例 : <u>TryExec=/usr/bin/firefox</u>、<u>TryExec=gimp</u>
|-
| Keywords || アプリケーションの検索・発見を補助するためのキーワードのリストを指定する。<br>;(セミコロン)区切りで複数指定できる。<br>ローカライズ可能である。(例 : <u>Keywords[ja]=画像;編集;描画</u>)<br>ランチャー等の検索機能で使用され、UIには直接表示されない。<br>NameキーやGenericNameキーと重複する値を含めるべきではない。<br><br>値の型 : localestring(s)<br>例 : <u>Keywords=text;editor;document;writing</u>
|-
| MimeType || アプリケーションがサポートするMIMEタイプを指定する。<br>;(セミコロン)区切りで複数指定できる。<br>ファイルマネージャ等がファイルを開く際に適切なアプリケーションを選択するために参照される。<br><br>値の型 : string(s)<br>例 : <u>MimeType=text/plain;text/x-python;application/x-sh</u>、<u>MimeType=image/jpeg;image/png;image/gif</u>
|-
| StartupNotify || アプリケーションがStartup Notification Protocolに対応しているかどうかを指定する。<br>trueの場合、アプリケーションは <code>DESKTOP_STARTUP_ID</code> 環境変数が設定された状態で起動され、起動完了時にremoveメッセージを送信する。<br>デスクトップ環境はこの信号に基づいてカーソル変更やスプラッシュスクリーン等のユーザフィードバックを提供する。<br>GTK+やQt等のツールキットを使用するアプリケーションは通常trueを指定する。<br><br>値の型 : boolean
|-
| StartupWMClass || アプリケーションがウインドウにマッピングするWMクラスまたはWM名のヒント文字列を指定する。<br>デスクトップ環境がウインドウを正しいアプリケーションに関連付けるために使用される。<br>StartupNotify=trueの場合に特に重要である。<br>正確な値は<code>xprop WM_CLASS</code>コマンド等で確認できる。<br><br>値の型 : string<br>例 : <u>StartupWMClass=firefox</u>、<u>StartupWMClass=code</u>
|}
|}
</center>
</center>
97行目: 175行目:
デスクトップエントリファイルのCategoriesキーは、以下の項目から任意の個数を選択する。(セミコロン区切り)<br>
デスクトップエントリファイルのCategoriesキーは、以下の項目から任意の個数を選択する。(セミコロン区切り)<br>
<center>
<center>
{| class="wikitable"
{| class="wikitable" | style="background-color:#fefefe;"
|-
|-
! Categoriesキーの種類 !! 説明
! Categoriesキーの種類 !! 説明
126行目: 204行目:
|-
|-
| Uility || 小規模なユーティリティアプリケーション
| Uility || 小規模なユーティリティアプリケーション
|}
</center>
<br><br>
== フィールドコード ==
コマンドラインには、1つの%fや%u等のフィールドコードを含めることができる。<br>
<br>
ソフトウェアがファイルを開いてはいけない場合、%f、%u、%F、%U等のフィールドコードをコマンドラインから削除する必要がある。<br>
また、フィールドコードは、引用された引数の中で使用してはならない。<br>
<br>
<code>%F</code>と<code>%U</code>のフィールドコードは、単独で引数としてのみ使用できる。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ フィールドコードの説明
|-
! フィールドコード !! 説明
|-
| %f || 複数のファイルが選択されていても、単一のファイル名(パスを含む)として認識する。<br>また、ファイルがローカルシステム上に存在しない場合(HTTPやFTPにある場合)、<br>ファイルはローカルシステムにコピーされて、%fは一時ファイルを指すように展開される。<br>これは、URL構文を処理できないソフトウェアで使用される。
|-
| %F || 複数のローカルファイルを1度に開くことができるソフトウェアに使用する。<br>各ファイルは、別の引数としてソフトウェアに渡される。
|-
| %u || 複数のファイルが選択されていても、ローカルファイルは、単一のURLまたはファイルパスとして渡される。
|-
| %U || 各URLは、ソフトウェアに個別の引数として渡される。<br>ローカルファイルは、複数のURLまたはファイルパスとして渡される。
|-
| %i || デスクトップエントリのIconキーを、--iconとIconキーの値の2つの引数として展開する。<br>Iconキーの値が空または見つからない場合は、どの引数にも展開しない。
|-
| %c || デスクトップエントリのNameキーに記述されているソフトウェア名に別名を設定する。
|-
| %k || デスクトップファイルの場所を、URI (vfolderシステムから取得した場合等) または ローカルファイル名で指定する。
|-
| %d || 非推奨
|-
| %D || 非推奨
|-
| %m || 非推奨
|-
| %n || 非推奨
|-
| %N || 非推奨
|-
| %v || 非推奨
|}
|}
</center>
</center>
131行目: 251行目:


== デスクトップファイルデータベースの更新 ==
== デスクトップファイルデータベースの更新 ==
デスクトップファイルデータベースの更新は、[Alt]キー + [F2]キーを押下後、[r]キーを押下すれば実行される。<br>
デスクトップファイルデータベースの更新は、[Alt]キー + [F2]キーを押下後、[R]キーを押下するる。<br>
この作業は、デスクトップエントリファイルを作成または更新した場合、必ず実行しなければならない。<br>
デスクトップエントリファイルを作成または更新した場合は、必ず実行する必要がある。<br>
<br><br>
<br><br>


== GUIでデスクトップアイコンを追加する方法 ==
== GUIでデスクトップアイコンを追加する方法 ==
デスクトップ画面で右クリックすれば、[新しいLauncherを追加]する旨の選択肢がある。<br>
デスクトップ画面で右クリックすれば、[新しいLauncherを追加]する旨の選択肢がある。<br>
<br>
それを選択した後、起動対象のアプリケーション情報を入力する画面が表示されるので、<br>
それを選択した後、起動対象のアプリケーション情報を入力する画面が表示されるので、<br>
この画面上で必須項目を入力すれば、デスクトップエントリファイルを作成しなくてもデスクトップアイコンが作成できる。<br>
この画面上で必須項目を入力すれば、デスクトップエントリファイルを作成しなくてもデスクトップアイコンが作成できる。<br>
<br><br>
<br><br>
== WMClassの値を確認する方法 ==
デスクトップエントリファイルのStartupWMClassキーに設定する値は、対象アプリケーションのウインドウから取得する必要がある。<br>
<br>
==== X11環境の場合 ====
X11環境では、<code>xprop</code> コマンドを使用してWMClassの値を確認できる。<br>
<br>
<code>xprop WM_CLASS</code> コマンドを実行すると、カーソルが十字に変化するので、対象のウインドウをクリックする。<br>
xprop WM_CLASS
<br>
# 出力例
WM_CLASS(STRING) = "navigator", "firefox"
<br>
1番目の値はインスタンス名、2番目の値はクラス名である。<br>
StartupWMClassキーには、2番目のクラス名を指定する。(上記の例では、firefox)<br>
<br>
また、アクティブなウインドウを自動的に指定する場合は、<code>xdotool</code> コマンドと組み合わせて使用する。<br>
xprop -id $(xdotool getwindowfocus) WM_CLASS
<br>
==== Wayland環境の場合 ====
Wayland環境では、X11の <code>WM_CLASS</code> に相当するものとして、<code>app_id</code> が使用される。<br>
ただし、XWayland上で動作するアプリケーションの場合は、従来のWM_CLASSが使用される。<br>
<br>
使用するコンポジタによって確認方法が異なる。<br>
<br>
===== GNOME (Mutter) =====
Looking Glassを使用して確認する。<br>
<br>
[Alt] + [F2]キーを押下して、<code>lg</code> と入力してLooking Glassを起動する。<br>
[Windows]タブを選択すると、開いているウインドウの一覧が表示され、各ウインドウの <code>wm_class</code> の値を確認できる。<br>
<br>
===== KDE Plasma (KWin) =====
以下のいずれかの方法で確認する。<br>
<br>
* システム設定のウインドウルール
*: [システム設定] - [ウインドウの管理] - [ウインドウルール]を開き、[ウインドウプロパティを検出]ボタンを押下する。
*: 対象のウインドウをクリックすると、ウインドウクラス等のプロパティが表示される。
*: <br>
* kdotoolコマンド
*: KDE環境向けのxdotool相当ツールであり、ウインドウのプロパティを取得できる。
<br>
===== Sway / wlroots系 =====
<code>swaymsg</code> コマンドを使用してウインドウツリーの情報を取得する。<br>
swaymsg -t get_tree
<br>
<code>jq</code> コマンドでフィルタリングして、<code>app_id</code> と <code>class</code> の値を確認する。<br>
swaymsg -t get_tree | jq '..|select(.type=="con")?|{app_id, class}'
<br>
Waylandネイティブアプリケーションの場合は、<code>app_id</code> フィールドに値が設定される。<br>
XWaylandアプリケーションの場合は、<code>class</code> フィールドに値が設定される。(XWaylandアプリケーションの <code>app_id</code> は <u>null</u> になる)<br>
<br>
===== Hyprland =====
<code>hyprctl</code> コマンドを使用してウインドウ情報を取得する。<br>
hyprctl clients
<br>
出力には各ウインドウの <code>class</code> フィールドが含まれており、その値をStartupWMClassキーに使用する。<br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]

2026年2月22日 (日) 01:46時点における最新版

概要

デスクトップエントリとは、アプリケーションの起動情報やメタデータを記述した設定ファイルである。
拡張子は、.desktopである。

freedesktop.orgが策定するDesktop Entry Specificationによって仕様が標準化されている。

デスクトップエントリファイルを作成することにより、以下に示す機能が利用できるようになる。

  • アプリケーションメニューへの登録
    GNOMEのアクティビティ、KDE Plasmaのアプリケーションランチャー等
  • デスクトップ上へのショートカットアイコンの配置
  • ファイルマネージャにおけるMIMEタイプの関連付け
    特定の種類のファイルを開くアプリケーションの選択


デスクトップエントリの仕様はfreedesktop.orgによって標準化されているため、
GNOMEやKDE Plasma等のデスクトップ環境に関わらず、またX11やWayland等のディスプレイプロトコルに関わらず、共通の手順で作成することができる。

デスクトップアイコンの作成手順は以下の通りである。

  1. アイコン画像ファイルの準備
  2. デスクトップエントリファイル (.desktopファイル)の作成
  3. デスクトップファイルデータベースの更新



デスクトップアイコンの準備

デスクトップアイコンの画像ファイルは、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 項目のタイプを指定する。
  • Application : アプリケーションを起動する場合
  • Link : ファイル、ディレクトリ、 FTPサイトにリンクする場合
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/firefoxTryExec=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-shMimeType=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=firefoxStartupWMClass=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_idclass の値を確認する。

swaymsg -t get_tree | jq '..|select(.type=="con")?|{app_id, class}'


Waylandネイティブアプリケーションの場合は、app_id フィールドに値が設定される。
XWaylandアプリケーションの場合は、class フィールドに値が設定される。(XWaylandアプリケーションの app_idnull になる)

Hyprland

hyprctl コマンドを使用してウインドウ情報を取得する。

hyprctl clients


出力には各ウインドウの class フィールドが含まれており、その値をStartupWMClassキーに使用する。