miércoles, 12 de agosto de 2015

Notificaciones en Ubuntu

El escenario

Llego al curro y me dicen que durante mi ausencia me ha llamado Claudia Schiffer para ver si le puedo hacer una sesión de fotos y darle cremita, que le apetecía a la zagala irse a la playa. Como no me ha localizado, ha pedido que por favor le devuelva la llamada, pero a una hora concreta, ya que cuando me llamó Claudia se iba a cortarse las uñas y no podría contestarme durante un rato. La hora a la que me ha dicho que la llame es dentro de 20 minutos.

Yo llego, me siento delante de mi ordenador a buscar en Google fotos de Claudia trabajar y espero ansiosamente tranquilamente a que pasen los 20 minutos para llamarla. Probablemente no se me olvide (la Schiffer no me llama todos los días), pero puede que quiera asegurarme de no olvidarlo. Puedo ponerme una alarma en el móvil, pero, ya que voy a estar trabajando con el ordenador ¿no sería mejor que me saltara un aviso en pantalla dentro de 20 minutos?

Hay varios programas en una distribución estándar Ubuntu que podemos utilizar para mostrar un mensaje. Combinando estos con sleep (esperar X segundos, en este caso los 20 minutos equivalen a 1200 segundos), puedo hacer esto que acabo de explicar. Los comandos que siguen están probados en una instalación estándar de Ubuntu 15.04. En todos los casos, abriré una consola, me mandaré el aviso y a continuación me pondré a "trabajar" en una hoja de cálculo, a esperar a ver qué pasa con la notificación.

1. notify-send


$ sleep 1200; notify-send "Llama a Claudia que te está esperando"

Esto mostrará uno de esos mensajes "globo" que aparecen en la esquina superior derecha de la pantalla y desaparecen al cabo de unos pocos segundos (Fig. 1).


Fig 1. Un globo avisándome de que tengo que llamar a mi musa

Como se puede ver en la captura de pantalla, para la prueba de concepto he cambiado el número de segundos a 4, pero esto no afecta para nada a la discusión.

El problema puede ser que la notificación de globo, al no quitarle el foco a la ventana en la que estemos actualmente, sigamos concentrados en la pantalla y no lo veamos (aunque reconozco que es un poco difícil no verlo, la verdad).

2. xmessage

$ sleep 1200; xmessage "Llama a Claudia que te está esperando"

Esto hará que salte un diálogo con un botón aceptar ("okay" en mi distro). Esta sí que roba el foco, así que no podemos ignorarla sin más. Eso sí, es posible que si con el ratón hacemos clic en otra ventana, la notificación quede tapada. Un problema que puede que hayáis apreciado es que la tilde del mensaje no sale correctamente. Normalmente, el mensaje saldrá en una esquina inferior (en diversas pruebas me ha salido tanto en la esquina inferior derecha como en la izquierda, sin que yo sepa muy bien por qué). Podemos usar la opción -center para que salga en el centro de la pantalla (Fig. 2).

Fig 2. Mensaje en el centro de la pantalla.¡Mis tildes!

3. zenity


El comando zenity permite lanzar diversos tipos de cuadros de diálogo desde nuestros scripts o desde una consola. El programa 'gdialog' es un envoltorio sobre 'zenity', así que mejor usar zenity directamente.

Estos diálogos pueden ir desde mostrar un simple mensaje al usuario (opción --info) hasta pedirle que introduzca algunos datos (un texto, una fecha [opción --calendar], elegir una opción de una lista...). Los valores devueltos por zenity se pueden capturar en el script invocante y asignarlos a una variable, por ejemplo, para trabajar con ellos (muy interesante).

Para mostrar un simple mensaje sin interés en capturar la salida, podríamos escribir algo así como:

$ sleep 4; zenity --info --text="Llama a Claudia que te está esperando"

Y veríamos algo similar a lo que se ve en la Fig. 3.

Fig. 3. Un diálogo de mensaje con zenity. Es tímido, se queda detrás

El problema es que zenity NO adquiere el foco, así que queda detrás de la ventana activa. Si ésta ocupa toda la pantalla... malo. También podéis ver en la fig. 3 que aparece un warning en consola. Esto no es un problema, pero no me gusta.

4. Conclusión


Tras unas cuantas pruebas, mi preferida para este tipo de recordatorios es notify-send combinada con sleep, pues me gustan esos globos que no interrumpen el trabajo y que son suficientemente visibles. Además, no hay que pasar ningún parámetro para que funcione bien, con lo cual es rápido de teclear y no hay que andar recordando opciones (o mirando la ayuda) como en zenity, por ejemplo.

Si tuviera que capturar información del usuario (un texto, el botón pulsado...) utilizaría seguramente zenity.

En cualquier caso, echadle un vistazo a la ayuda de las tres herramientas, que son altamente configurables. También existen muchas otras herramientas para hacer cosas parecidas, así que si éstas que os he presentado aquí no os resuelven del todo vuestros problemas, investigad un poco.

Bueno, os dejo, que ha llegado la hora de llamar a Claudia...¡ains, qué nervios!

No hay comentarios:

Publicar un comentario