Advertisements

Starten Sie Flatpaks von Ihrem Linux-Terminal aus

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

Weitere Linux-Ressourcen

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!

Starten Sie Flatpaks von Ihrem Linux-Terminal aus

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top