Flatpakアプリケーション配布モデルは、開発者がLinuxを新しく簡単な方法でターゲットにするのに役立ち、Linuxユーザーが実行しているLinuxのバージョンを気にせずにさらに多くのアプリケーションをインストールできるようにします。これはエキサイティングなテクノロジーであり、私のFedora Silverblueシステムでは、これがデフォルトのパッケージインストール方法です。 Silverblue上のすべてのデスクトップアプリケーションとSlackwareで使用するお気に入りのいくつかは、Flatpaksとして実行されています。
ただし、Flatpakを少し厄介にする場合が1つあります。それが、その命名スキームです。たとえば、EmacsをFlatpakとしてインストールすると、システムにorg.gnu.emacs
として登録されます。 。これは明らかに、既存のシステムレベルのアプリケーションの名前を壊すのを恐れて行われます。すでにEmacsをインストールしている場合、/usr/bin/emacs
の違いは何ですか。 とEmacsのFlatpakインストール?このため、EmacsのようなFlatpakは、次のパスのようなものにインストールされます(準備をしてください):
/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs
/usr/bin
からはシンボリックリンクされていません または/opt
、場所はユーザーのパスに追加されません。Flatpakを起動するには、次のような呼び出しが必要です。
$ flatpak run org.gnu.emacs
emacs
を入力するだけの場合と比べると、多くの入力が必要です。 。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
Flatpakの命名スキームでは、パッケージの逆引きDNS名を覚えるのに十分な頻度でFlatpakを使用することも前提としています。構造を除けば、Flatpakに名前を付けるための標準がないため、1つのFlatpakでorg.libreoffice.LibreOffice
などのキャメルケースを使用できます。 、一方、org.gimp.GIMP
などのミックスを使用する場合もあります 。
一部の名前も他の名前より覚えやすいです。たとえば、org.glimpse_editor.Glimpse
覚えやすいのみ そのWebサイトがglimpse.orgではなくhttp://glimpse-editor.orgであり、アンダースコアがダッシュの代わりになっていることを覚えている場合。
Flatpak開発者の観点からは、Flatpaksはデスクトップから起動することを目的としているため、これは問題ではありません。 org.gnu.emacs
を覚えておく必要はありません GNOMEアクティビティ、K-Menu、または同様のグラフィカルランチャーからいつでも起動できるためです。
これは十分な頻度で当てはまりますが、すでに端末を使用しているため、端末からアプリケーションを起動する方が便利な場合もあります。 Glimpseの画像、Emacsのテキストファイル、VLCの音楽ファイルのいずれが必要な場合でも、ターミナルで忙しくてデスクトップに「ドロップ」できません(キーが1つだけ離れていても)。起動します。アプリケーションで、メニューをクリックしてファイルを開き、ファイルシステムをクリックして開きたいファイルを見つけます。
コマンドの後に開きたいファイルを入力する方が速いです。ただし、flatpak run org.something.app
と入力する必要がある場合 、そうではありません。
Bashエイリアスを使用してFlatpakを起動する
これらすべてに対する明らかな解決策は、Bashエイリアスです。 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'
Flatpaksのエイリアスを作成することもできます:
alias emacs='flatpak run org.gnu.emacs'
問題は解決しました!
Bashスクリプトとのより良い相互作用
エイリアスを手動で追加するプロセスが私にとってあまりにも面倒だと感じるのにそれほど時間はかかりませんでした。そして私にとって、それはタスクではなくプロセスです。エディターを開いてエイリアスを追加するのは非常に高速ですが、ワークフローが中断されます。
私が本当に望んでいるのは、精神的および肉体的に、最初のFlatpakインストールプロセスに必要に応じて追加できるものです。 。インストールするすべてのFlatpakにエイリアスが必要なわけではありません。たとえば、SilverblueシステムのFlatpaksのリストの一部を次に示します。
$ 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
ターミナルからWeatherまたはGNOMECalculatorを起動することはありません。一日の始めに開いて閉じないアプリケーションなので、ターミナルからSignalを起動することもありません。
したがって、私が自分で定義した要件は次のとおりです。
- 必要に応じてエイリアスを追加
- 端末ベースの制御なので、Flatpakのインストールプロセスの最後に快適にフィットします
- 1つのことを実行し、それをうまく実行します
- Fedora、RHEL、Slackware、および特定の週に使用しているその他のディストリビューション間で移植可能
私が最近決めた解決策は、ターミナルからすばやくアクセスしたいことがわかっているFlatpaksのエイリアスを追加するために使用するカスタムの小さな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
ターミナルから起動したい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
FlatpaksはデスクトップLinuxと非常によく統合されており、その背後には強力で再現性のあるインフラストラクチャがあります。それらは比較的簡単に作成でき、簡単に使用できます。少しの追加作業で、それらをターミナルに移動して、自分に最適な方法で使用できるようにすることができます。おそらく、このようなプロジェクトは他にもいくつかあり、開発中のプロジェクトの中には、単純なBashスクリプトよりもはるかに高度なものがいくつかありますが、これは今のところうまく機能しています。試してみるか、コメントでカスタムソリューションを共有してください!