🖱️

デスクトップエントリを書こう

2024/04/22に公開

はじめに

本記事のターゲット

  • 自分で作ったアプリケーションをデスクトップから起動できるようにしたい人
  • パッケージマネージャを使わずにアプリケーションをインストールしたい人

前提

Linuxでxdg-menuを実装したデスクトップ環境を使用していること

この記事で説明すること

この記事ではデスクトップエントリを作成し、デスクトップ環境からアプリケーションを起動できるようにするまでの手順を紹介します。
デスクトップエントリには3タイプがありますが、本記事ではアプリケーションエントリの作成手順のみをカバーします。

仕様

.desktopファイル

.desktopファイルは以下の形式で記述します。

[Desktop Entry]
key1=value
key2=value
key3=value
...

以下はよく仕様されるキーの一覧です。

キー 備考
Type デスクトップエントリのタイプ
Name アプリケーション名
Comment ツールチップ用コメント
Path ワーキングディレクトリ
Exec 実行ファイルの絶対パス(引数を渡すことも可能)
Icon アイコン名(画像ファイルの拡張子を省略したもの)
Categories アプリケーションのカテゴリ

上記の表はすべてのキーを網羅していません。詳細はこちらを参照してください。

アイコンパス

以下の順番でアイコンの探索が行われます。

  1. $HOME/.icons
  2. $XDG_DATA_DIRS/icons
  3. $/usr/share/pixmaps

ハンズオン

シナリオ

Discord公式サイトからtar.gzファイルをダウンロードし、システム全体に対してインストールを行います。

ディレクトリ構造

ダウンロードしたtar.gzファイルを解凍すると、以下のディレクトリを得られます。

discord                  #tar.gzファイルを解凍したもの
└── Discord
    ├── Discord
    ├── chrome-sandbox
    ├── chrome_100_percent.pak
    ├── chrome_200_percent.pak
    ├── chrome_crashpad_handler
    ├── discord.desktop
    ├── discord.png
    ├── icudtl.dat
    ├── libEGL.so
    ├── libGLESv2.so
    ├── libffmpeg.so
    ├── libvk_swiftshader.so
    ├── libvulkan.so.1
    ├── locales
    ├── postinst.sh
    ├── resources
    ├── resources.pak
    ├── snapshot_blob.bin
    ├── v8_context_snapshot.bin
    └── vk_swiftshader_icd.json

インストール手順

  1. 今回は予めdiscord.desktopが用意されています。
    [Desktop Entry]
    Name=Discord
    StartupWMClass=discord
    Comment=All-in-one voice and text chat for gamers that's free, secure, and works on both your desktop and phone.
    GenericName=Internet Messenger
    Exec=/usr/share/discord/Discord
    Icon=discord
    Type=Application
    Categories=Network;InstantMessaging;
    Path=/usr/bin
    
  2. Execを見ると、/usr/share/discord配下にある実行ファイルDiscordが呼ばれることが分かるので、ディレクトリを移動します。
    $ mv ~/path/to/discord-0.0.50/Discord /usr/share/discord
    
  3. Pathを見ると、/usr/binをワーキングディレクトリとしてDiscordを起動することが分かります。mvcpを用いてDiscord/usr/binに移動した場合、実行ファイルから2で配置した/usr/share/discord内にあるファイルへアクセスできません。ですので、代わりにシンボリックリンクを作成します。
    $ ln -s /usr/share/discord/Discord /usr/bin/Discord
    
  4. アプリケーションディレクトリの中にdiscord.pngという画像ファイルがあるので、それを/usr/share/pixmaps配下に格納します。
  5. 以下のコマンドを用いてdiscord.desktopを検証します。ファイルに問題がなければ何も出力されません。
    $ desktop-file-validate /usr/share/discord/discord.desktop
    
  6. 最後に、以下のコマンドを用いてdiscord.desktopのインストールを行います。
    $ desktop-file-install --dir=/usr/share/applications /usr/share/discord/discord.desktop
    

参考

https://wiki.archlinux.jp/index.php/デスクトップエントリ#.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E4.BE.8B

https://github.com/alacritty/alacritty/blob/master/INSTALL.md#desktop-entry

GitHubで編集を提案

Discussion