Crea tu propia extensión para GNOME Shell

¿Necesitas alguna funcionalidad específica en Ubuntu? ¿Quieres orientar el escritorio para una actividad particular? ¿Quieres potenciar el escritorio sacando el máximo beneficio? Cualquiera de estas opciones pasa por crear tu propia extensión para GNOME Shell.

La decisión de Ubuntu de cambiar de Unity a GNOME Shell no ha sido un tema banal. Hacía años que Unity no evolucionaba, estaba estancado. Un ejemplo de ello son los indicadores. Mientras que en otros sistemas operativos y entornos de escritorio tenían muchas posibilidades, en Unity estaban muy limitados. A la hora de implementar un indicador, solo podías recurrir a elementos del menú, lo cual mermaba considerablemente la experiencia de usuario. Sin embargo las extensiones de GNOME Shell han abierto todo un mundo de posibilidades. No solo para crear indicadores visuales con un aspecto espectacular, sino también para modificar el entorno de escritorio adaptándolo a las necesidades de un usuario o de un colectivo.

Si en su día hiciste un indicador para Ubuntu, creo que es realmente interesante migrar tus indicadores a extensiones de GNOME Shell. No solo por las posibilidades que ofrece, sino por mejorar la experiencia de usuario. Y si no has hecho un indicador para Ubuntu, esta es tu oportunidad para crear un complemento para el escritorio que te ayude en tu trabajo diario.

Así, en este, y en los próximos capítulos de este tutorial verás como crear tu propia extensión para GNOME Shell.

Crear una extensión para GNOME Shell. Portada.

Crea tu propia extensión para GNOME Shell

JavaScript

Desde mi punto de vista, una de las ventajas que tiene el escritorio GNOME es JavaScript. Actualmente este lenguaje de programación tiene una gran aceptación por la comunidad de desarrolladores. Y esto es una ventaja a la hora de que un desarrollador decida crear una aplicación, una extensión o lo que sea para este escritorio.

De esta manera, no necesitas aprender un nuevo lenguaje o un lenguaje específico para este escritorio. Es mas, puedes utilizarlo en el terminal, tal y como comenté en el artículo sobre como ejecutar javascript en el terminal.

Herramientas

Entorno de desarrollo

Existe una herramienta específica para el desarrollo de aplicaciones para GNOME llamada Builder. Esta aplicación nació durante una clase en la que se enseñaba a la gente a desarrollar aplicaciones para GNOME. Se trata de un excelente IDE.

Sin embargo, para este tutorial, sobre como crear tu propia extensión para GNOME Shell, voy a utilizar Sublime Text. De esta manera, no necesitarás aprender ningún entorno de desarrollo nuevo. Con tus conocimientos de JavaScript, y lo que te contaré en los próximos capítulos del tutorial, verás lo sencillo que es crear tu propia extensión para GNOME Shell.

Herramientas auxiliares

Además del entorno de desarrollo, tenemos una interesante herramienta auxiliar que nos va a ayudar en la creación de nuestra extensión.

Looking Glass

Looking Glass es una herramienta que nos permite depurar e inspeccionar nuestras aplicaciones, y además se encuentra totalmente integrada en GNOME Shell.

¿Como iniciar Looking Glass? Tan solo tienes que utilizar el atajo de teclado Alt+F2 y escribir lg. Esto te mostrará la siguiente ventana de trabajo,

Crear una extensión para GNOME Shell. Looking Glass.

Looking Glass tiene tres paneles y una herramienta que nos permite obtener información del objeto al que apuntemos.

Para cerrar Looking Glass solo tienes que pulsar la tecla escape.

Evaluator

El primero de los paneles de Looking Glass es Evaluator, el evaluador. Esto no es mas que una línea de comandos de JavaScript. Puedes introducir cualquier línea de código de JavaSript y Looking Glass se encargará de evaluarla. Por supuesto y como no podía ser de otra forma, puedes realizar y evaluar operaciones matemáticas, siguiendo la sintaxis de JavaScript, por supuesto.

Puedes desplazarte entre las diferentes entradas que hayas evaluado anteriormente utilizando las teclas Arriba y Abajo. Igualmente puedes rescatar el resultado de la última operación con la variable it.

Una característica interesante a la que puedes acceder gracias a Looking Glass es a la velocidad de reproducción de las animaciones. Puedes hacer que las animaciones sean mas lentas para el caso de que hayas realizado una animación y quieras ver como se comporta. Para ello tienes que ejecutar la siguiente orden en Looking Glass,

St.set_slow_down_factor(factor)

De forma que si factor es mayor que 1 las animaciones irán mas lentas.

Para sacarle el máximo provecho a Evaluator es necesario reiniciar GNOME-Shell en el terminal. Para ello, ejecuta la siguiente orden,

gnome-shell --replace

Y ahora inicia Looking Glass como de costumbre. De esta manera la salida de las instrucciones log() y global.log() las verás directamente en el terminal en el que hemos reiniciado GNOME Shell.

Este modo de ver lo que arroja GNOME Shell es realmente cómodo. Otra opción es utilizar la aplicación Registros. Sin embargo, a mi al menos, no solo me resulta demasiado pesada, si no que además la veo incómoda de gestionar. Además Registros no muestra la salida de Looking Glass.

Extensiones

Desde este panel encontrarás todas las extensiones instaladas. En cada una de ellas tienes una serie de acciones a realizar,

  • Si la extensión está activada o no
  • Acceso a la página web de la extensión
  • Acceso al código fuente de la extensión
  • Si la extensión tiene errores. En el caso de que tenga errores te los muestra.
Ventanas

Nos permite ver información sobre las ventanas que tenemos actualmente abiertas. Nos muestra los métodos que podemos utilizar con cada una de las ventanas.

Registros

Como he comentado anteriormente, una herramienta que tenemos a nuestra disposición para ver los resultados de la depuración es Registros. Logs (Registros) es un visor de Journal el sistema de registro propio de Systemd.

Ahora bien, mi recomendación es evitar utilizar Logs, porque rápidamente se convierte en una herramienta pesada, que además tiene la manía de apoderarse de tu RAM.

Algunas acciones interesantes…

r

Cuando hagas cambios en alguna extensión y quieras probar el resultado, solo tienes que utilizar el atajo de teclado Alt+F2 y pulsar r. Con esto reinicias GNOME-Shell. Esta solución también puedes utilizarla en el caso de que tengas algún problema con GNOME-Shell. Seguramente por problemas con alguna extensión.

Reiniciar GNOME-Shell desde terminal

En el caso de que la sesión se vuelva completamente inestable, y sea imposible gobernar, reinicia GNOME-Shell. Para ello, cambia a la consola utilizando el atajo de teclado Ctrl+Alt+F1, y una vez allí, comprueba el parámetro DISPLAY. Para ello, pulsa w en el terminal, lo que te arrojará un resultado como este,

USUARIO  TTY      DE               LOGIN@   IDLE   JCPU   PCPU WHAT
lorenzo  :0       :0               09:46   ?xdm?  46:55   0.00s /usr/lib/gdm3/gdm-x-session
lorenzo  tty3     -                17:14    8:06  50.32s  0.22s -bash

De la primera línea es de donde se extrae la varible DISPLAY :0.0. Ahora ejecuta las dos siguientes órdenes.

export DISPLAY=:0.0
gnome-shell --replace &

Documentación

Además de las herramientas vas a necesitar documentación. Y no solo me refiero a la referencia de clases, métodos y propiedades, también al código fuente. Y es que, no todo GNOME Shell está documentado, con lo que necesitas sumergirte en el código fuente. Esto evidentemente es fundamental para crear una extensión para GNOME Shell. Pero además en ocasiones, querrás modificar parte del código para añadir alguna característica adicional. En estos casos, vas a necesitar reutilizar el código fuente.

  • Documentación API. Aquí encontrarás la documentación para escribir aplicaciones GNOME en JavaScript. Se trata de una ayuda fundamental organizada por las diferentes librerías. Así encontrarás toda la información relativa a Gtk, GObject, Pango, WebKit, y mucho mas. Ten en cuenta que es necesario habilitar las librerías que vas a utilizar.
  • Código fuente de GNOME Shell. En este repositorio encontrarás todo el código fuente de GNOME Shell. Aquí dentro de js/ui tienes todas las librerías que se utilizan, y que hay que ir conociendo para extender el escritorio.
  • Mathematical Coffee. La documentación sobre GNOME Shell es bastante pobre. Sin embargo, en esta página, encontrarás una guía de los diferentes archivos del código fuente de GNOME Shell. Así, por ejemplo, tienes una descripción de altTab.js, que es el que gestiona la ventana que aparece al pulsar Alt+Tab, o calendar.js, que se encarga del calendario del menú.

Conclusión

En este primer capítulo del tutorial has visto las herramientas y documentación necesaria para crear tu propia extensión para GNOME Shell. Hay mucho trabajo que hacer, pero poco a poco vamos a ir construyendo nuestra extensión, sin prácticamente darnos cuenta.

Como verás mas adelante, son pocos los conceptos necesarios para crear un indicador. Sin embargo, una herramienta como un indicador te puede ser de gran utilidad. Te permite tener siempre al alcance de la mano una herramienta que utilices muy a menudo, por ejemplo.


Más información,