2022年10月30日日曜日

ubuntuのアプリ選択画面にアプリを出すための設定方法


背景

ubuntu22.04はキーボードのWindowsボタンを押すとアプリ(プログラム)選択画面(ランチャー)が表示され、アプリ名を入力すると実行対象が絞り込まれます。


インストーラーがあるアプリはこの画面で選べるように設定ファイルが生成されるのですが、ダウンロードしたファイルをコマンドで実行する形式のアプリはその画面に出てきません。
調べつつ試行錯誤したらコマンドで実行するアプリを表示する方法が分かったので、備忘録として記事に残します。

使ったもの

  • ubuntu22.04
  • テキストエディタ

~/.local/share/applications/にdesktopファイルを作れば、アプリ選択画面に出てくる

ubuntuでも利用されているdesktopファイルを利用する仕組みは「デスクトップエントリ」と言うようで、そのキーワードで調べると仕様や書き方の例が出てきます。

デスクトップエントリ - Arch Wiki
Linux デスクトップファイルの書き方

試しにgeditが起動するファイルを作ってみます。
~/.local/share/applications/asukiaaa.desktop
[Desktop Entry]
Type=Application
Name=asukiaaa
Exec=gedit
Terminal=false

desktopファイルは即時反映ではなく定期的(10秒ごと?)に更新されるので、ファイルを保存してから実行までに10秒ほど待つのが良いです。

アプリ検索画面でasukiaaaと検索すると対象が表示され、実行するとExecで指定した通りgeditが実行されました。


アイコンは画像ファイルの絶対パスか既存の画像名で指定可能

試した範囲だとpng、svg、jpgは指定可能でした。

~/.local/share/applications/asukiaaa.desktop
[Desktop Entry]
Type=Application
Name=asukiaaa
Exec=gedit
Terminal=false
Icon=/home/asuki/gitprojects/blog_docs/greenT.svg


デスクトップテーマとしてインストールされたアイコンは/usr/share/iconsにあります。
/usr/share/icons/Yaru/256x256/appsが見やすかったです。


試しにorg.gnome.Software.Developを割り当ててみます。


アイコン格納用のディレクトリにある画像は拡張子無しで指定可能です。
# Icon=/home/asuki/gitprojects/blog_docs/greenT.svg
Icon=org.gnome.Software.Develop


用意した画像やテーマの画像をアイコンとして割り当てれました。

パイプ「|」で繋いたコマンドを実行したい場合はsh -cでコマンドを文字列として渡す

実行後にlessで結果を表示する処理をランチャーアプリ化しようとしたら戸惑いましたがsh -c "コマンド"で記述したら良いと分かりました。

Desktop shortcut doesn't work if use pipe in command

shでコマンドを指定した上で、Terminal=trueとしてコマンドを実行する端末を表示します。

~/.local/share/applications/asukiaaa.desktop
[Desktop Entry]
Type=Application
Name=asukiaaa echo blog name
Exec=sh -c "echo 試行錯誤な日々 | less"
Terminal=true

上記の設定のアプリをアプリ選択画面で呼び出して実行すると、期待通りechoした文字列をlessで表示する処理ができました。


応用例: Arduino IDE 2

Arduino IDEとはArduinoというマイコンプログラム開発環境の公式アプリです。

Software | Arduino

IDEの1系はinstallスクリプトが圧縮されたフォルダに同梱されていて、それを実行すればubuntuのアプリ一覧から呼び出せるようにできました。
しかし、2系はなぜかそのスクリプトが無いため、一覧から呼び出すには手動での設定が必要です。(不便になっているのどうして…)

desktopファイルの例として、自分のArduino IDE2の設定例を紹介します。

ホームディレクトリにarduino-ide2というディレクトリを作り、その中にバージョン毎のzipファイルの中身を置きました。
その上で、現在利用中のバージョンに対してcurrentとしてsymlinkを貼ることで、バージョン切り替えを容易にしています。
$ pwd
/home/asuki/arduino-ide2
$ ls -la
合計 16
drwxrwxr-x 4 asuki asuki 4096 10月 30 22:46 .
drwxr-x--- 53 asuki asuki 4096 10月 30 22:38 ..
drwxr-xr-x 5 asuki asuki 4096 9月 14 07:13 arduino-ide_2.0.0
drwx------ 6 asuki asuki 4096 10月 30 15:57 arduino-ide_2.0.1
lrwxrwxrwx 1 asuki asuki 42 10月 30 16:04 current -> /home/asuki/arduino-ide2/arduino-ide_2.0.1

arduino-ide2にはdesktopファイルが含まれてはいるのですが、そのフォルダの中で実行される想定の記述なので、~/.local/share/applicationsに配置する際は書き換えが必要になります。
$ pwd
/home/asuki/arduino-ide2/current
$ ls
AppRun chrome_crashpad_handler resources
LICENSE.electron.txt eula.txt resources.pak
LICENSES.chromium.html icudtl.dat snapshot_blob.bin
arduino-ide libEGL.so swiftshader
arduino-ide.desktop libGLESv2.so usr
arduino-ide.png libffmpeg.so v8_context_snapshot.bin
chrome-sandbox libvk_swiftshader.so vk_swiftshader_icd.json
chrome_100_percent.pak libvulkan.so.1
chrome_200_percent.pak locales
$ cat arduino-ide.desktop
[Desktop Entry]
Name=Arduino IDE
Exec=AppRun --no-sandbox %U
Terminal=false
Type=Application
Icon=arduino-ide
StartupWMClass=Arduino IDE
X-AppImage-Version=2.0.1
Comment=Arduino IDE
Categories=Development;

ということで、arduino-ide.desktopを~/.local/share/applications/arduino-ide2.desktopにコピーしつつExecとIconを絶対パスに書き換えることで、アプリ一覧から呼べるようにしました。
ついでにNameもArduinoIDE2としました。
~/.local/share/applications/arduino-ide2.desktop
Name=ArduinoIDE2
Exec=/home/asuki/arduino-ide2/current/arduino-ide
Terminal=false
Type=Application
Icon=/home/asuki/arduino-ide2/current/arduino-ide.png
StartupWMClass=Arduino IDE
X-AppImage-Version=2.0.1
Comment=Arduino IDE
Categories=Development;

期待通りにアプリ一覧から呼び出し可能になりました。


終わり

コマンドや名前などを記述したdesktopファイルを~/.local/share/applications/に配置すれば、その内容がアプリ選択画面に表示されると分かりました。
これを使えば標準ではアプリ一覧に出てこないものを一覧から呼び出し可能に出来るので、頻繁に使うものは設定しておくと作業効率が高まって嬉しいです。

参考

デスクトップエントリ - Arch Wiki
Linux デスクトップファイルの書き方
Desktop shortcut doesn't work if use pipe in command

0 件のコメント :