2024-07-28

GNOME デスクトップから自作アプリを起動

GNOME は、Wayland あるいは X Window System 上で動作するデスクトップ環境です。長年、Linux をメインの OS として愛用していますが、概ね Fedora LinuxRHEL など、Red Hat 系の Linux ディストロを使っているので、普段使いのデスクトップ環境はずっと GNOME です。

自分専用の GUI アプリを PySide6 (Qt for Python) で作成して使っていますが、アプリの起動にいちいち端末エミュレータを起動してディレクトリを移動して~…、なんていう操作をするのが面倒なので、ある程度アプリが出来上がったらデスクトップアプリとして GNOME のアプリ一覧の画面に登録しています。

今回は、自分専用アプリ(GUI アプリでなくと対応可能)を GNOME デスクトップへ登録する方法をまとめました。

今回のテーマ
  • 自分向けに作った GUI アプリを、ローカルアカウント内で GNOME デスクトップ・アプリとして登録して、アプリ一覧から起動できるようにする。
    • 配布するパッケージではないので、アプリの場所などをハードコーディングすることを許容するものとします。

なお、本ブログで説明する内容は、下記の Github のサイトからダウンロードできます。

スクショ用に下記の OS 環境で動作確認をしていますが、いまどきの GNOME デスクトップ環境であれば、同様に動作すると思います。

Fedora Workstation 40 x86_64
GNOME 46
Python 3.12.4

なお、KDE Plasma デスクトップ環境も GNOME 同様に FreeDesktop.org が策定する規格に準拠していますので、やはり同じように自作アプリを登録できます。

アプリの作成場所

アプリを開発する場所は人それぞれでしょうが、ここでは $HOME/MyProjects 以下に個々のアプリ用のディレクトリを作成するものとします。今回のアプリは、my_desktop_app というディレクトリを作成して、その中で作成します。

bitwalk@fedora:~$ cd MyProjects
bitwalk@fedora:~/MyProjects$ mkdir my_desktop_app
bitwalk@fedora:~/MyProjects$ cd my_desktop_app
bitwalk@fedora:~/MyProjects/my_desktop_app$ pwd
/home/bitwalk/MyProjects/my_desktop_app

最後に pwd コマンドで確認したように、GUI アプリを作成する場所は、ここでは /home/bitwalk/MyProjects/my_desktop_app になります。以降、このフルパスが随所に出現しますが、お使いの環境に応じて適宜読み替えるようにしてください。

GUI アプリは PySide6 で

ここでサンプルとして取り上げる GUI アプリは PySide6 で作成したものとします。メインプログラムかつ、今回は唯一のプログラムファイルは app.py です。デスクトップに登録するためのサンプルですので、ごく簡単に Hello World タイプのプログラムにしました。

app.py

今回利用する Python モジュールは PySide6 だけですが、requirements.txt に記載して pip コマンドで一括複数のモジュールをインストールできるようにしておきます。

requirements.txt
pyside6

アプリが使用するアイコンイメージは、とりあえず下記のイメージを利用しています。下記イメージを app.png という名前で /home/bitwalk/MyProjects/my_desktop_app 内に保存しておきます。

アイコンに使用する app.png(例)

Python の仮想環境 venv を利用

ここでは Python の仮想環境 venv を利用して pip コマンドで必要なモジュールをローカルディレクトリにインストールして利用することにします。pip モジュールも最新のバージョンにしておきます。

bitwalk@fedora:~/MyProjects/my_desktop_app$ python3 -m venv venv
bitwalk@fedora:~/MyProjects/my_desktop_app$ source venv/bin/activate
(venv) bitwalk@fedora:~/MyProjects/my_desktop_app$ pip install -r requirements.txt
Collecting pyside6 (from -r requirements.txt (line 1))
  Downloading PySide6-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl.metadata (5.3 kB)
...
(途中省略)
...
Downloading shiboken6-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl (188 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 189.0/189.0 kB 9.7 MB/s eta 0:00:00
Installing collected packages: shiboken6, PySide6-Essentials, PySide6-Addons, pyside6
Successfully installed PySide6-Addons-6.7.2 PySide6-Essentials-6.7.2 pyside6-6.7.2 shiboken6-6.7.2

[notice] A new release of pip is available: 23.3.2 -> 24.1.2
[notice] To update, run: pip install --upgrade pip
(venv) $ pip install --upgrade pip
Requirement already satisfied: pip in ./venv/lib64/python3.12/site-packages (23.3.2)
Collecting pip
  Downloading pip-24.1.2-py3-none-any.whl.metadata (3.6 kB)
Downloading pip-24.1.2-py3-none-any.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 11.0 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.3.2
    Uninstalling pip-23.3.2:
      Successfully uninstalled pip-23.3.2
Successfully installed pip-24.1.2
(venv) bitwalk@fedora:~/MyProjects/my_desktop_app$ deactivate
bitwalk@fedora:~/MyProjects/my_desktop_app$

最後に、deactivate コマンドで Python の仮想環境から抜けます。

シェルスクリプトと desktop ファイル

アプリを起動するシェルスクリプトを用意します。

GUI アプリがバイナリ、あるいはシステムの Python (python3) で起動できるアプリであれば、このシェルスクリプトは不要で、次に説明する desktop ファイル Exec エントリに直接記載できます。

今回は、Python の venv 仮想環境を利用することを前提にしていますので、シェルスクリプトで一旦 venv のあるディレクトリ(=シェルスクリプトが存在するディレクトリ)へ移動して、仮想環境をアクティブにして、同じディレクトリにあるメインプログラム (app.py) を実行するようにしています。

app.sh
#!/bin/bash
cd "$(dirname ${0})" || exit
source venv/bin/activate
python app.py

GNOME のアプリ一覧に登録するための desktop ファイルを用意します。Exec エントリに、先に用意したシェルスクリプト app.shIcon エントリに、アプリ一覧に表示するアイコン画像 app.png をフルパスで指定しています。お使いの環境に応じて変更してください。

フルパスで指定しなくとも、せめて $HOME などの環境変数で一部を指定できないか試しましたが、うまくいきませんでした。やりかたが間違っているだけかもしれませんので、何か判ったら追記するようにします。

app.desktop
[Desktop Entry]
Name=Hello World!
Name[ja]=こんにちは、世界!
Comment=Sample GUI
Keywords=Hello World!;
Keywords[ja]=こんにちは、世界!;
Exec=/home/bitwalk/MyProjects/my_desktop_app/app.sh
Icon=/home/bitwalk/MyProjects/my_desktop_app/app.png
Terminal=false
Type=Application
StartupNotify=true
Categories=Utility;

GUI アプリでなく、コマンドラインでやりとりする CUI アプリの場合、あるいはデバッグ目的で出力する内容を確認したい場合は Terminal エントリを true にするとアプリの実行時に端末エミュレータが表示されます。アプリの実行が終了すると同時に端末エミュレータも閉じます。

シェルスクリプトの動作確認

先ほど作成したシェルスクリプトのファイル app,sh に実行権限を付与後、ホームディレクトリにワーキングディレクトリを移して、スクリプトの動作確認をします。

bitwalk@fedora:~/MyProjects/my_desktop_app$ chmod +x app.sh
bitwalk@fedora:~/MyProjects/my_desktop_app$ cd ~/
bitwalk@fedora:~$ MyProjects/my_desktop_app/app.sh

以下のような GUI アプリのウィンドウが表示されれば正しく動作しています。

app.sh の実行例

デスクトップアプリの登録

準備した desktop ファイルを所定の場所 $HOME/.local/share/applications/ 内にコピーすれば、アプリ一覧に登録されるのですが、desktop ファイルの内容を変更する度にコピーし直すのは面倒ですので、以下のようにシンボリックリンクを貼っておきます。

$ ln -s /home/bitwalk/MyProjects/my_desktop_app/app.desktop /home/bitwalk/.local/share/applications/app.desktop

問題がなければ、GNOME のアプリ一覧画面に直ちに反映されます。

アプリ一覧に追加された「こんにちは、世界!」

今回はサンプルということで desktop ファイル名を app.desktop としましたが、現実的には、いくつも登録することを考慮して一意なファイル名にする必要があります。

参考サイト

  1. そのシェルスクリプトのあるディレクトリに移動する #ShellScript - Qiita [2013-06-28]
  2. Desktop Entry Specification

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: