Linuxに新しいソフトウエアを追加したとき、自動的にdesktop entryが作成されない場合がある。
手動でdesktop entryファイルを書いて、インストールする方法
規格文書
- Desktop Menu Specification (freedesktop.org)
- デスクトップエントリ (Arch Linux)
- desktop-file-validate コマンド manページ
- desktop-file-install コマンド manページ
- desktop-file-edit コマンド manページ
- update-desktop-database コマンド manページ
desktop entryの格納場所
- /usr/share/applications
- /usr/local/share/applications
- ~/.local/share/applications
desktop entryのサンプル
Ubuntu 22.04にプリインストールされているソフトウエアでの例
geditのdesktop entryファイルは次のようになっている
/usr/share/applications/org.gnome.gedit.desktop
[Desktop Entry] Name=Text Editor Comment=Edit text files Exec=gedit %U Terminal=false Type=Application StartupNotify=true MimeType=text/plain; # TRANSLATORS: Do NOT translate or transliterate this text! # This is an icon file name. Icon=org.gnome.gedit Categories=GNOME;GTK;Utility;TextEditor; Actions=new-window;new-document; # TRANSLATORS: Do NOT translate or localize the semicolons! # The list MUST also end with a semicolon! # Search terms to find this application. Keywords=Text;Editor;Plaintext;Write;gedit; DBusActivatable=true X-Ubuntu-Gettext-Domain=gedit [Desktop Action new-window] Name=New Window Exec=gedit --new-window [Desktop Action new-document] Name=New Document Exec=gedit --new-document
desktop entry作成ソフト alacarte で作成したファイルの例
~/.local/share/applications/alacarte-made.desktop
[Desktop Entry] Name=OpenShot Video Editor ver 3.0 Exec=/opt/openshot/OpenShot-v3.0.0-x86_64.AppImage Comment=Video Editor Terminal=false Icon=/opt/openshot/Faenza-openshot.svg Type=Application
desktop entryを手動作成する
desktop-file-edit コマンドを利用して、新たにdesktop entryファイルを作成
$ touch test.desktop $ desktop-file-edit --set-name="OpenShot動画エディター" \ --set-comment="クロスプラットフォームな動画エディターです" \ --set-key="Exec" --set-value="/opt/openshot/OpenShot-v3.0.0-x86_64.AppImage %U" \ --set-icon="/opt/openshot/Faenza-openshot.svg" \ --add-category=AudioVideo \ --add-mime-type="video/mp4;video/mpeg;video/x-mpeg;" \ --set-key="Type" --set-value="Application" \ --set-key="Terminal" --set-value="false" \ test.desktop
黄色でアンダーラインを引いたのは必須プロパティである。このコマンドでは次のようなファイルが作成される
test.desktop
[Desktop Entry] X-Desktop-File-Install-Version=0.26 Name=OpenShot動画エディター Comment=クロスプラットフォームな動画エディターです Icon=/opt/openshot/Faenza-openshot.svg Categories=AudioVideo; Type=Application Exec=/opt/openshot/OpenShot-v3.0.0-x86_64.AppImage %U Terminal=false MimeType=video/mp4;video/mpeg;video/x-mpeg;
Exec キー
実行するプログラムの後ろにつける、引数のプレースホルダー。次の例では %U となっているものについては、The Exec key (freedesktop.org) に一覧が掲載されている。
Exec=/opt/openshot/OpenShot-v3.0.0-x86_64.AppImage %U
%f | 単一のファイルへのフルパス名。URLの場合は、ローカルにダウンロードしたファイル名 |
%F | 複数ファイルのフルパス名リスト。URLの場合は、ローカルにダウンロードしたファイル名 |
%u | 単一URLまたは、単一ファイルへのフルパス名 |
%U | 複数URLのリスト、または複数ファイルへのフルパス名リスト |
Category キー
メニュー内のどのサブディレクトリに表示されるかを指定するのが、Categoryキーの値。標準的な値は Registered Categories (freedesktop.org) に一覧が掲載されている。
参考までに、Ubuntu 22.04のメニュー デフォルト値は /etc/xdg/menus/gnome-applications.menu (XML形式設定ファイル)に定義されていて、抜き出して一覧にすると次のようなものになる。
メニュー | メニュー(日本語) | Categoryキーの値 |
---|---|---|
Accessories submenu | アクセサリー | Categories=Utility; |
Accessibility submenu | ユニバーサルアクセス | Categories=Accessibility; |
Education submenu | 教育・教養 | Categories=Education; |
Science submenu | Science | Categories=Education;Science; |
Games submenu | ゲーム | Categories=Game; |
Graphics submenu | グラフィックス | Categories=Graphics; |
Internet submenu | インターネット | Categories=Network; |
Multimedia submenu | サウンドとビデオ | Categories=AudioVideo; |
Office submenu | オフィス | Categories=Office; |
System Tools submenu | システムツール | Categories=System; |
Utilities submenu | ユーティリティ | Categories=X-GNOME-Utilities; |
Development Tools submenu | プログラミング | Categories=Development; |
MimeType キー
システムで定義されているMIMEタイプは /usr/share/applications/gnome-mimeapps.list を参照すること。
一般的なMIMEタイプの一覧は
作成したdesktop entryファイルの文法を自動チェックする
$ desktop-file-validate test.desktop
desktop entry ファイルのインストール
ユーザディレクトリ内の~/.local/share/applications
にsample.desktopというファイルをコピーする例
$ desktop-file-install --dir=/home/user/.local/share/applications sample.desktop $ desktop-file-install --dir=$HOME/.local/share/applications sample.desktop
※注意: --dir=~/.local/share/applications
と書くとエラーになる(homeディレクトリに ~ というサブディレクトリが作られる...)。 必ず、フルパスでコピー先ディレクトリを指定するか、シェルの環境変数$HOMEを使う。
コピー完了後に、MIMEタイプキャッシュをアップデートする
$ update-desktop-database ~/.local/share/applications