Il modello di distribuzione delle applicazioni Flatpak sta aiutando gli sviluppatori a indirizzare Linux in un modo nuovo e semplice, e sta aiutando gli utenti Linux a installare più applicazioni senza preoccuparsi della versione di Linux in esecuzione. È una tecnologia entusiasmante e sul mio sistema Fedora Silverblue è il metodo di installazione del pacchetto predefinito. Tutte le mie applicazioni desktop su Silverblue e molte delle mie preferite che utilizzo su Slackware sono in esecuzione come Flatpak.
C'è una cosa che rende Flatpak un po' imbarazzante in alcuni casi, però, ed è il suo schema di denominazione. Ad esempio, quando installo Emacs come Flatpak, viene registrato sul mio sistema come org.gnu.emacs
. Questo viene fatto, a quanto pare, per paura di alterare il nome di un'applicazione a livello di sistema esistente:se ho già installato Emacs, qual è la differenziazione tra /usr/bin/emacs
e l'installazione Flatpak di Emacs? Per questo motivo, un Flatpak come Emacs viene installato in qualcosa come (preparatevi) questo percorso:
/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs
Non ha un collegamento simbolico da /usr/bin
o /opt
, la posizione non viene aggiunta al percorso dell'utente e l'avvio di un Flatpak richiede un'invocazione come questa:
$ flatpak run org.gnu.emacs
È un sacco di digitazione rispetto alla semplice immissione di emacs
.
I nomi sono difficili da ricordare
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Lo schema di denominazione Flatpak presuppone inoltre che utilizzi un Flatpak abbastanza spesso da ricordare il nome DNS inverso del pacchetto. A parte la struttura, non esiste uno standard per la denominazione di un Flatpak, quindi un Flatpak potrebbe utilizzare il caso del cammello, come org.libreoffice.LibreOffice
, mentre un altro potrebbe usare un mix, come org.gimp.GIMP
.
Alcuni nomi sono più facili da ricordare di altri. Ad esempio, org.glimpse_editor.Glimpse
è facile da ricordare solo se ricordi che il suo sito Web è http://glimpse-editor.org, anziché scorcio.org, e un trattino di sottolineatura sostituisce il trattino.
Dal punto di vista degli sviluppatori Flatpak, questo non è un problema perché i Flatpak devono essere avviati dal desktop. Non devi ricordare org.gnu.emacs
perché puoi sempre avviarlo dalle attività di GNOME o dal tuo menu K o da un lanciatore grafico simile.
Questo è vero abbastanza spesso, ma a volte è più conveniente avviare un'applicazione da un terminale perché stai già utilizzando il terminale. Sia che io voglia un'immagine in Glimpse o un file di testo in Emacs o un file musicale in VLC, molto spesso sono troppo occupato nel terminale per "rilasciare" il desktop (anche se è solo una chiave di distanza!), avvia nell'applicazione, fai clic sui menu per aprire un file, quindi fai clic sul mio filesystem per trovare il file che voglio aprire.
È solo più veloce digitare il comando seguito dal file che voglio aprire. Ma se devo digitare flatpak run org.something.app
, non lo è.
Utilizzo degli alias Bash per avviare un Flatpak
La soluzione ovvia a tutto questo è un alias Bash. Con un alias Bash, puoi assegnare qualsiasi comando arbitrario a quasi tutte le parole che desideri. Esistono molti alias Bash comuni che quasi tutti gli utenti Linux hanno sul proprio sistema, per scelta consapevole o perché la distribuzione li preimposta:
$ 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'
Puoi anche creare alias per Flatpak:
alias emacs='flatpak run org.gnu.emacs'
Problema risolto!
Migliore interazione con lo scripting Bash
Non ci è voluto molto perché il processo di aggiunta manuale degli alias mi sembrasse troppo laborioso. E per me, non è il compito ma il processo. Aprire un editor e aggiungere un alias è straordinariamente veloce, ma è un'interruzione nel mio flusso di lavoro.
Quello che voglio veramente è qualcosa che posso, mentalmente e fisicamente, aggiungere al processo di installazione iniziale di Flatpak se necessario . Non tutti i Flatpak che installo richiedono un alias. Ad esempio, ecco un elenco parziale di Flatpak sul mio sistema 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
Non avvierò mai Weather o GNOME Calculator dal terminale. Non avvierò nemmeno Signal dal terminale, perché è un'applicazione che apro all'inizio della mia giornata e non la chiudo mai.
Pertanto, i requisiti che mi sono definito sono:
- Aggiunta secondo necessità di un alias
- Controllo basato su terminale, quindi si adatta comodamente alla fine del mio processo di installazione di Flatpak
- Fa una cosa e la fa bene
- Portatile su Fedora, RHEL, Slackware e qualsiasi altra distribuzione che utilizzo in una determinata settimana
La soluzione su cui ho scelto di recente è un piccolo script Bash personalizzato che utilizzo per aggiungere alias per Flatpak a cui so di voler accedere rapidamente dal mio terminale. Ecco lo script:
#!/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
Utilizzo dello script
Quando installo un Flatpak che mi aspetto di voler avviare dal terminale, finisco il processo con questo script:
$ 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
Se esiste già un alias, viene rilevato e non viene creato alcun nuovo alias.
Posso rimuovere anche un alias:
$ pakrat remove emacs
Questo non rimuove il Flatpak e opera solo sui flatpak_aliases
dedicati file.
Tutti gli alias Flatpak vengono aggiunti a ~/.bashrc.d/flatpak_aliases
, che puoi ottenere automaticamente quando la tua shell viene avviata inserendo questo tipo di codice nel tuo .bashrc
o .bash_profile
o .profile
file:
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
Lancio di flatpak semplificato
I flatpak si integrano molto bene con Linux desktop e hanno alle spalle un'infrastruttura forte e riproducibile. Sono relativamente facili da costruire e un gioco da ragazzi da usare. Con solo un piccolo sforzo in più, puoi portarli giù nel terminale in modo da poterli usare nel modo che preferisci. Probabilmente ci sono molti altri progetti come questo là fuori e probabilmente alcuni in fase di sviluppo che sono molto più avanzati di un semplice script Bash, ma questo ha funzionato bene per me finora. Provalo o condividi la tua soluzione personalizzata nei commenti!