Esta es, en mi opinión, la mejor manera de instalar aplicaciones web si usas un navegador basado en Chromium en Linux

Aplicaciones web gracias a Bash

Hace unos días publicamos un artículo en el que comparábamos tres maneras diferentes de usar aplicaciones web. Por un lado, desde el navegador tal cual; por otro, instalando la aplicación y usándola en una ventana separada; y por último haciendo uso de Webapp Manager, lo que creo que es lo mejor con diferencia. Hoy os traigo una opción diferente, una que se basa en parte en la XApp de Linux Mint.

Las aplicaciones instaladas desde el navegador pesan un poco más que lo que crea Webapps Manager. Tienen una ventaja, y es que se puede acceder a las extensiones fácilmente y funcionan todas, como por ejemplo un ecualizador que yo no he hecho funcionar -tampoco he buscado mucho- en las aplicaciones 100% separadas. Pero, por lo general, lo que crea Webapps Manager está a un nivel superior. Lo que pasa es que, por lo menos para los navegadores basados en Chromium más populares, lo único que hace es crear un archivo .desktop con una orden que le dice al navegador que lance una aplicación en un perfil aislado. Conseguir eso es lo que vamos a explicar hoy aquí.

ACTUALIZADO: Se agregó soporte para aplicaciones con base Firefox, aunque puede que no se vea el icono en la barra superior y para eliminar el perfil por completo hay que hacerlo desde about:config.

Aplicaciones web en perfil aislado y sin instalar nada

Lo malo de la aplicación de Linux Mint, por ponerle algún pero, es que instala el software principal y algunos módulos de Python extra. Es peccata minuta para el que usa muchas aplicaciones web y además quiere elegir el navegador base, pero si nos es suficiente con Chrome, Brave, Vivaldi o Edge, todo lo que instalemos está de más.

Como decíamos, el secreto está en examinar qué hacen esas aplicaciones, analizar el archivo .desktop y crear uno parecido. Esto, que se puede hacer manualmente a partir del primer archivo que nos crea Webapp Manager, copiando y editando lo necesario, podemos automatizarlo usando Bash. El código sería el siguiente:

#!/bin/bash
echo "SSBash

¿Qué quieres hacer?
1. Crear aplicación web
2. Eliminar app existente
3. Salir"
read opcion
if [ "$opcion" == "1" ]; then
    echo "Nombre de la aplicación:"
    read nombre_app
    id_app=$(echo "$nombre_app" | tr -d ' ')
    echo "Comentario:"
    read comentario
    echo "Categoría":
    read categoria
    echo "URL de la aplicación web (sin https/http):"
    read url
    echo "Ruta al icono de la app":
    read icono
    nombre_imagen=$(basename "$icono")
    echo "Navegador: 
     1. Firefox 
     2. Chrome 
     3. Chromium
     4. Brave
     5. Edge
     6. Vivaldi
     7. Firefox (flatpak)
     8. Chrome (flatpak)
     9. Chromium (flatpak)
    10. Brave (flatpak)
    11. Edge (flatpak)
    12. Vivaldi (flatpak)
    13. ungoogled-chromium (flatpak)"
    read navegador_elegido

    case $navegador_elegido in
        1) navegador="Firefox" && ejecutable="sh -c 'firefox --class WebApp-$id_app --name WebApp-$id_app --profile $HOME/.config/SSBash/$navegador-$id_app --no-remote \"https://$url\"'" && firefox -CreateProfile "$navegador-$id_app $HOME/.config/SSBash/$navegador-$id_app";;
        2) navegador="Chrome" && ejecutable="google-chrome-stable --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        3) navegador="Chromium" && ejecutable="chromium --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        4) navegador="Brave" && ejecutable="brave --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        5) navegador="Edge" && ejecutable="microsoft-edge --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        6) navegador="Vivaldi" && ejecutable="vivaldi-stable --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        7) navegador="Firefox-flatpak" && ejecutable="sh -c 'flatpak run org.mozilla.firefox --class WebApp-$id_app --name WebApp-$id_app --profile $HOME/.config/SSBash/$navegador-$id_app --no-remote \"https://$url\"'" && firefox -CreateProfile "$navegador-$id_app $HOME/.config/SSBash/$navegador-$id_app";;
        8) navegador="Chrome-flatpak" && ejecutable="flatpak run com.google.Chrome --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        9) navegador="Chromium-flatpak" && ejecutable="flatpak run org.chromium.Chromium --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        10) navegador="Brave-flatpak" && ejecutable="flatpak run com.brave.Browser --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        11) navegador="Edge-flatpak" && ejecutable="flatpak run com.microsoft.Edge --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        12) navegador="Vivaldi-flatpak" && ejecutable="flatpak run com.vivaldi.Vivaldi --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        13) navegador="ungoogled-chromium-flatpak" && ejecutable="flatpak run com.github.Eloston.UngoogledChromium --app="https://$url" --class=WebApp-$id_app --name=WebApp-$id_app --user-data-dir=$HOME/.config/SSBash/$navegador-'$id_app'";;
        *) echo "Opción no válida. Seleccionando Chrome por defecto." && navegador="Chrome";;
    esac

    cadena_aleatoria=$(head /dev/urandom | tr -dc a-z0-9 | head -c 30 ; echo '')
    acceso_directo=$navegador-$id_app-$cadena_aleatoria.desktop
    touch $acceso_directo
    mkdir -p "$HOME/.config/SSBash/$navegador-$id_app/img/"
    cp $icono "$HOME/.config/SSBash/$navegador-$id_app/img/"
    echo "[Desktop Entry]
Version=1.0
Name=$nombre_app
Comment=$comentario
Exec=$ejecutable
Icon=$HOME/.config/SSBash/$navegador-$id_app/img/$nombre_imagen
Terminal=false
Type=Application
Categories=$categoria
StartupNotify=true
StartupWMClass=WebApp-$id_app" >> "$acceso_directo"

    chmod +x $acceso_directo
    mv $acceso_directo ~/.local/share/applications/

    if [ "$navegador" == "Firefox" ]; then
        mkdir -p "$HOME/.config/SSBash/$navegador-$id_app/chrome/"
        ruta_js="$HOME/.config/SSBash/$navegador-$id_app/user.js"
        touch $ruta_js
        ruta_css="$HOME/.config/SSBash/$navegador-$id_app/chrome/userChrome.css"
        touch $ruta_css

        echo "user_pref(\"browser.cache.disk.enable\", false);
user_pref(\"browser.cache.disk.capacity\", 0);
user_pref(\"browser.cache.disk.filesystem_reported\", 1);
user_pref(\"browser.cache.disk.smart_size.enabled\", false);
user_pref(\"browser.cache.disk.smart_size.first_run\", false);
user_pref(\"browser.cache.disk.smart_size.use_old_max\", false);
user_pref(\"browser.ctrlTab.previews\", true);
user_pref(\"browser.tabs.warnOnClose\", false);
user_pref(\"plugin.state.flash\", 2);
user_pref(\"toolkit.legacyUserProfileCustomizations.stylesheets\", true);
user_pref(\"browser.tabs.drawInTitlebar\", false);
user_pref(\"browser.tabs.inTitlebar\", 0);
user_pref(\"browser.contentblocking.category\", "strict");
user_pref(\"privacy.clearOnShutdown.offlineApps\", false);
user_pref(\"privacy.sanitize.sanitizeOnShutdown\", false);
user_pref(\"privacy.sanitize.timeSpan\", 1);" >> "$ruta_js"

        echo "#nav-bar, #identity-box, #tabbrowser-tabs, #TabsToolbar {
	visibility: collapse;
}

#nav-bar * {
    visibility: visible !important;
}
" >> "$ruta_css"
    fi

    echo "
    La aplicación '$nombre_app' debería haberse instalado.  Por favor,
    comprueba el archivo desktop en ~/.local/share/applications/
    y, tras ejecutarlo, que existe el perfil en ~/.config/SSBash/."
elif [ "$opcion" == "2" ]; then
    if [ -n "$(ls -A "$HOME/.config/SSBash/")" ]; then
        echo "¿Qué aplicación web quieres eliminar?" && ls $HOME/.config/SSBash/
        read app_eliminar
        if [ -n "$app_eliminar" ] && [ -e "$HOME/.config/SSBash/$app_eliminar" ]; then
            desktop_eliminar=$(echo "$app_eliminar" | tr -d ' ')
            rm -rf $HOME/.config/SSBash/"$app_eliminar"/
            rm $HOME/.local/share/applications/$desktop_eliminar*
            echo "La aplicación con id '$app_eliminar' ha sido eliminada.
            Si era basada en Firefox, elimina manualmente el perfil desde
            about:config."
        else
            echo "La apliación con id '$app_eliminar' no está en la lista."
        fi
    else
        echo "No hay aplicaciones web instaladas."
    fi
elif [ "$opcion" == "3" ]; then
    echo "Hasta la próxima."
else
    echo "Opción no válida".
fi

Explicando el código

El script o programa son menos de 100 líneas, y en él incluso se pueden eliminar las aplicaciones creadas. Es un poco rudimentario, pero hace lo que queremos. Se ejecuta con «bash nombre-del-archivo» -en donde hayamos pegado el código anterior- y todo pasa en el terminal. Se pueden editar las líneas de los navegadores y añadir otros basados en Chromium.

Empieza mostrando un nombre, y cada uno puede poner lo que más le guste. Como este tipo de aplicaciones son SSB por Site-Specific Browser y lo usado es Bash, pues SSBash no suena mal. Luego nos consulta si queremos crear una aplicación web o eliminar alguna de las que ya tenemos. Si le decimos que queremos crearla, nos pedirá el nombre de la aplicación, un comentario para los paneles que los soporten, a qué categoría pertenece, la URL del servicio, ruta al icono y luego un navegador web.

Creando una webapp con SSBash

Lo única diferencia que hay entre navegadores es el comando que los lanza, pero las banderas son iguales en todos los casos: crea una aplicación con su clase y un perfil aislado; luego creará el archivo .desktop con una cadena de caracteres aleatoria para evitar coincidencias, lo que se considera una buena práctica; a continuación crea una carpeta para la imagen que será el icono, rellena el archivo .desktop con todo lo necesario, le da permiso de ejecución y lo mueve a la carpeta `~/.local/share/applications/, que es en donde suelen estar los accesos directos propios y de algún otro software como las AppImage. Al lanzar la aplicación por primera vez se completará la creación del perfil.

Algunas precauciones

Si elegimos la opción de eliminar, el software consulta lo que hay en la carpeta de configuración, nos lo muestra y, tras poner exactamente una de las opciones, eliminará el .desktop y la carpeta con el perfil aislado. Está comprobado que funciona, pero ni yo ni LXA nos responsabilizamos de las posibles pérdidas de datos -más que nada accesos directos- que puedan tener lugar. Si alguien no quiere correr ningún riesgo, se pueden eliminar borrando el archivo .desktop de ~/.local/share/applications/ y el perfil de ~/.config/SSBash/nombre-de-la-app. Otra opción es hacer una copia de seguridad del contenido de ~/.local/share/applications/ antes de eliminar una app, comprobar que funciona y luego ya usarlo como se diseñó.

Como decía, es un poco rudimentario y no se gestionan los posibles errores. En ocasiones, dependiendo de la imagen o donde está, es probable que se vea algún fallo, en cuyo caso recomiendo revisar qué hay en el archivo .desktop.

Dos datos que me parece que hay que saber: Opera no está soportado, pero se pueden añadir otros basados en Chromium y probar; y, para que esto sea lo más simple posible, los iconos no los descarga ni nada, hay que buscarlos, descargarlos e indicar la ruta a ellos. Tampoco incluye una opción para instalar aplicaciones como lo hace el navegador… porque eso ya lo hace el navegador.

¿Y las extensiones?

Es posible instalar extensiones en este tipo de aplicaciones web, pero algunas no funcionarán. Por ejemplo, esas del ecualizador que actúan sólo en las pestañas en donde los activamos. Sí funcionarán las extensiones que funcionen en todo el navegador.

Para instalarlas, lo que hay que hacer es abrir una ventana nueva del navegador, lo que se puede conseguir con Ctrl-T o haciendo clic secundario sobre cualquier enlace y abriendo en una pestaña nueva. Se abrirá el navegador en cuestión, y esto permitirá ir a la Chrome Web Store e instalar cualquier extensión. Una vez instaladas podemos cerrar esos navegadores «completos» y volver a usar la aplicación web con la extensión incluída.

Otra manera de tener aplicaciones web

Esta es otra manera de tener aplicaciones web. Y al ejecutarse en un perfil aislado, no se comparte ni historial ni extensiones ni nada, e incluso podemos forzar el cierre del navegador base y no pasa nada. Si alguien prefiere que las aplicaciones sean de Firefox, entonces es mejor usar Webapp Manager.

Lo único a tener en cuenta es que cada perfil/app ocupa un espacio y suele superar los 100mb. Por todo lo demás, creo que merece la pena.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.