Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

LinuxターミナルからFlatpakアプリを快適に起動する方法

Flatpakというアプリケーション配布モデルは、開発者にとってLinux向けにアプリを提供する新しく手軽な手段となり、ユーザーにとっても、実行中のLinuxディストリビューションのバージョンを気にせずにアプリをインストールできる便利な仕組みです。筆者のFedora Silverblueシステムでは、Flatpakはデフォルトのパッケージインストール方式になっており、Silverblue上のすべてのデスクトップアプリや、Slackwareで使っているお気に入りのアプリのいくつかもFlatpakとして動作しています。

しかし、Flatpakには場面によって少し扱いにくい点があります。それが命名規則です。たとえば、EmacsをFlatpakとしてインストールすると、システム上ではorg.gnu.emacsとして登録されます。これは、既存のシステムレベルのアプリ名と衝突しないようにするためです。すでにEmacsがインストールされている場合、/usr/bin/emacsとFlatpak版Emacsをどう区別すればよいのかという問題があります。

そのため、EmacsのようなFlatpakは、以下のようなパス(心の準備はいいですか?)にインストールされます:

/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs

/usr/bin/optからのシンボリックリンクも張られず、この場所はユーザーのPATHにも追加されません。したがって、Flatpakを起動するには次のようなコマンドを実行する必要があります:

$ flatpak run org.gnu.emacs

emacsと入力するだけに比べると、かなり長いコマンドですよね。

名前は覚えにくい

Flatpakの命名規則は、「そのFlatpakを頻繁に使っていて、リバースDNS形式の名前を覚えている」という前提に立っています。構造以外に命名の標準がないため、あるFlatpakはキャメルケースのorg.libreoffice.LibreOfficeを使い、別のものはorg.gimp.GIMPのような混在型になることもあります。

さらに、覚えやすさにも差があります。たとえばorg.glimpse_editor.Glimpseは、公式サイトがglimpse.orgではなくhttps://glimpse-editor.orgであること、そしてハイフンの代わりにアンダースコアが使われていることを覚えている場合にのみ、記憶しやすい名前です。

Flatpak開発者の視点では、これは問題ではありません。Flatpakはデスクトップから起動することを想定しているからです。org.gnu.emacsを覚える必要はなく、GNOMEのアクティビティ画面やKメニューなどのグラフィカルランチャーからいつでも起動できます。

これはたしかに理にかなっていますが、すでにターミナルを使っている最中には、ターミナルから直接アプリを起動できたほうが便利なことがあります。Glimpseで画像を開きたいとき、Emacsでテキストファイルを開きたいとき、VLCで音楽を再生したいとき——デスクトップへ「降りて」(実際にはキー1つで済むのですが)、アプリを起動し、メニューをクリックしてファイルを開き、ファイルシステムをたどって目的のファイルを探すのは面倒です。

コマンドに続けて開きたいファイル名を入力するほうが断然速いのです。しかし、flatpak run org.something.appと入力しなければならないなら、話は別です。

BashエイリアスでFlatpakを起動する

この問題への明白な解決策がBashエイリアスです。エイリアスを使えば、任意のコマンドをほぼ任意の単語に割り当てられます。多くのLinuxユーザーは、意図的に設定した場合でもディストリビューションがプリセットしている場合でも、よく使われるBashエイリアスを持っています:

$ grep alias ~/.bashrc
alias cp='cp -v'
alias rm='/usr/bin/local/trashy'
alias mv='mv -v'
alias ls='ls --color'
alias ll='ls -l --color'
alias lh='ll -h'

Flatpak用のエイリアスも同じように作成できます:

alias emacs='flatpak run org.gnu.emacs'

これで問題解決!……と言いたいところですが、もう一歩進んでみましょう。

Bashスクリプトとのより良い連携

エイリアスを手作業で追加するプロセスは、すぐに煩雑に感じられるようになりました。筆者にとって問題なのは作業そのものではなく、ワークフローの分断です。エディタを開いてエイリアスを追加するのは確かに素早くできますが、それは作業の流れを中断させる行為です。

本当に欲しいのは、Flatpakの初期インストールプロセスに必要に応じて、精神的にも物理的にも自然に続けられる仕組みです。インストールしたすべてのFlatpakにエイリアスが必要なわけではありません。たとえば、筆者のSilverblueシステムにあるFlatpakの一覧(一部)は次のとおりです:

$ find /var/lib/flatpak/app/* -maxdepth 0 -type d | tail -n5
/var/lib/flatpak/app/org.gnome.baobab
/var/lib/flatpak/app/org.gnome.Calculator
/var/lib/flatpak/app/org.gnome.Calendar
/var/lib/flatpak/app/org.gnome.Characters
/var/lib/flatpak/app/org.gnome.clocks
/var/lib/flatpak/app/org.gnome.Contacts
/var/lib/flatpak/app/org.gnome.eog
/var/lib/flatpak/app/org.gnome.Evince
/var/lib/flatpak/app/org.gnome.FileRoller
/var/lib/flatpak/app/org.gnome.font-viewer
/var/lib/flatpak/app/org.gnome.gedit
/var/lib/flatpak/app/org.gnome.Logs
/var/lib/flatpak/app/org.gnome.Maps
/var/lib/flatpak/app/org.gnome.NautilusPreviewer
/var/lib/flatpak/app/org.gnome.Rhythmbox3
/var/lib/flatpak/app/org.gnome.Screenshot
/var/lib/flatpak/app/org.gnome.Weather
/var/lib/flatpak/app/org.gnu.emacs
/var/lib/flatpak/app/org.signal.Signal

天気予報やGNOME電卓をターミナルから起動することはまずありません。Signalも同様で、朝一番に開いたまま一日中閉じないアプリなので、ターミナルから起動することはないでしょう。

そこで筆者が自分に課した要件は以下のとおりです:

  • 必要になったときにだけエイリアスを追加できる
  • ターミナルベースの操作で、Flatpakインストール作業の直後に自然に続けられる
  • ひとつのことをうまくやるシンプルさ
  • Fedora、RHEL、Slackwareなど、その週に使っているどんなディストリビューションでも動く移植性

最近筆者が落ち着いた解決策は、ターミナルから素早くアクセスしたいFlatpakのエイリアスを追加するための、小さなカスタムBashスクリプトです。以下がそのスクリプトです:

#!/bin/sh
# GPLv3 appears here
# gnu.org/licenses/gpl-3.0.md

# vars
SYMRC=.bashrc.d
SYMDIR=$HOME/$SYMRC
SYMFILE=flatpak_aliases

# exit on errors
set -e

# this is where the aliases lives
if [ ! -d $SYMDIR ]; then
mkdir "${SYMDIR}"
touch "${SYMDIR}"/"${SYMFILE}"
fi

sourcer() {
echo 'Run this command to update your shell:'
echo ". ${SYMDIR}/${SYMFILE}"
}

lister() {
cat "${SYMDIR}"/"${SYMFILE}"
}

adder() {
grep "alias ${ARG}\=" "${SYMDIR}"/"${SYMFILE}" && i=1
[[ $VERBOSE ]] && echo "$i"

if [ $i > 0 ]; then
echo "Alias for ${ARG} already exists:"
grep "alias ${ARG}=" "${SYMDIR}"/"${SYMFILE}"
exit
else
echo "alias ${ARG}='${COMMAND}'" >> "${SYMDIR}"/"${SYMFILE}"
[[ $VERBOSE ]] && echo "Alias for ${ARG} added"
sourcer
fi

unset i
}

remover() {
echo "Removing stuff."
sed -i "/alias ${ARG}\=/d" "${SYMDIR}"/"${SYMFILE}"
sourcer
}

# arg parse
while [ True ]; do
if [ "$1" = "--help" -o "$1" = "-h" ]; then
echo " "
echo "$0 add --command 'flatpak run org.gnu.emacs' emacs \# create symlink for emacs"
echo "$0 add --command 'flatpak run org.gnu.emacs -fs' emacs-fs \# create symlink for emacs in fullscreen"
echo "$0 remove emacs \# remove emacs symlink"
echo "$0 list \# list all active flatpak symlinks"
echo " "
exit
elif [ "$1" = "--verbose" -o "$1" = "-v" ]; then
VERBOSE=1
shift 1
elif [ "$1" = "list" ]; then
MODE="list"
shift 1
elif [ "$1" = "add" ]; then
MODE="add"
shift 1
elif [ "$1" = "remove" ]; then
MODE="remove"
shift 1
elif [ "$1" = "--command" -o "$1" = "-c" ]; then
COMMAND="${2}"
shift 2
else
break
fi
done

#create array, retain spaces
ARG=( "${@}" )

case $MODE in
add)
adder
;;
list)
lister
;;
remove)
remover
;;
*)
echo "You must specify an action <list|add|remove>"
exit 1
esac

スクリプトの使い方

LinuxターミナルからFlatpakアプリを快適に起動する方法

ターミナルから起動したいと思うFlatpakをインストールするときは、このスクリプトで作業を締めくくります:

$ flatpak install org.gnu.emacs
$ pakrat add -c 'flatpak run org.gnu.emacs' emacs
Alias for emacs added.
Run this command to update your shell:
. ~/.bashrc.d/flatpak_aliases

$ . ~/.bashrc.d/flatpak_aliases

エイリアスがすでに存在する場合は自動的に検出され、重複したエイリアスは作成されません。

もちろん、エイリアスの削除もできます:

$ pakrat remove emacs

この操作でFlatpak自体が削除されることはなく、専用のflatpak_aliasesファイルのみが対象になります。

すべてのFlatpakエイリアスは~/.bashrc.d/flatpak_aliasesに追加されます。シェル起動時に自動的に読み込ませたい場合は、以下のようなコードを.bashrc.bash_profile、または.profileに追記してください:

if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi

unset rc

Flatpakの起動をもっと手軽に

FlatpakはデスクトップLinuxと非常にうまく統合されており、強力で再現性のあるインフラが背後にあります。ビルドも比較的容易で、使いこなすのも簡単です。ほんの少しの手間を加えるだけで、ターミナルからも利用できるようになり、自分にとって最適なやり方を選べるようになります。このようなプロジェクトは他にもいくつか存在し、単純なBashスクリプトよりもはるかに高度なものが開発中かもしれませんが、このスクリプトはこれまでのところ筆者の環境で十分に機能しています。ぜひ試してみるか、あなた独自のソリューションをコメントで共有してみてください!

  1. Androidのサイドバーからアプリを素早く起動する方法|無料アプリ「Glovebox」の使い方

    Androidでサイドバーからアプリを起動するメリット Androidデバイスでアプリを起動する方法はいくつかあります。ホーム画面に配置したショートカットから起動したり、アプリドロワー(アプリ一覧画面)から開いたりするのが一般的です。どちらの方法でも、目的のアプリを問題なく起動できます。 しかし、もっと素早くアプリへアクセスしたいなら、「サイドバー」からの起動という新たな選択肢を試してみてはいかがでしょうか。画面の端からスワイプするだけで、お気に入りのアプリ一覧を呼び出せる便利な方法です。 無料アプリ「Glovebox」でサイドバーを作成しよう サイドバーからアプリを起動できるようにするには

  2. ターミナルを使ってMacからAnacondaを完全にアンインストールする方法

    強力なパッケージマネージャー「Anaconda」をインストールしたものの、不要になったためアンインストールしたい——そんな方は必見です。この記事では、AnacondaをMacから削除し、ディスク容量を解放して他の重要なファイルのためのスペースを確保する方法を詳しく解説します。 クリーンにアンインストールを行うために、いくつかの方法をご紹介します。それでは、さっそく始めましょう。 Anacondaとは? 巨大なヘビとしての「アナコンダ」はご存じでしょうが、ここで紹介するAnacondaは、機械学習、データサイエンス、科学技術計算、人工知能(AI)に関わるツールです。これらの予測分析は、スクリプト