お伝えしたいこと
Linuxデスクトップで使われるDesktop Entry (通称:デスクトップファイル) を自分で書くときに最低限必要な情報をまとめます。
Desktop Entryとは.desktop
拡張子を持つテキストファイルです。
デスクトップのMenu上にアプリケーションを表示させるのに使われます。
Desktop Entryの作成は非常に簡単です。
以下の2工程で完結します。
- 本記事のサンプルをベースに7行ほどのテキストファイルを作成する
~/.local/share/applications/
に格納する
「Menuにアプリケーションが表示されない...」と思ったらDesktop Entryを自分で作っちゃいましょう。
作り方を知りたい方は、ぜひ続きをお読みください。
既に慣れている方は、#要点を中心にチェックいただけると効率的です。
- お伝えしたいこと
- 要点
- Desktop Entryとは?
- (参考) Desktop Entryの仕様を知る必要はあるのか?
- Desktop Entryの書き方
- Iconの指定方法
- Desktop Entryの配置先
- (参考) desktop-file-validate
- まとめ
- Linux PC関連まとめ
要点
Desktop Entryは、以下サンプルを書き換えることで簡単に書けます。
[Desktop Entry] Name=Virtual Machine Viewer Exec=virt-viewer Comment=Display the graphical console Terminal=false Icon=virt-viewer Type=Application
Iconファイルは主に以下のディレクトリから検索されます。
自分で画像を追加する場合は、先頭のホームディレクトリ配下に配置しましょう。
~/.icons/
★自作アイコンはここに配置/usr/share/icons/
/usr/share/pixmaps/
作成したDesktop Entryは以下のディレクトリに配置します。
自分でDesktop Entryファイルを追加する場合は、先頭のホームディレクトリ配下に配置しましょう。
~/.local/share/applications/
★自作Desktop Entryはここに配置/usr/share/applications/
/usr/local/share/applications/
Desktop Entryを作成してもMenuに表示されないときは、以下を疑いましょう。
- 格納先のディレクトリは正しいか?
- ファイルパーミッションやオーナーなどの権限情報に問題はないか?
- Desktop Entryの文法にエラーはないか? →
desktop-file-validate
コマンドで確認できます
Desktop Entryとは?
Desktop Entryとは、.desktop
という拡張子を持つテキストファイルです。
Desktop Fileや、Application Fileとも呼ばれます。
Desktop Entryを特定のディレクトリ配下に格納すると、LinuxデスクトップのMenu (WindowsでいうStart Menu) でアプリケーションとして表示され、クリック操作で起動できるようになります。
GUIでの実行を想定したアプリケーションをインストールすると、多くの場合インストール処理の一環で.desktop
ファイルも配布されます。
これによって、Menuでアプリケーション名を検索して起動できるようになります。
下記画像において "Google Chrome" という表示名でアイコンを用意し、クリックするとchrome
を起動するのがDesktop Entryの役割です。
(参考) Desktop Entryの仕様を知る必要はあるのか?
デフォルトでDesktop Entryが用意されない場合に、自分で追加したいときに仕様がわかると便利です。
しかし、この知識が必要になる場面は限られているので、デスクトップアプリケーションを日常的に開発する方でなければ暗記する必要はありません。
必要なときに「こんな仕様があった」と思い出し、その場で調べながら書ければ十分です。
上記を踏まえ、本記事もDesktop Entryをちょこっと書きたい方向けに要点が短時間で伝わるように説明します。
より詳細な仕様については、freedesktop.orgを参照するように誘導します。
freedesktop.orgは公的な認証を受けている団体ではありませんが、Linuxデスクトップの標準的な仕様をいくつも定義しています。
そしてGnomeやKDEなどのLinuxデスクトップがそれにある程度準拠しているため、実質的にLinuxデスクトップの仕様を知りたいときに重宝する情報源となっています。
Desktop Entryの書き方
まずはサンプルを示します。
私の環境ではvirt-viewer
というプログラムにDesktop Entryファイルが付属しなかったので、Desktop Entryを自作しました。
このファイルは、~/.local/share/applications/virt-viewer.desktop
に格納しています。
Desktop Entryの格納先については、#Desktop Entryの配置先で触れます。
[Desktop Entry] Name=Virtual Machine Viewer Exec=virt-viewer Comment=Display the graphical console Terminal=false Icon=virt-viewer Type=Application
Desktop EntryはINI形式で書くようです。
ざっくり、意味は以下のようになります。
Iconについては、#Iconの指定方法で別途補足します。
項目 | 詳細 |
---|---|
Name Menu上の表示名 |
Virtual Machine Viewer |
Exec クリック時に実行されるコマンド |
virt-viewer |
Comment アプリケーションの説明文 |
Display the graphical console |
Terminal ターミナル上で実行するか? |
false |
Icon Menu上のアイコンファイル |
virt-viewer.svg |
Type タイプ |
アプリケーション。 他にLink, Directoryがあるが、基本Applicationにする |
作成したファイルを~/.local/share/applications/virt-viewer.desktop
に配置すると、Menu上で検索してヒットするようになります。
以下はアプリケーション名で検索していますが、Exec (virt-viewer) やComment (graphical console) でもヒットします。
このあたりはMenuの実装にも依ると思いますが、とても便利です。
Desktop Entryの基本的な書き方については、上表の説明で全てです。
オプションの意味を理解した上で上記サンプルを書き換えれば、Desktop Entryファイルを簡単に作成できると思います。
より詳細な仕様については、freedesktop.orgのDesktop Entry Specificationに記載があります。
また、/usr/share/applications/
に既存のDesktop Entryが数多くあるので、見ると参考になると思います。
マニアックですが、デスクトップの言語に併せてNameやCommentを使い分けることもできるようです。
ただよほど凝りたいのでない限りは、詳細な仕様を知る必要はあまりないと思います。
Iconの指定方法
サマリ
Iconの指定方法は2通りあります1。
- 画像ファイルのフルパス指定
- キーワード指定
キーワードを指定すると、Icon Theme Specificationの仕様に従って画像ファイルを検索し、それを使います。
内部的には難しい仕組みが動いていますが、ざっくり言うと以下の通りです。
- ファイル名を指定すると指定のディレクトリから画像ファイルを探してきてそれを使う
- ファイルの拡張子は省略して良い
実用上は、以下のディレクトリ配下の画像ファイルを、拡張子を省いたファイル名で指定する使い方が多いと思います。
上2つのディレクトリには、アプリケーションのインストーラが自動配置する画像ファイルが格納されます。
自前で画像を用意したい場合は、3番目のディレクトリにSVG形式などで画像ファイルを格納します。
/usr/share/icons/
/usr/share/pixmaps/
~/.icons/
(参考) Iconの詳細仕様
本セクションは参考情報のため、興味のない方はスキップしてください。
Iconをキーワードで指定した際、画像ファイルの検索対象となるディレクトリは以下の3箇所です。
上から順に検索されます。
$HOME/.icons/
$XDG_DATA_DIRS/icons/
/usr/share/pixmaps/
環境変数XDG_DATA_DIRS
については、以下の中身でした。
PATH
のように、複数のディレクトリが:
で順に並んだ構造です。
echo $XDG_DATA_DIRS /home/endy/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
XDG_DATA_DIRS
を展開すると、デフォルトでは以下の順で画像ファイルを探索します。
flatpakを使っていない方は、2番目と3番目のディレクトリは無視して問題ありません。
~/.icons/
~/.local/share/flatpak/exports/share/icons/
※flatpak/var/lib/flatpak/exports/share/icons/
※flatpak/usr/local/share/icons/
/usr/share/icons/
/usr/share/pixmaps/
実用上は、特に以下の3箇所をチェックすればほぼ事足ります。
/usr/share/icons/
,/usr/share/pixmaps/
: 既存の画像ファイルの主な格納先~/.icons/
: 自前で用意したアイコンの格納先
今回は目的のファイルがvirt-viewer.svg
として存在することがわかったので、それを使います。
find ~/.icons /usr/share/icons /usr/share/pixmaps -iname 'virt-viewer*' # /usr/share/icons/Paper/24x24@2x/apps/virt-viewer.png # /usr/share/icons/Paper/16x16/apps/virt-viewer.png # /usr/share/icons/Paper/32x32@2x/apps/virt-viewer.png # /usr/share/icons/Paper/48x48@2x/apps/virt-viewer.png # /usr/share/icons/Paper/48x48/apps/virt-viewer.png # /usr/share/icons/Paper/512x512@2x/apps/virt-viewer.png # /usr/share/icons/Paper/32x32/apps/virt-viewer.png # /usr/share/icons/Paper/512x512/apps/virt-viewer.png # /usr/share/icons/Paper/24x24/apps/virt-viewer.png # /usr/share/icons/Paper/16x16@2x/apps/virt-viewer.png # /usr/share/icons/hicolor/22x22/apps/virt-viewer.png # /usr/share/icons/hicolor/16x16/apps/virt-viewer.png # /usr/share/icons/hicolor/256x256/apps/virt-viewer.png # /usr/share/icons/hicolor/48x48/apps/virt-viewer.png # /usr/share/icons/hicolor/32x32/apps/virt-viewer.png # /usr/share/icons/hicolor/scalable/apps/virt-viewer.svg # /usr/share/icons/hicolor/24x24/apps/virt-viewer.png
画像の見た目はGUIでフォルダ階層を下ってファイルを見ても良いですが、せっかくフルパスがわかっているのでCLIから開いちゃいます。
xdg-open /usr/share/icons/hicolor/scalable/apps/virt-viewer.svg
余談ですが、xdg-open
は既定のアプリケーションで目的のファイルやURLを開くコマンドです。
xdg-open .
でカレントディレクトリを開いたり、xdg-open https://xxx
というコマンドを紐付けたDesktop Launcherを作成してショートカット代わりに使うと便利です。
Desktop Entryの配置先
サマリ
Desktop Entryは主に以下に格納されています。
~/.local/share/applications/
/usr/share/applications/
/usr/local/share/applications/
自前で作成したDesktop Entryは、基本的に1番目のパスに格納します。
システム全体にインストールされたデスクトップファイルは、2番目か3番目のパスに格納されています。
今回サンプルで作成したvirt-viewer.desktop
は、1番目のリンクに格納します。
(参考) Desktop Entry配置先の詳細
本セクションは参考情報のため、興味のない方はスキップしてください。
作成したDesktop Entry (*.desktop
) は、$XDG_DATA_DIRS/applications/
配下に設置するようです。
$XDG_DATA_DIRS
の中身を再掲します。
echo $XDG_DATA_DIRS /home/endy/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
したがって、Desktop Entryファイルの格納先は以下のとおりです。
~/.local/share/flatpak/exports/share/applications/
/var/lib/flatpak/exports/share/applications/
/usr/local/share/applications/
/usr/share/applications/
ただ、実際には以下のディレクトリにもDesktop Entryを格納できます。
公式の情報ソースはありませんが、Arch Wikiには記載がありました。
~/.local/share/applications/
補足ですが、経験上ディレクトリには以下のようなルールがあります。
/usr/
、/usr/local/
、~/.local/
配下のファイル構成は類似している/usr/
にはディストリビューションのパッケージマネージャが配布したファイルが格納される/usr/local/
にはその他の方法でシステムにインストールされたファイルが格納される (pipやmake installなど)~/.local/
はホームディレクトリ配下なので、ユーザー固有のリソースが配置される
従って、/usr/share/applications/
が使えるということは、~/.local/share/applications/
も恐らく使えるだろうと連想できます。
(参考) desktop-file-validate
滅多に使うことはありませんが、Desktop Entryのエラーを検出するプログラムがあります。
もし作成したデスクトップファイルに正しいPermissionを付与し、正しいディレクトリに配置したにも関わらずMenuに表示されない場合は、以下のコマンドでDesktop Entryの定義が正しいかを確認してみると良いかもしれません。
desktop-file-validate
コマンドは、以下のように.desktop
ファイルを指定して使います。
特に何の警告もでなければ、文法上は問題ありません。
desktop-file-validate virt-viewer.desktop
# (出力なし)
試しに、virt-viewer.desktop
のNameオプションを以下のようにコメントアウトしてみます。
[Desktop Entry] #Name=Virtual Machine Viewer Exec=virt-viewer Comment=Display the graphical console Terminal=false Icon=virt-viewer Type=Application
そして、再びdesktop-file-validate
を実行してみます。
必須パラメータのName
が指定されていないことでエラーになりました。
desktop-file-validate virt-viewer.desktop
# virt-viewer.desktop: error: required key "Name" in group "Desktop Entry" is not present
まとめ
Desktop Entry (デスクトップファイル) の書き方、配置先について書きました。 既にDesktop Entryの概要を知っている方は、#要点を中心にチェックいただけると効率的です。