bokumin.org

RSS Sitemap Mail
ritual-clearcut

UbuntuやDebianのパネルに実行ファイルをインストールする(Gnome)

How to install custom executables into the GNOME panel (Ubuntu/Debian)

はじめに

自作した実行ファイルや、パッケージが見つからずソースから自分でビルドしたアプリを、GNOMEのアプリ一覧(アクティビティ画面)やパネルからランチャーとして起動できるようにしたい、という場面あると思います。
ここで扱う.desktopファイルの仕組み自体はfreedesktop.orgで標準化されたものなので、KDEやXfceなどのデスクトップ環境でも基本的に同じ考え方で動作します。

desktop-file-installコマンドについて

よく紹介されている方法として、次のコマンドがあります。

sudo desktop-file-install your-package-name.desktop

ただ、このコマンドで一発解決とはいかないことがよくあります。desktop-file-installは単にファイルをコピーするだけのコマンドではなく、渡された.desktopファイルの記述内容を検証(バリデーション)したうえでインストールする仕組みになっています。そのため、必須項目が抜けていたり、Execの記述形式が正しくなかったりすると、その場でエラーになって弾かれます。

つまり、正しく書かれた.desktopファイルが必要ということです。逆に言えば、自分で正しい.desktopファイルを用意して、決められた場所に置いてしまえば、desktop-file-installコマンドを使わなくてもデスクトップ環境はちゃんと認識してくれます。以下ではその手動での作り方を説明します。

.desktopファイルを作成する

Linuxのデスクトップ環境にアプリを表示させるには、デスクトップエントリファイル(.desktopという拡張子のファイル)を作成する必要があります。保存場所は次の2択です。

  • 自分だけに表示させたい場合:~/.local/share/applications
  • システム全体(全ユーザー)に表示させたい場合:/usr/share/applications

主要なデスクトップ環境(GNOME、KDE、Xfceなど)はどちらの場所も認識するので、好きな方を選んで問題ありません。今回はシステム全体の方で進めます。

sudo nano /usr/share/applications/your-package-name.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=Your App Name
GenericName=Custom Tool
Comment=自分でビルドしたアプリの説明文
Exec="/home/user/hoge/hoge-hoge" %U
Icon=/home/user/hoge/image/icon.png
Terminal=false
StartupNotify=true
NoDisplay=false
Categories=Utility;

それぞれの項目の意味は以下の通りです。

  • Version:desktopエントリ仕様自体のバージョン。基本的に1.0のままで問題ありません
  • Type:エントリの種類。通常のアプリならApplication
  • Name:アプリ一覧に表示される名前
  • GenericName:アプリの種類を表す一般的な名前(検索時の補助になります)
  • Comment:アプリ一覧でカーソルを合わせたときなどに表示される説明文
  • Exec:実際に実行されるコマンド。パスにスペースが含まれる場合はダブルクォートで囲みます。%Uや%fなどはファイルをドラッグ&ドロップした際にそのパスを引数として渡すためのプレースホルダーで、不要であれば省略できます
  • Icon:アイコン画像のパス、またはアイコンテーマ内のアイコン名
  • Terminal:ターミナルを開いて実行するかどうか。CLIツールならtrueにします
  • StartupNotify:起動時にカーソルをローディング表示にするかどうか
  • NoDisplay:trueにするとアプリ一覧には表示されなくなります(他のアプリから呼び出す用の裏方エントリなどに使います)
  • Categories:メニュー上での分類。複数指定する場合はセミコロン区切りで、末尾にもセミコロンを付けます

反映されないときの確認ポイント

ファイルを保存したのにアプリ一覧に出てこない場合、以下を順番に確認してみてください。

まず、記述内容自体に誤りがないかを検証コマンドでチェックします。

# .desktopファイルの記述が正しいかチェックする
desktop-file-validate /usr/share/applications/your-package-name.desktop

エラーが出なければ記述自体は問題ありません。次に、.desktopファイルとその中で指定している実行ファイル本体の両方に、実行権限が付いているか確認します。

# .desktopファイル自体、および実行するスクリプトや実行ファイルに実行権限を付与
chmod +x /usr/share/applications/your-package-name.desktop
chmod +x /home/user/hoge/hoge-hoge

それでも反映されない場合は、デスクトップエントリのキャッシュ(データベース)が更新されていないだけのこともあります。以下のコマンドで手動更新できます。

# システム全体(/usr/share/applications)に置いた場合
sudo update-desktop-database /usr/share/applications

# ユーザー個別(~/.local/share/applications)に置いた場合
update-desktop-database ~/.local/share/applications

# 独自のアイコンファイルを置いた場合はアイコンキャッシュも更新
gtk-update-icon-cache

多くの場合、一度ログアウト・ログインするか、GNOME Shellを再起動(Xorg環境ならAlt+F2からrを入力)すると反映されます。

(例)Tor Browserの.desktopファイル

わたしのDebian環境はArm64で、パッケージ管理からは入らないTor Browserを公式サイトからダウンロードして使っています。参考として、実際に使っている.desktopファイルを載せておきます。

[Desktop Entry]
Type=Application
Name=Tor Browser
Comment=Torネットワーク経由で閲覧するブラウザ
Exec=/bin/bash -c "cd /home/bokumin/tor-browser && ./start-tor-browser.desktop --detach"
Icon=/home/bokumin/tor-browser/Browser/browser/chrome/icons/default/default128.png
Terminal=false
Categories=Network;WebBrowser;

Execの書き方が肝となっています。Tor Browserは単体の実行ファイルではなく、環境変数の設定や依存関係の確認などを行う起動用スクリプト(start-tor-browser.desktop)を経由しないと正しく起動しません。そのため、直接そのスクリプトをExecに指定するのではなく、/bin/bash -c "コマンド"という形で「まず該当ディレクトリに移動してから、スクリプトを実行する」という一連の処理をシェル経由で実行させています。

末尾に付けている--detachは、起動したTor Browserのプロセスをバックグラウンドで動かし続けるためのオプションです。これがないと、ランチャーを起動した際に開いたプロセスの終了を待ち続けてしまい、正常に使えないことがあります。

以上のやり方を覚えておけば、パッケージマネージャーやアプリストアに登録されていない自作・野良アプリでも、通常のアプリと同じようにアプリ一覧やパネルから起動できるようになります。

おわり