Das Flatpak-Anwendungsverteilungsmodell hilft Entwicklern, Linux auf eine neue und einfache Weise anzusprechen, 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 ist es die Standard-Paketinstallationsmethode. 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 sein Namensschema. Wenn ich beispielsweise Emacs als Flatpak installiere, wird es auf meinem System als org.gnu.emacs
registriert . Dies geschieht anscheinend aus Angst, den Namen einer bestehenden Anwendung auf Systemebene zu überschreiben – wenn ich Emacs bereits installiert habe, was ist dann der Unterschied zwischen /usr/bin/emacs
und die Flatpak-Installation von Emacs? Aus diesem Grund wird ein Flatpak wie Emacs in etwa (machen Sie sich darauf gefasst) in diesem Pfad installiert:
/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs
Es ist nicht von /usr/bin
symbolisch verlinkt oder /opt
, wird der Speicherort nicht zum Pfad des Benutzers hinzugefügt, und das Starten eines Flatpaks erfordert einen Aufruf wie diesen:
$ flatpak run org.gnu.emacs
Das ist viel Tipparbeit im Vergleich zur einfachen Eingabe von emacs
.
Namen sind schwer zu merken
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Das Flatpak-Benennungsschema 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 Flatpaks, daher könnte ein Flatpak Camel-Case verwenden, wie z. B. org.libreoffice.LibreOffice
, während ein anderer möglicherweise eine Mischung verwendet, z. B. org.gimp.GIMP
.
Einige Namen sind auch leichter zu merken als andere. Beispiel:org.glimpse_editor.Glimpse
ist nur leicht zu merken wenn Sie sich erinnern, ist die Website http://glimpse-editor.org und nicht blick.org, und ein Unterstrich ersetzt den Bindestrich.
Aus Sicht der Flatpak-Entwickler ist dies kein Problem, da Flatpaks vom Desktop aus gestartet werden sollen. Sie müssen sich org.gnu.emacs
nicht merken weil Sie es jederzeit über GNOME-Aktivitäten oder Ihr K-Menü oder einen ähnlichen grafischen Starter starten können.
Das trifft oft genug zu, aber manchmal ist es bequemer, eine Anwendung von einem Terminal aus zu starten, weil 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 im Terminal sehr häufig zu beschäftigt, um auf den Desktop zu "fallen" (obwohl es nur eine Taste entfernt ist!), Start Klicken Sie sich 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 flatpak run org.something.app
eingeben muss , ist es nicht.
Bash-Aliase verwenden, um ein Flatpak zu starten
Die offensichtliche Lösung für all dies ist ein Bash-Alias. Mit einem Bash-Alias können Sie jedem beliebigen Wort jeden beliebigen Befehl zuweisen. Es gibt viele gebräuchliche Bash-Aliase, die fast jeder Linux-Benutzer auf seinem System hat, entweder durch bewusste Wahl oder weil die Distribution sie voreingestellt hat:
$ 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-Scripting
Es dauerte nicht lange, bis mir das manuelle Hinzufügen von Aliasnamen zu mühsam erschien. Und für mich ist es nicht die Aufgabe, sondern der Prozess. Das Öffnen eines Editors und das Hinzufügen eines Alias geht bemerkenswert schnell, aber es unterbricht meinen Arbeitsablauf.
Was ich wirklich will, ist etwas, das ich mental und physisch an den anfänglichen Flatpak-Installationsprozess nach Bedarf anhängen kann . Nicht alle Flatpaks, die ich installiere, benötigen 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 Weather oder GNOME Calculator niemals vom Terminal aus starten. Ich werde Signal auch nie vom Terminal aus 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:
- Hinzufügen eines Alias nach Bedarf
- Terminalbasierte Steuerung, passt also bequem am Ende meines Flatpak-Installationsprozesses
- Macht eine Sache und macht es gut
- Portabel über Fedora, RHEL, Slackware und jede andere Distribution, die ich zufällig 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, auf die ich von meinem Terminal aus schnell 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
Das Skript verwenden
Wenn ich ein Flatpak installiere, das ich voraussichtlich vom Terminal starten möchte, 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
Dies entfernt das Flatpak nicht und arbeitet nur mit den dedizierten flatpak_aliases
Datei.
Alle Flatpak-Aliase werden zu ~/.bashrc.d/flatpak_aliases
hinzugefügt , die Sie automatisch beziehen können, wenn Ihre Shell gestartet wird, indem Sie diese Art von Code in Ihre .bashrc
einfügen 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-Einführung leicht gemacht
Flatpaks lassen sich sehr gut in Desktop-Linux integrieren und haben eine starke, reproduzierbare Infrastruktur hinter sich. Sie sind relativ einfach zu bauen und kinderleicht zu bedienen. Mit nur wenig zusätzlichem Aufwand können Sie sie in das Terminal bringen, damit Sie sie so verwenden können, wie es für Sie am besten geeignet ist. Es gibt wahrscheinlich mehrere andere Projekte wie dieses da draußen und wahrscheinlich ein paar in der Entwicklung, die weit fortgeschrittener sind als ein einfaches Bash-Skript, aber dieses hier hat bisher gut für mich funktioniert. Probieren Sie es aus oder teilen Sie Ihre benutzerdefinierte Lösung in den Kommentaren!