GNU/Linux >> Tutoriales Linux >  >> Linux

Inicie Flatpaks desde su terminal Linux

El modelo de distribución de aplicaciones de Flatpak está ayudando a los desarrolladores a enfocarse en Linux de una manera nueva y fácil, y está ayudando a los usuarios de Linux a instalar más aplicaciones sin preocuparse por la versión de Linux que están ejecutando. Es una tecnología fascinante y, en mi sistema Fedora Silverblue, es el método de instalación de paquetes predeterminado. Todas mis aplicaciones de escritorio en Silverblue y varias de mis aplicaciones favoritas que uso en Slackware se ejecutan como Flatpaks.

Sin embargo, hay una cosa que hace que Flatpak sea un poco incómodo en algunos casos, y ese es su esquema de nombres. Por ejemplo, cuando instalo Emacs como Flatpak, está registrado en mi sistema como org.gnu.emacs . Aparentemente, esto se hace por temor a machacar el nombre de una aplicación de nivel de sistema existente; si ya tengo Emacs instalado, ¿cuál es la diferencia entre /usr/bin/emacs y la instalación Flatpak de Emacs? Por esta razón, un Flatpak como Emacs se instala en algo como (prepárate para ello) esta ruta:

/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs

No está enlazado desde /usr/bin o /opt , la ubicación no se agrega a la ruta del usuario y el lanzamiento de Flatpak requiere una invocación como esta:

$ flatpak run org.gnu.emacs

Eso es mucho escribir en comparación con solo ingresar emacs .

Los nombres son difíciles de recordar

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

El esquema de nomenclatura de Flatpak también asume que usa un Flatpak con la frecuencia suficiente para recordar el nombre DNS inverso del paquete. Aparte de la estructura, no existe un estándar para nombrar un Flatpak, por lo que un Flatpak podría usar camel-case, como org.libreoffice.LibreOffice , mientras que otro podría usar una combinación, como org.gimp.GIMP .

Algunos nombres también son más fáciles de recordar que otros. Por ejemplo, org.glimpse_editor.Glimpse es fácil de recordar solo si recuerda que su sitio web es http://glimpse-editor.org, en lugar de vislumbre.org, y un guión bajo reemplaza el guión.

Desde el punto de vista de los desarrolladores de Flatpak, esto no es un problema porque los Flatpaks están destinados a ejecutarse desde el escritorio. No tienes que recordar org.gnu.emacs porque siempre puede iniciarlo desde Actividades de GNOME o su K-Menu o un iniciador gráfico similar.

Esto es cierto con bastante frecuencia, pero a veces es más conveniente iniciar una aplicación desde una terminal porque ya está usando la terminal. Ya sea que desee una imagen en Glimpse o un archivo de texto en Emacs o un archivo de música en VLC, con frecuencia estoy demasiado ocupado en la terminal para "caer" en el escritorio (¡aunque solo esté a una tecla de distancia!), inicie la aplicación, haga clic en los menús para abrir un archivo y luego haga clic en mi sistema de archivos para encontrar el archivo que quiero abrir.

Simplemente es más rápido escribir el comando seguido del archivo que quiero abrir. Pero si tengo que escribir flatpak run org.something.app , no lo es.

Uso de alias de Bash para lanzar un Flatpak

La solución obvia a todo esto es un alias de Bash. Con un alias de Bash, puede asignar cualquier comando arbitrario a casi cualquier palabra que desee. Hay muchos alias comunes de Bash que casi todos los usuarios de Linux tienen en su sistema, ya sea por elección consciente o porque la distribución los preestablece:

$ 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'

También puede crear alias para Flatpaks:

alias emacs='flatpak run org.gnu.emacs'

¡Problema resuelto!

Mejor interacción con Bash scripting

No pasó mucho tiempo para que el proceso de agregar alias manualmente me pareciera demasiado laborioso. Y para mí, no es la tarea sino el proceso. Abrir un editor y agregar un alias es muy rápido, pero es una interrupción en mi flujo de trabajo.

Lo que realmente quiero es algo que pueda, mental y físicamente, agregar al proceso de instalación inicial de Flatpak según sea necesario . No todos los Flatpaks que instalo requieren un alias. Por ejemplo, aquí hay una lista parcial de Flatpaks en mi 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

Nunca iniciaré Weather o GNOME Calculator desde la terminal. Nunca ejecutaré Signal desde el terminal tampoco, porque es una aplicación que abro al comienzo de mi día y nunca cierro.

Por lo tanto, los requisitos que definí para mí son:

  • Adición de un alias según sea necesario
  • Control basado en terminal, por lo que encaja cómodamente al final de mi proceso de instalación de Flatpak
  • Hace una cosa y la hace bien
  • Portátil en Fedora, RHEL, Slackware y cualquier otra distribución que esté usando en una semana determinada

La solución que he elegido últimamente es un pequeño script Bash personalizado que uso para agregar alias para Flatpaks a los que sé que quiero acceder rápidamente desde mi terminal. Aquí está el guión:

#!/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

Usando el script

Cuando instalo un Flatpak que espero querer iniciar desde la terminal, termino el proceso con este 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

Si ya existe un alias, se descubre y no se crea ningún alias nuevo.

También puedo eliminar un alias:

$ pakrat remove emacs

Esto no elimina el Flatpak y solo funciona en los flatpak_aliases dedicados. archivo.

Todos los alias de Flatpak se agregan a ~/.bashrc.d/flatpak_aliases , que puede generar automáticamente cuando se inicia su shell colocando este tipo de código en su .bashrc o .bash_profile o .profile archivo:

if [ -d ~/.bashrc.d ]; then
  for rc in ~/.bashrc.d/*; do
    if [ -f "$rc" ]; then
      . "$rc"
    fi
  done
fi

unset rc

Lanzamiento de Flatpak simplificado

Flatpaks se integran muy bien con Linux de escritorio y tienen una infraestructura fuerte y reproducible detrás de ellos. Son relativamente fáciles de construir y fáciles de usar. Con solo un pequeño esfuerzo adicional, puede bajarlos a la terminal para que pueda usarlos de la manera que mejor le convenga. Probablemente hay varios otros proyectos como este y probablemente algunos en desarrollo que son mucho más avanzados que un simple script Bash, pero este me ha funcionado bien hasta ahora. ¡Pruébelo o comparta su solución personalizada en los comentarios!


Linux
  1. ¿Cuál es tu truco de terminal Linux favorito?

  2. Cómo cambiar el color de tu terminal Linux

  3. ¿Cuál es tu emulador de terminal de Linux favorito?

  4. Embárcate en una aventura en tu terminal Linux

  5. ¿Cuál es tu truco de terminal Linux favorito?

5 formas de dividir tu terminal Linux

Relájate junto al fuego en tu terminal Linux

Serpentea tu camino a través de tu terminal Linux

Juega Tetris en tu terminal Linux

Conduce una locomotora a través de tu terminal Linux

Cómo grabar su sesión de terminal en Linux