NAS

Flatpak Programme - Terminal Alias automatisiert erstellen

Alexander2

Fleet Admiral
Registriert
Aug. 2014
Beiträge
16.840

Flatpak Programme haben ungelenke Namen für das Terminal​

Als Einleitung warum überhaupt.​

Ich habe bei mir ein Fedora Atomic installiert, die Variante Kionite. Daher ist es so, das ich sehr stark auf Flatpaks setze und das funktioniert auch ganz wunderbar. Zumindest bei meinem Rechner ist auch kein Nachteil in sachen Performance oder so zu bemerken. Ein paar wenige Programme habe ich dann wegen der Kompatibilität mit anderen oder wegen Hardwarezugriff als Native Systempakete installiert wenn man so will, das nur nebenbei.
Als Beispiel das Programm Kate (ein Texteditor - kennen wohl die meisten Linux Nutzer) wollte ich nun schon mehrmals im Terminal zum Öffnen von Dateien nehmen.

Der Punkt​

Was mich jetzt schon öfters gestört hatte ist das weil es als ein Flatpak installiert ist kann ich im Terminal nicht einfach
Code:
kate meinetextdatei.txt
zum aufrufen benutzen, sondern müsste folgendes eingeben:
Bash:
flatpak run org.kde.kate meinetextdatei.txt
so etwas gibt doch in der Konsole kein normaler Mensch ein!
Daher nun der versuch einmal die KI mir was basteln zu lassen und mal sehen was dabei herauskommt.

In kurz habe ich die KI aufgefordert mir eine Liste in lowercase (erst durch die Ergänzung) Aliasen für das Terminal zu erstellen. Bzw. besser gesagt ein Script dafür die Liste zu erstellen.

Das Ergebnis​

funktionierte auf Anhieb nach der Eingangsfrage und enthielt sogar mehr als direkt gefragt war. Eine Einbindung in die bashrc oder zshrc wurde gleich mit angeboten (einmalig manuell auszuführen).

Ich habe mir das Script der KI angesehen und danach getestet und es funktioniert einwandfrei. Wenn sich die als Flatpak installierten Programme ändern muss man selbstständig das Script noch einmal ausführen, wenn man denn wollte um die Alias Liste zu erneuern.

Nicht berücksichtigt werden evtl. Probleme mit bereits vorhandenen Programmen selben Namens, da muss man selber drauf achten (Das Problem habe ich nicht. Bisher jedenfalls)
Es werden (sogar von der KI selbstständig so gewählt) nur Programme und keine Laufzeiten etc. als Alias abgefragt.

Script/Datei​

Angefügt ne Open Document Textdatei mit den Ausgaben der KI
und hier direkt das lowercase Ergebnis als Codeblock, falls das evtl. noch jemand nützlich findet. (Bitte selber gegenchecken und nicht Blind vertrauen, ich hafte nicht für Fehler oder ähnlichem, alles auf eigene Verantwortung und Risiko.

Bash:
#!/bin/bash

# Überprüfe, ob Flatpak installiert ist
if ! command -v flatpak &> /dev/null; then
    echo "Fehler: Flatpak ist nicht installiert. Bitte installiere Flatpak zuerst."
    exit 1
fi

# Erstelle eine temporäre Datei für die Aliase
ALIAS_FILE="$HOME/.flatpak_aliases"

# Leere die Datei, falls sie bereits existiert
> "$ALIAS_FILE"

# Hole alle installierten Flatpak-Programme
flatpak_list=$(flatpak list --app --columns=application)

# Verarbeite jedes Flatpak-Programm
while read -r line; do
    # Extrahiere die Anwendungs-ID (z. B. "org.kde.kate")
    app_id=$(echo "$line" | awk '{print $1}')

    # Extrahiere den einfachen Namen (z. B. "kate" aus "org.kde.kate") und konvertiere ihn in lowercase
    simple_name=$(echo "$app_id" | awk -F. '{print tolower($NF)}')

    # Erstelle den Alias-Eintrag (z. B. "alias kate='flatpak run org.kde.kate'")
    echo "alias $simple_name='flatpak run $app_id'" >> "$ALIAS_FILE"

    echo "Alias für $app_id erstellt: $simple_name"
done <<< "$flatpak_list"

echo ""
echo "Aliase wurden in $ALIAS_FILE gespeichert."
echo "Füge die folgenden Zeilen in deine ~/.bashrc oder ~/.zshrc ein, um die Aliase zu aktivieren:"
echo ""
echo "# Flatpak Aliase"
echo "if [ -f \"$ALIAS_FILE\" ]; then"
echo "    source \"$ALIAS_FILE\""
echo "fi"
echo ""
echo "Danach starte ein neues Terminal oder führe 'source ~/.bashrc' (oder ~/.zshrc) aus."

ACHTUNG

In Zeile 13 - wird potenziell eine Datei überschrieben mit dem selben Namen ohne Inhalt. Dazu ist in Zeile 10 angegeben welche Datei das wäre.
In Zeile 27 - wird in genau die Datei Text ergänzt, also hineingeschrieben.
 

Anhänge

  • Gefällt mir
Reaktionen: Deinorius, madmax2010 und CountSero
Was ist wenn es mehrere Befehle gibt? Siehe

Code:
/var/lib/flatpak/exports/bin/
. Dort dann per profile.d / .bashrc /etc jedesmal per Loop durch. Wäre das nicht geschickter?

btw flatpak sind doch eh primär GUI Programme..?
 
Ein Beispiel habe ich ja genannt, auch wenn ich gerade im terminal bin kommt es vor, das ich eine Datei dann doch gerne im Grafischen Kate öffne.

Selbstverständlich kommt das eher seltener für sagen wir mal Wootility vor oder so :D
Wie es ist, wenn du jetzt satgen wir mal im Krunner kate und dann ein Pfad zu einer Textdatei eingibst .. bekommt der Krunner das dann ohne Alias noch hin sortiert, das er das Kate aus dem Flatpak öffnen soll mit der Datei als Parameter?

Das wäre auch noch so eine stelle, wo ich mir so ein Problem vorstellen könnte.

Aber so oder so, wenn man nie auf das Problem, die Unbequemlichkeit gestoßen ist, dann ist ja auch alles gut :-)

Jetzt noch das zu den mehreren Befehlen, da stehe ich irgendwie auf dem Schlauch. Das jetzige Script macht initial jedenfalls per Flatpak abfrage
Code:
flatpak_list=$(flatpak list --app --columns=application)
Also eine Abfrage, Liste Fertig.

der Loop rattert diese Liste dann Zeile für Zeile durch. für jede Zeile wird nurnoch nach auswerten jeweils einmal die SSD bemüht in die festgelegte Datei die neue Zeile anzuhängen.

Ach so, meinst du das bei jedem Rechner start dann eben jedes mal wenn die Bashrc oder andere, wenn andere benutzt wird das ganze automatisch ausgewertet wird..
Könnte man auch machen. würde aber auch mehr Rechenaufwand und Belastung bei Jedem start bedeuten. ich ändere nicht zu jedem Start was ich an Flatpak installiert habe. Könnte natürlich für andere interessant sein.

Edit:
Noch praktischer fände ich dann doch, wenn Flatpak nen hook hätte, wo man ein script wie dieses eintragen kann.
 
Alexander2 schrieb:

ACHTUNG

In Zeile 13 - wird potenziell eine Datei überschrieben mit dem selben Namen ohne Inhalt. Dazu ist in Zeile 10 angegeben welche Datei das wäre.
In Zeile 27 - wird in genau die Datei Text ergänzt, also hineingeschrieben.

Bash:
#!/bin/bash

# Überprüfe, ob Flatpak installiert ist
if ! command -v flatpak &> /dev/null; then
    echo "Fehler: Flatpak ist nicht installiert. Bitte installiere Flatpak zuerst."
    exit 1
fi

# Datei für die Aliase
ALIAS_FILE="$HOME/.flatpak_aliases"

# Prüfe, ob die Alias-Datei bereits existiert
if [ -e "$ALIAS_FILE" ]; then
    echo "Die Datei $ALIAS_FILE existiert bereits."
    read -rp "Überschreiben, anhängen, bearbeiten oder abbrechen? [o/a/e/c]: " choice

    case "${choice,,}" in
        o)
            > "$ALIAS_FILE"
            echo "Datei wird überschrieben."
            ;;
        a)
            echo "" >> "$ALIAS_FILE"
            echo "# Flatpak Aliase - hinzugefügt am $(date '+%Y-%m-%d %H:%M:%S')" >> "$ALIAS_FILE"
            echo "Neue Aliase werden angehängt."
            ;;
        e)
            "${EDITOR:-nano}" "$ALIAS_FILE"
            exit 0
            ;;
        c|*)
            echo "Abgebrochen. Keine Änderungen vorgenommen."
            exit 0
            ;;
    esac
else
    touch "$ALIAS_FILE"
fi

# Hole alle installierten Flatpak-Programme
flatpak_list=$(flatpak list --app --columns=application)

# Verarbeite jedes Flatpak-Programm
while read -r line; do
    [ -z "$line" ] && continue

    app_id=$(echo "$line" | awk '{print $1}')
    simple_name=$(echo "$app_id" | awk -F. '{print tolower($NF)}')

    if grep -qE "^alias ${simple_name}=" "$ALIAS_FILE"; then
        echo "Alias für $simple_name existiert bereits, überspringe."
    else
        echo "alias $simple_name='flatpak run $app_id'" >> "$ALIAS_FILE"
        echo "Alias für $app_id erstellt: $simple_name"
    fi
done <<< "$flatpak_list"

echo ""
echo "Aliase wurden in $ALIAS_FILE gespeichert."
echo "Füge die folgenden Zeilen in deine ~/.bashrc oder ~/.zshrc ein, um die Aliase zu aktivieren:"
echo ""
echo "# Flatpak Aliase"
echo "if [ -f \"$ALIAS_FILE\" ]; then"
echo "    source \"$ALIAS_FILE\""
echo "fi"
echo ""
echo "Danach starte ein neues Terminal oder führe 'source ~/.bashrc' oder 'source ~/.zshrc' aus."

einfach user fragen ob uebrschreiben, edit von hand, nur append oder doch lieber nichts passieren soll
dedup fuer append ist auch drin :)
 
  • Gefällt mir
Reaktionen: Alexander2
Einfacher und schneller:
Code:
flatpak list --app --columns=application | awk -F. 'NF > 1 { print ("alias " tolower ($NF)) "=flatpack run " $0 }'
Ansonsten ist es immer schlauer den Output davon in ein tempfile zu schreiben und erst wenn das erfolgreich war dann einen mv auf das echte Ziel zu machen.

Und man sollte nicht auch direkt ins .profile schreiben sondern dort ein weiteres File sourcen was man einfach komplett neu erstellt bzw. überschreibt. Dann verschwinden auch aliase von gelöschten flatpacks.

So viel zur auch so tollen KI.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Deinorius und sariash
@foofoobar Was du zur AI schreibst ist mir ja egal.
Aber du hast dir ja nichtmal das script wirklich angeschaut. Ist ok.

Ich lade dich ein dich noch etwas mehr über AI auszulassen. Schreib das schlimmste das dir einfällt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: sedot, madmax2010 und sariash
Ohne jetzt dein „eigenes“ AI Projekt diskreditieren zu wollen, das ist ein schon länger gelöstes Problem mit unterschiedlichen Wegen zum Ziel.

Davon ab, bash strict mode und shellcheck würde ich (als künftige zusätzliche Werkzeuge) empfehlen.
 
Du darfst ja auch gerne die Projekte die das Problem lösen nennen die dir vorschweben. noch ist mir keines bekannt.
Aliase setzen ist halt simpel.
 
  • Gefällt mir
Reaktionen: Snakeeater
  • Gefällt mir
Reaktionen: Alexander2
Ich verstehe das Problem, ich verstehe keine der Lösungen. Warum startet ihr alle eure Flatpaks über das Terminal?

Und keine der Lösungen hilft eben dabei wenn man sie nicht über das Terminal startet will? (hab die Links aber nur überflogen)
 
@Snakeeater Basically was du machst ist halt Trollen. Das du den usecase nicht hast ist ja ok, den anderen abzusprechen ist einfach komplett Überflüssig.

Danke @sedot für die Infos. (Hab schon das ein oder andere Shellscript selber geschrieben, nur gerade daran kein interresse. :-)
Aber als nachschlagequelle für den Lerneffekt kann ich das Wikipedia books Linux Shellkompendium empfehlen. Viel auf einem Punkt. Nurmal so, da das Thema Lernen aufkam.
https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Shellprogrammierung

Edit:
https://codeberg.org/zoickx/flatalias
Scheint zu sein, was zu meinen Anforderungen passt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: sedot
Sorry das war nicht meine Absicht, evtl. habe ich den Use-Case auch missverstanden. Da ich das Problem kenne das man bspw. Flatpaks nicht immer einfach über nicht-Terminal Apps starten kann solange kein .desktop file angelegt ist.

Aber wenn es tatsächlich darum geht regelmäßig manuell flatpaks im Terminal zu starten dann habe ich das Problem missverstanden. Tut mir leid.
 
  • Gefällt mir
Reaktionen: Alexander2
Und hier noch der alias für das erstellen der aliase: (Manchmal hat man keinen Bock auf korrektes quouting)
Code:
alias fp=$(echo -n -e \\x65\\x76\\x61\\x6c\\x20\\x24\\x28\\x66\\x6c\\x61\\x74\\x70\\x61\\x6b\\x20\\x6c\\x69\\x73\\x74\\x20\\x2d\\x2d\\x61\\x70\\x70\\x20\\x2d\\x2d\\x63\\x6f\\x6c\\x75\\x6d\\x6e\\x73\\x3d\\x61\\x70\\x70\\x6c\\x69\\x63\\x61\\x74\\x69\\x6f\\x6e\\x20\\x7c\\x20\\x61\\x77\\x6b\\x20\\x2d\\x46\\x2e\\x20\\x27\\x4e\\x46\\x20\\x3e\\x20\\x31\\x20\\x7b\\x20\\x70\\x72\\x69\\x6e\\x74\\x20\\x28\\x22\\x61\\x6c\\x69\\x61\\x73\\x20\\x22\\x20\\x74\\x6f\\x6c\\x6f\\x77\\x65\\x72\\x20\\x28\\x24\\x4e\\x46\\x29\\x29\\x20\\x22\\x3d\\x5c\\x22\\x66\\x6c\\x61\\x74\\x70\\x61\\x6b\\x20\\x72\\x75\\x6e\\x20\\x22\\x20\\x24\\x30\\x20\\x22\\x5c\\x22\\x3b\\x22\\x20\\x7d\\x27\\x29)
Beispiel:
Code:
$ unalias fp avidemux
$ alias fp=$(echo -n -e \\x65\\x76\\x61\\x6c\\x20\\x24\\x28\\x66\\x6c\\x61\\x74\\x70\\x61\\x6b\\x20\\x6c\\x69\\x73\\x74\\x20\\x2d\\x2d\\x61\\x70\\x70\\x20\\x2d\\x2d\\x63\\x6f\\x6c\\x75\\x6d\\x6e\\x73\\x3d\\x61\\x70\\x70\\x6c\\x69\\x63\\x61\\x74\\x69\\x6f\\x6e\\x20\\x7c\\x20\\x61\\x77\\x6b\\x20\\x2d\\x46\\x2e\\x20\\x27\\x4e\\x46\\x20\\x3e\\x20\\x31\\x20\\x7b\\x20\\x70\\x72\\x69\\x6e\\x74\\x20\\x28\\x22\\x61\\x6c\\x69\\x61\\x73\\x20\\x22\\x20\\x74\\x6f\\x6c\\x6f\\x77\\x65\\x72\\x20\\x28\\x24\\x4e\\x46\\x29\\x29\\x20\\x22\\x3d\\x5c\\x22\\x66\\x6c\\x61\\x74\\x70\\x61\\x6b\\x20\\x72\\x75\\x6e\\x20\\x22\\x20\\x24\\x30\\x20\\x22\\x5c\\x22\\x3b\\x22\\x20\\x7d\\x27\\x29)
$ fp
$ alias fp avidemux
alias fp='eval $(flatpak list --app --columns=application | awk -F. '\''NF > 1 { print ("alias " tolower ($NF)) "=\"flatpak run " $0 "\";" }'\'')'
alias avidemux='flatpak run org.avidemux.Avidemux'
$
Hex-Erzeugung: (Um zu verhindern das irgendwelche Shells daran fummeln)
Code:
$ od -t x1 -w200000 /tmp/rummel | sed '1,$s/^[0-9]*//' | sed '1,$s/ /\\\\x/g'
 
Zuletzt bearbeitet:
Nun, du darfst gerne weitermachen. Aber ich möchte zumindest erwähnen, das das was du schreibt an mir vorbeigeht.

Aber vielleicht kann das jemand anderes gebrauchen, auch wenn mir das nicht nützlich erscheint. Mit dem Satz
foofoobar schrieb:
der alias für das erstellen der aliase
scheint mir das du willst dich darüber lächerlich machen, aber das mag nur sein, das ich den falschen eindruck gewinne, schon auch weil es an mir vorbeigeht.
 
Alexander2 schrieb:
Nun, du darfst gerne weitermachen. Aber ich möchte zumindest erwähnen, das das was du schreibt an mir vorbeigeht.
Wenn du nichts lernen willst ist das deine Entscheidung.
Das solltest du aber nicht auf den Rest der Menschheit verallgemeinern.
Alexander2 schrieb:
scheint mir das du willst dich darüber lächerlich machen, aber das mag nur sein, das ich den falschen eindruck gewinne, schon auch weil es an mir vorbeigeht.
Schau dir einfach das Beispiel an, damit sollte die Anwendung klar werden.
 
  • Gefällt mir
Reaktionen: JumpingCat
Wenn das einem was beibringen soll fehlt noch eine Erläuterung. Statt nur Zeilen hinklatschen. Der Thread ging aber auch nicht ums lernen, auch wenn das nicht schadet.

Also Erläuterungen wären wirklich hilfreich für alle die davon etwas lernen wollen.
 
Gar nicht mal so schlecht: (Das "NF > 1" wurde allerdings unterschlagen)

Dieser Befehl erstellt einen Alias namens fp, der im Hintergrund eine Kette von Befehlen versteckt (mittels Hexadezimal-Codierung). Wenn du fp im Terminal ausführst, generiert er automatisch Kurzbeefehle (Aliase) für alle deine installierten Flatpak-Anwendungen.

Hier ist die genaue Aufschlüsselung, was da passiert:

### 1. Die Entschlüsselung (Hex-Code)

Der Teil mit \x65\x76\x61\x6c... ist einfach nur Text, der in Hexadezimalzeichen umgewandelt wurde, um auf den ersten Blick unleserlich zu sein. Wenn man diesen String decodiert, kommt folgendes heraus:

Bash:
eval $(flatpak list --app --columns=application | awk -F. 'NF > 1 { print ("alias " tolower ($NF)) "="\"flatpak run " $0 "\";" }')

### 2. Was macht der decodierte Befehl?

Wenn du fp eintippst, führt die Shell diesen decodierten Befehl aus. Das passiert Schritt für Schritt:

  • flatpak list --app --columns=application: Listet die App-IDs aller installierten Flatpaks auf (z. B. org.gimp.GIMP oder com.spotify.Client).
  • awk -F. '...': Dieser Teil nimmt die IDs, trennt sie an den Punkten (.) auf und nimmt das letzte Wort (also GIMP oder Client).
  • Generierung der Aliase: Daraus baut das Skript einen neuen Alias-Befehl in Kleinbuchstaben. Für Spotify würde es zum Beispiel den Text alias spotify="flatpak run com.spotify.Client"; erzeugen.
  • eval $(...): Das eval sorgt schließlich dafür, dass diese dynamisch erzeugten Texte direkt von deiner Shell als echte Befehle ausgeführt und registriert werden.

---

### Fazit

Kurz gesagt: Der Befehl sorgt dafür, dass du deine installierten Flatpaks danach ganz einfach über ihren Namen in Kleinbuchstaben (z. B. einfach gimp oder spotify) im Terminal starten kannst, anstatt den langen Befehl flatpak run org.gimp.GIMP eintippen zu müssen.
 
  • Gefällt mir
Reaktionen: Deinorius, JumpingCat und Alexander2
Zurück
Oben