Shell Scripting para crear un archivo .desktop para una aplicación portable

Bash Shell Scripting: Crear un Enlace de una App portable.

El termino Shell aplicado a los Sistemas Operativos se refiere al interprete de comandos del Sistema Operativo. Por lo general, es una interfaz de texto de altas prestaciones que se manifiesta en forma de Terminal (Consola) y que sirve esencialmente para 3 importantes áreas de trabajo: Administrar el Sistema Operativo, Ejecutar aplicaciones e interactuar con ellas, y servir de entorno básico de programación. Y Scripting se refiere a la técnica de diseñar y crear Scripts mediante un Shell.

Los Scripts de Shell son extremadamente útiles. Es buena idea escribir aquellas necesidades que tengamos y luego editar scripts que realicen este trabajo por nosotros. Y en este caso en particular lo usaremos para crear enlaces (accesos directos) de aplicaciones en el menú de inicio y el escritorio de apps portables, auto-ejecutables y auto-contenidas.

Introducción

Muchas veces hemos descargado e instalado aplicaciones que estando o no en los repositorios de nuestra Distribución GNU/Linux al instalarla o ejecutarla la misma no crea los respectivos archivos .desktop de la misma o en el mejor de los casos no coloca el mismo en la ruta correcta para que luego de actualizarse el Menú de Inicio sea leído y mostrado en la lista de paquetes instalados del Sistema Operativo.

Por ende, nos toca apelar al uso de aplicaciones como “Alacarte” o “Menulibre” para manualmente crear el respectivo enlace en el Menú de Inicio.

Y aunque estas aplicaciones gráficas son muy sencillas de usar para dicho fin, nunca esta demás saber crear nuestro propio script para que realice dicha operación y así conocer desde dentro como se realiza dicha operación dentro del Sistema Operativo.

Si usted no esta familiarizado con la creación y/o uso de archivos Shell Scripting puede leer esta publicación anterior (Shell, Bash y Scripts) para empezar y luego en caso de ser necesario explorar todas las publicaciones al respecto sobre el tema.

Creando el programa usando Shell Scripting

Asumiremos por cuestiones de espacio que ya sabemos crear un script desde cero, es decir, ya sabemos crear el encabezado o partes iniciales de nuestro script e iremos directo al contenido del mismo.

Sin embargo si tienen dudas al respecto revisen esta publicación anterior (Construye paso a paso tu programa utilizando Shell Scripting – Parte 1) para aclarar dudas.

Contenido


#!/usr/bin/env bash
set -eou pipefail
IFS=$'\n\t'
setterm --reset
# NOMBRE: MI-APP LINUX POST INSTALL - SCRIPT BICENTENARIO (MIAPP-LPI-SB)
# VERSIÓN: 1.0+0
# TIPO DE PROGRAMA: SISTEMA EXPERTO
# FUNCIÓN: ASISTENTE TECNICO PARA S.O. GNU/LINUX BASADOS EN DEBIAN
# NOMBRE CODIGO: MIAPP (MIAPP-LPI-SB 1.0+0)
# PAIS ORIGEN: Mi país
# CREADO POR: Mi Nombre
# LICENCIA: Licencia Pública General de GNU 3.

###############################################################################
# INICIO DEL MODULO DE VALIDACION PERMISO DE SUPERUSUARIO (ROOT) SOBRE EL MIAPP-LPI-SB              
###############################################################################

# ESTE MODULO VALIDA QUE SOLO EL SUPERUSUARIO (USUARIO ROOT) PUEDA EJECUTAR
# EL LINUX POST INSTALL - SCRIPT BICENTENARIO.

clear

setterm -background red

if [[ "$(id -u)" != "0" ]]; then
   echo "ESTE SCRIPT DEBE SER EJECUTADO COMO ROOT"
   sleep 3
   clear      
  else
   echo "ESTE SCRIPT SERA EJECUTADO COMO SUPERUSUARIO (ROOT)"
   sleep 3
   clear
fi

###############################################################################
# FINAL DEL MODULO DE VALIDACION PERMISO DE SUPERUSUARIO (ROOT) SOBRE EL MIAPP-LPI-SB
###############################################################################


###############################################################################
# INICIO DEL MODULO DE ORDENES DE COMANDO DE POST INSTALACIÓN
###############################################################################

rm -f $HOME/mi_app/mi_app.desktop
rm -f $HOME/.local/share/applications/mi_app.desktop
rm -f $HOME/Desktop/mi_app.desktop
rm -f $HOME/Escritorio/mi_app.desktop
rm -f /usr/share/applications/mi_app.desktop

###############################################################################

echo "
[Desktop Entry]
Name=My Applicattions
GenericName=My Applicattions
GenericName[es]=Mi Aplicación
Comment=Mi Aplicación
Exec=/opt/mi_app/mi_app
Icon=`echo $HOME`/mi_app/icono_app.png
Terminal=false
Type=Application
Encoding=UTF-8
Categories=Network;Application;
MimeType=x-scheme-handler/mozilla;
X-KDE-Protocols=mozilla
" > `echo $HOME`/mi_app/mi_app.desktop

chown $USER:$USER -R `echo $HOME`/mi_app/mi_app.desktop

chmod 755 `echo $HOME`/mi_app/mi_app.desktop

ln -s `echo $HOME`/mi_app/mi_app.desktop $HOME/.local/share/applications/mi_app.desktop
ln -s `echo $HOME`/mi_app/mi_app.desktop $HOME/Desktop/mi_app.desktop
ln -s `echo $HOME`/mi_app/mi_app.desktop $HOME/Escritorio/mi_app.desktop
ln -s `echo $HOME`/mi_app/mi_app.desktop /usr/share/applications/mi_app.desktop

update-menus

###############################################################################

clear

su - $USER -c "xdg-open 'https://www.mi-app.com/'"

clear

echo ''
echo ''
echo '#------------------------------------------------------------------#'
echo '# GRACIAS POR USAR MI-APP LINUX POST INSTALL #'
echo '#------------------------------------------------------------------#'
echo ''
echo ''

sleep 3

###############################################################################
# FINAL DEL MODULO DE ORDENES DE COMANDO DE POST INSTALACIÓN
###############################################################################

Contenido del Script en Mousepad

Comentarios

Como podrán analizar a partir del código y omitiendo el encabezado el siguiente script realiza las siguientes operaciones de forma automatizada:

  1. Validar que este siendo usado como super-usuario root o permiso de super-usuario root.
  2. Borrar anteriores enlaces de la aplicación que hayan sido creados por una versión anterior.
  3. Crear el nuevo archivo .desktop (enlace) de la aplicación en su propia carpeta dentro del home del usuario.
  4. Asignarle al usuario permiso de propietario sobre el archivo creado.
  5. Asignarle al archivo creado los permisos de lectura/escritura/ejecución adecuados.
  6. Crear los nuevos enlaces simbólicos a las rutas necesarias.
  7. Actualizar el menú de inicio para que visualice el archivo .desktop creado.
  8. Ejecutar una URL especifica sobre la aplicación creada.

Recomendación

Se recomienda que este archivo sea creado dentro de la carpeta que contiene a la aplicación/ejecutable en cuestión con su respectivo icono (imagen/logo) especificado dentro del mismo y que dicha carpeta se encuentre en la ruta /opt en vez de la ruta `echo $HOME`/mi_app/ es decir, /home/mi_usuario/mi_app.

Espero que este pequeño script les permita solucionar sus necesidades al respecto sobre este tema! Hasta el próximo articulo.

Mientras les dejo este enlace en la Web oficial de Gnome sobre el Tema y este vídeo:



Ingeniero en Informática y Administrador de Servidores GNU/Linux con certificación internacional de Linux: 1.- Certified Linux Administrator (CLA) 2.- Certified Linux Operator (CLI)

3 comentarios

  1.   Guillermo dijo

    Muchas gracias por este y todos tus artículos.
    Una duda: ¿Cómo, en caso de no ser root, se podría pedir la clave enseñando asteriscos para proseguir la ejecución con los permisos adecuados?

    1.    Ing. Jose Albert dijo

      Podrías crear una interfaz con dialog y aplicarle a la caja de solicitud de contraseña la propiedad de encriptar la clave! Recuerdo bien que existe esa propiedad en dialog.

      En esta entrada anterior, alguien hizo algo parecido pero gráficamente pero los archivos adjuntos, es decir, el código usado ya no esta disponible: https://blog.desdelinux.net/script-avanzado-en-bash-bashmd5-para-proteger-algo-explicacion-detallada/

  2.   Guillermo dijo

    Gracias, sería bueno no tener que salir del entorno bash por si se ejecuta sin interfaz gráfica, en ese caso no importa incluso si no hay asteriscos ni nada, que pida la clave y no aparezca ningún texto. Ummm, lo encuentro en http://www.tormentadebits.com/2012/08/scripts-bash-introducir-password-sin-mostrarlo-en-pantalla.html

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  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.