Das Anwendungsverteilungsmodell von Flatpak hilft Entwicklern dabei, Linux auf eine neue und einfache Weise auszurichten, und es hilft Linux-Benutzern, mehr Anwendungen zu installieren, ohne sich Gedanken darüber machen zu müssen, welche Linux-Version sie verwenden. Es ist eine aufregende Technologie und auf meinem Fedora Silverblue-System die Standardmethode für die Paketinstallation. Alle meine Desktop-Anwendungen auf Silverblue und einige meiner Favoriten, die ich auf Slackware verwende, laufen als Flatpaks.
Es gibt jedoch eine Sache, die Flatpak in einigen Fällen etwas umständlich macht, und das ist das Namensschema. Wenn ich beispielsweise Emacs als Flatpak installiere, wird es auf meinem System als . registriert org.gnu.emacs
. Dies geschieht anscheinend aus Angst, den Namen einer vorhandenen Anwendung auf Systemebene zu verfälschen – wenn ich Emacs bereits installiert habe, was ist dann der Unterschied? /usr/bin/emacs
und die Flatpak-Installation von Emacs? Aus diesem Grund wird ein Flatpak wie Emacs auf etwas wie diesem Pfad installiert:
/var/lib/flatpak/app/org.gnu.emacs/current/active//bin/org.gnu.emacs
Es ist nicht symbolisiert von /usr/bin
oder /opt
, wird der Standort nicht zum Pfad des Benutzers hinzugefügt, und zum Starten eines Flatpak ist ein Aufruf wie folgt erforderlich:
$ flatpak run org.gnu.emacs
Das ist viel Tippen im Vergleich zum bloßen Eingeben emacs
.
Namen sind schwer zu merken
Das Flatpak-Namensschema geht auch davon aus, dass Sie ein Flatpak oft genug verwenden, um sich den Reverse-DNS-Namen des Pakets zu merken. Abgesehen von der Struktur gibt es keinen Standard für die Benennung eines Flatpak, daher könnte ein Flatpak Kamel-Etui verwenden, wie z org.libreoffice.LibreOffice
, während ein anderer eine Mischung verwenden könnte, wie z org.gimp.GIMP
.
Manche Namen sind auch leichter zu merken als andere. Zum Beispiel, org.glimpse_editor.Glimpse
ist leicht zu merken nur wenn Sie sich erinnern, ist die Website https://glimpse-editor.org und nicht flüchtig.org, und ein Unterstrich ersetzt den Bindestrich.
Aus Sicht der Flatpak-Entwickler ist dies kein Problem, da Flatpaks vom Desktop aus gestartet werden sollen. Du musst dich nicht erinnern org.gnu.emacs
weil Sie es jederzeit über GNOME-Aktivitäten oder Ihr K-Menü oder ein ähnliches grafisches Startprogramm starten können.
Dies trifft oft genug zu, aber manchmal ist es bequemer, eine Anwendung von einem Terminal aus zu starten, da Sie das Terminal bereits verwenden. Egal, ob ich ein Bild in Glimpse oder eine Textdatei in Emacs oder eine Musikdatei in VLC haben möchte, ich bin sehr häufig im Terminal zu beschäftigt, um auf dem Desktop “herauszufallen” (obwohl es nur eine Taste entfernt ist!), Start Klicken Sie in der Anwendung durch die Menüs, um eine Datei zu öffnen, und klicken Sie dann durch mein Dateisystem, um die Datei zu finden, die ich öffnen möchte.
Es ist nur schneller, den Befehl gefolgt von der Datei einzugeben, die ich öffnen möchte. Aber wenn ich tippen muss flatpak run org.something.app
, ist es nicht.
Verwenden von Bash-Aliasnamen zum Starten eines Flatpak
Die offensichtliche Lösung für all dies ist ein Bash-Alias. Mit einem Bash-Alias können Sie fast jedem beliebigen Wort einen beliebigen Befehl zuweisen. Es gibt viele gängige Bash-Aliasnamen, die fast jeder Linux-Benutzer auf seinem System hat, entweder durch bewusste Wahl oder weil die Distribution sie voreinstellt:
$ 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'
Sie können auch Aliase für Flatpaks erstellen:
alias emacs='flatpak run org.gnu.emacs'
Problem gelöst!
Bessere Interaktion mit Bash-Skripting
Es dauerte nicht lange, bis mir das manuelle Hinzufügen von Aliasen zu mühsam vorkam. Und für mich ist es nicht die Aufgabe, sondern der Prozess. Das Öffnen eines Editors und das Hinzufügen eines Alias ist bemerkenswert schnell, aber es ist eine Unterbrechung in meinem Workflow.
Was ich wirklich will, ist etwas, das ich mental und physisch an den anfänglichen Flatpak-Installationsprozess anhängen kann wie benötigt. Nicht alle Flatpaks, die ich installiere, erfordern einen Alias. Hier ist zum Beispiel eine unvollständige Liste von Flatpaks auf meinem Silverblue-System:
$ 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
Ich werde den Wetter- oder GNOME-Rechner niemals vom Terminal aus starten. Ich werde Signal auch nie über das Terminal starten, da es eine Anwendung ist, die ich zu Beginn meines Tages öffne und nie schließe.
Daher habe ich für mich folgende Anforderungen definiert:
- Bei Bedarf Hinzufügen eines Alias
- Terminalbasierte Steuerung, sodass sie bequem am Ende meines Flatpak-Installationsprozesses passt
- Tut eins und tut es gut
- Portabel über Fedora, RHEL, Slackware und jede andere Distribution, die ich jede Woche verwende
Die Lösung, für die ich mich in letzter Zeit entschieden habe, ist ein benutzerdefiniertes kleines Bash-Skript, das ich verwende, um Aliase für Flatpaks hinzuzufügen, von denen ich weiß, dass ich schnell von meinem Terminal aus darauf zugreifen möchte. Hier ist das Skript:
#!/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
Verwenden des Skripts
flatpak-terminal-launch.png
Wenn ich ein Flatpak installiere, von dem ich erwarte, dass es vom Terminal aus gestartet werden soll, beende ich den Vorgang mit diesem Skript:
$ 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
Wenn ein Alias bereits vorhanden ist, wird er erkannt und kein neuer Alias erstellt.
Ich kann auch einen Alias entfernen:
$ pakrat remove emacs
Dadurch wird das Flatpak nicht entfernt und funktioniert nur auf dem dedizierten flatpak_aliases
Datei.
Alle Flatpak-Aliasnamen werden hinzugefügt ~/.bashrc.d/flatpak_aliases
, die Sie beim Start Ihrer Shell automatisch beziehen können, indem Sie diese Art von Code in Ihre .bashrc
oder .bash_profile
oder .profile
Datei:
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
Flatpak-Start leicht gemacht
Flatpaks lassen sich sehr gut in Desktop-Linux integrieren und verfügen über eine starke, reproduzierbare Infrastruktur. Sie sind relativ einfach zu bauen und ein Kinderspiel. Mit nur wenig zusätzlichem Aufwand können Sie sie in das Terminal laden, damit Sie sie so verwenden können, wie es für Sie am besten ist. Es gibt wahrscheinlich mehrere andere Projekte wie dieses und wahrscheinlich einige in der Entwicklung, die weit fortgeschrittener sind als ein einfaches Bash-Skript, aber dieses hat bisher gut für mich funktioniert. Probieren Sie es aus oder teilen Sie Ihre benutzerdefinierte Lösung in den Kommentaren!