AppImageLauncherでAppImageアプリをデスクトップに統合

Posted by 雅楽斎 on Wednesday, July 8, 2020

TOC

マルチディストリビューションアプリ配布プラットフォームAppImage

LinuxにおいてUbuntu/Debian/Fedoraといったディストリビューションを選ばないアプリケーションの配布方法としてAppImageという形式があります。依存するライブラリを含めたファイル一式をパッケージとして扱うことで、パッケージ一つでLinuxディストリビューションを選ばずにアプリケーションを配布するものの仕組みのうちの1つです。

Snapとの違い

同じようなアプローチとしてSnapが最近では広く使われるようになりました。SnapとAppImageの違いは以下の様になります。

Snapの特徴

  • Canonicalが作成した。割と新しい。Ubuntu 16.04以降でデフォルトインストールされる。採用ディストリビューションは拡大中
  • 公式でアプリストア( Install Linux apps using the Snap Store | Snapcraft )があり、デスクトップアプリもある。基本的にはアプリかコマンドでインストールする運用
  • ホストリソースを使用する場合はAppArmorで制御する

AppImageの特徴

  • 結構昔からあり、snapと違って動作にsnapdのようなdaemonを必要としない
  • そのため、動作するディストリビューションを選ばない
  • 公式でアプリストアのようなものは準備されておらず、ファイルを見つけてダウンロードする。カタログとしては辞書順にアプリが並んでいる公式ページはある apps – AppImageHub

1ファイルで1アプリを配布し、実行時に展開するという考え方はWindowsでのexeのポータブル版とほぼ同じであり、そういった意味ではAppImageアプリは簡単に実行が可能です。

(基本的に)デスクトップに統合されない

AppImageで配布されるアプリはファイルを直接実行し、終了すると元に戻るため、ディストリビューションネイティブのdeb/rpmパッケージやsnapパッケージと比較してインストール作業がないことから、MATE等のデスクトップ環境に統合されません。

これはメリットでもあるのですが、普段使う環境が同じ場合にメニューから選択するのではなく実行ファイルを置く場所を確保する必要があります。手動でメニュー登録をすることも可能ですが、ファイルの格納場所もユーザーが管理する必要があります。

初めて使うアプリの場合、ダウンロードディレクトリにダウンロードしたファイルをお試しで実行する場合がほとんどだと思うので、使い終わった後にファイルをどこかに退避して管理しないと、後からダウンロードしたファイルに埋もれて…ということも考えられます。

AppImageアプリのデスクトップ統合お助けソフト”AppImageLauncher”

TheAssassin/AppImageLauncher

Helper application for Linux distributions serving as a kind of "entry point" for running and integrating AppImages - TheAssassin/AppImageLauncher

そこで登場するのがAppImageLauncherで、これを使うことでAppImageアプリのデスクトップ統合を容易にします。

AppImageLauncherがやってくれること

AppImageアプリのファイルの実行を監視して、デスクトップ環境のメニューにショートカット追加、ファイルの移動、アンインストーラの追加をします。

ちょうどWindowsのScoopと似た動作1と考えていいと思います。

SyncthingとReadyNASで無理矢理構築したオレオレBucketでScoopを使ったWindowsの開発環境整備

ダウンロード・インストール

AppImageLauncherの配布方法はdebパッケージ・rpmパッケージ・ソースファイルとなっています。今回はUbuntu MATE 20.04でオフィシャルPPAを追加してapt経由のdebパッケージで動作確認を行いました。

PPAを追加

# add-apt-repository ppa:appimagelauncher-team/stable
# apt-get update

Ubuntuの場合、add-apt-repositoryコマンドが正常終了すると最後にapt-get updateが実行されるので、2行目は省略可能です。

パッケージ確認

# apt-cache policy appimagelauncher 
appimagelauncher:
  インストールされているバージョン: (なし)
  候補:               202004252016-stable-7408819~ubuntu20.04.1
  バージョンテーブル:
     202004252016-stable-7408819~ubuntu20.04.1 990
        990 http://ppa.launchpad.net/appimagelauncher-team/stable/ubuntu focal/main amd64 Packages

インストール

# apt-get install appimagelauncher

設定を確認

AppImageLauncherはインストール完了時からバックグラウンドで動作します。メニューには設定アプリが登録されるので確認します。

設定メニューに「AppImageLauncher Settings」が登録されます。

設定→AppImageLauncher Settings

AppImageLauncher1

「AppImageLauncher」タブではAppImageファイルを管理用ディレクトリに移動するか、管理用ディレクトリとしてどこを使うかを設定します。

AppImageLauncher2

「appimagelauncherd」タブでは、監視daemonをOS起動時に自動的に設定するかどうか、監視ディレクトリを追加するかどうかを設定します。

おもむろに実行

準備が終わったので、今回はStaitonという各種webサービスのショートカットブラウザとでも言うべきアプリを例にとります。

Station • One app to rule them all

Station unifies all your work tools in one neat and productive interface.

Linux用を~/Downloadへダウンロードして以下のコマンドで実行します。

$ cd ~/Download
$ chmod +x Station-1.65.0-x86_64.AppImage
$ ./Station-1.65.0-x86_64.AppImage

すると、ポップアップメニューが表示されます。

実行時ポップアップ

これでそのままOKボタンを押すと、確認ダイアログが表示されるので、今回はIntegrate and runを押します。

実行時ポップアップ

ファイルの移動とメニューへの登録が終わった後にStationが起動します。

Station起動

動作の確認

AppImageLauncherの動作を確認します。まずはAppImageファイルの管理ディレクトリへの移動。

$ ls ~/Applications/
Station-1.65.0-x86_64_3d3572ff64e5a80f83aa2b209e10e163.AppImage

移動されているのと、ファイル名にハッシュと思われる文字列が追加されています。

続いてメニュー。

stationメニュー

インターネットの下にStationがバージョン番号付きで登録されているのがわかります。バージョン付きで登録されるのは手元で試した限りではStationのみです。

また、このメニューは右クリックでアンインストールも選べるメニューとして登録されていることもわかります。

右クリック

まとめ

AppImageLauncherは元々AppImageが公式配布している同じ役割のappimagedが~/Downloadと~/binを監視しており、関係ないファイルの監視をすることで効率的ではなかったとサイトに記載がありました。

AppImageで配布されているアプリケーションはWindows、macOSと合わせてLinux版も配布されているものが多く、これまで使った中ではLosslessCutはLinux版がAppImageによる配布をしていました。また、有名どころとしてはLibreOfficeが環境を壊さない独立した別バージョンとしてAppImage版を提供しています。

今回LosslessCutを改めて確認してみたところ、Linux版は基本的にはsnapでの配布に変更されており、それ以外の手段としてAppImageで配布されています。そうした移り変わりも感じながらもsnapではない環境でシングルバイナリ配布としてAppImageが使われる場面もまだ多いので、AppImageLauncherを使ってみてはいかがでしょうか。

スポンサーリンク


  1. 特にポータブルアプリに対するScoopの動作 [return]

comments powered by Disqus