Model distribuce aplikací Flatpak pomáhá vývojářům zaměřit se na Linux novým a snadným způsobem a uživatelům Linuxu pomáhá instalovat více aplikací, aniž by se museli starat o to, jakou verzi Linuxu používají. Je to vzrušující technologie a na mém systému Fedora Silverblue je to výchozí metoda instalace balíčků. Všechny mé desktopové aplikace na Silverblue a několik mých oblíbených, které používám na Slackware, běží jako Flatpaks.
Jedna věc však dělá Flatpak v některých případech trochu nešikovným, a to je jeho schéma pojmenování. Když například nainstaluji Emacs jako Flatpak, zaregistruje se v mém systému jako org.gnu.emacs
. Děje se tak zřejmě ze strachu, aby nedošlo k zablokování názvu existující aplikace na systémové úrovni – pokud již mám nainstalovaný Emacs, jaký je pak rozdíl mezi /usr/bin/emacs
a instalace Flatpak Emacsu? Z tohoto důvodu se Flatpak jako Emacs nainstaluje do něčeho podobného (připravte se na to) této cesty:
/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs
Není to symbolicky odkazováno z /usr/bin
nebo /opt
, umístění není přidáno do cesty uživatele a spuštění Flatpak vyžaduje vyvolání, jako je toto:
$ flatpak run org.gnu.emacs
To je hodně psaní ve srovnání s pouhým zadáním emacs
.
Jména se těžko pamatují
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Schéma pojmenování Flatpak také předpokládá, že používáte Flatpak dostatečně často, abyste si zapamatovali reverzní název DNS balíčku. Kromě struktury neexistuje žádný standard pro pojmenování Flatpak, takže jeden Flatpak by mohl používat camel-case, jako je org.libreoffice.LibreOffice
, zatímco jiný může používat mix, například org.gimp.GIMP
.
Některá jména se pamatují snadněji než jiná. Například org.glimpse_editor.Glimpse
je snadno zapamatovatelné pouze pokud si pamatujete, jeho webová stránka je http://glimpse-editor.org, nikoli glimpse.org, a podtržítko nahrazuje pomlčku.
Z pohledu vývojářů Flatpak to není problém, protože Flatpaks jsou určeny ke spouštění z plochy. Nemusíte si pamatovat org.gnu.emacs
protože jej můžete vždy spustit z Aktivity GNOME nebo z K-Menu nebo podobného grafického spouštěče.
To platí dost často, ale někdy je pohodlnější spustit aplikaci z terminálu, protože terminál již používáte. Ať už chci obrázek v Glimpse nebo textový soubor v Emacs nebo hudební soubor ve VLC, jsem velmi často příliš zaneprázdněn v terminálu, abych „vypadl“ na plochu (i když je to jen jeden klíč!), spusťte aplikaci, kliknutím přes nabídky otevřete soubor a poté kliknutím na můj souborový systém najděte soubor, který chci otevřít.
Jen je rychlejší napsat příkaz následovaný souborem, který chci otevřít. Ale pokud musím napsat flatpak run org.something.app
, není.
Použití aliasů Bash ke spuštění Flatpak
Zřejmým řešením toho všeho je alias Bash. S aliasem Bash můžete přiřadit libovolný libovolný příkaz téměř jakémukoli slovu, které chcete. Existuje mnoho běžných aliasů Bash, které má na svém systému téměř každý uživatel Linuxu, buď vědomě, nebo protože je distribuce přednastavuje:
$ 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'
Můžete také vytvořit aliasy pro Flatpaks:
alias emacs='flatpak run org.gnu.emacs'
Problém vyřešen!
Lepší interakce se skriptováním Bash
Netrvalo dlouho a proces ručního přidávání aliasů mi připadal příliš pracný. A pro mě to není úkol, ale proces. Otevření editoru a přidání aliasu je pozoruhodně rychlé, ale je to přerušení mého pracovního postupu.
To, co opravdu chci, je něco, co mohu duševně i fyzicky přidat k počátečnímu instalačnímu procesu Flatpak podle potřeby . Ne všechny Flatpaky, které instaluji, vyžadují alias. Například zde je částečný seznam Flatpaků v mém systému Silverblue:
$ 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
Nikdy nespustím Weather ani GNOME Calculator z terminálu. Nikdy také nespustím Signal z terminálu, protože je to aplikace, kterou otevřu na začátku dne a nikdy ji nezavřu.
Proto požadavky, které jsem si pro sebe definoval, jsou:
- Přidání aliasu podle potřeby
- Ovládání založené na terminálu, takže se pohodlně vejde na konec instalačního procesu Flatpak
- Dělá jednu věc a dělá ji dobře
- Přenosné přes Fedoru, RHEL, Slackware a jakoukoli jinou distribuci, kterou náhodou používám každý daný týden
Řešením, na které jsem se v poslední době rozhodl, je vlastní malý skript Bash, který používám k přidávání aliasů pro Flatpaky, ke kterým chci mít rychlý přístup ze svého terminálu. Zde je skript:
Zde se objevuje#!/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
Použití skriptu
Když nainstaluji Flatpak, u kterého očekávám, že se bude chtít spustit z terminálu, dokončím proces tímto skriptem:
$ 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
Pokud alias již existuje, bude objeven a žádný nový alias se nevytvoří.
Mohu také odstranit alias:
$ pakrat remove emacs
Toto neodstraní Flatpak a funguje pouze na vyhrazených flatpak_aliases
soubor.
Všechny aliasy Flatpak jsou přidány do ~/.bashrc.d/flatpak_aliases
, který můžete automaticky získat při spuštění vašeho shellu umístěním tohoto způsobu kódu do vašeho .bashrc
nebo .bash_profile
nebo .profile
soubor:
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
Snadné spuštění Flatpak
Flatpaks se opravdu dobře integrují s desktopovým Linuxem a mají za sebou silnou, reprodukovatelnou infrastrukturu. Jsou relativně snadné na stavbu a jejich použití je hračka. S trochou většího úsilí je můžete přenést do terminálu, abyste je mohli použít způsobem, který vám nejlépe vyhovuje. Pravděpodobně existuje několik dalších podobných projektů a pravděpodobně i několik ve vývoji, které jsou mnohem pokročilejší než jednoduchý Bash skript, ale tento mi zatím funguje dobře. Vyzkoušejte to nebo se o své vlastní řešení podělte v komentářích!