GNOME は、Wayland あるいは X Window System 上で動作するデスクトップ環境です。長年、Linux をメインの OS として愛用していますが、概ね Fedora Linux や RHEL など、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 タイプのプログラムにしました。
今回利用する Python モジュールは PySide6 だけですが、requirements.txt に記載して pip コマンドで一括複数のモジュールをインストールできるようにしておきます。
pyside6
アプリが使用するアイコンイメージは、とりあえず下記のイメージを利用しています。下記イメージを app.png という名前で /home/bitwalk/MyProjects/my_desktop_app 内に保存しておきます。
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) を実行するようにしています。
#!/bin/bash cd "$(dirname ${0})" || exit source venv/bin/activate python app.py
GNOME のアプリ一覧に登録するための desktop ファイルを用意します。Exec エントリに、先に用意したシェルスクリプト app.sh、Icon エントリに、アプリ一覧に表示するアイコン画像 app.png をフルパスで指定しています。お使いの環境に応じて変更してください。
フルパスで指定しなくとも、せめて $HOME などの環境変数で一部を指定できないか試しましたが、うまくいきませんでした。やりかたが間違っているだけかもしれませんので、何か判ったら追記するようにします。
[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 アプリのウィンドウが表示されれば正しく動作しています。
デスクトップアプリの登録
準備した 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 としましたが、現実的には、いくつも登録することを考慮して一意なファイル名にする必要があります。
参考サイト
にほんブログ村
#オープンソース