Hoy te mostraré cómo crear notificaciones personalizadas y funcionales en tu escritorio usando la utilidad de consola notify-send
. Estas notificaciones soportan botones activos, pueden mostrar iconos y enlaces web clicables. Como ejemplo, configuraremos una recordatorio usando un pequeño script en Bash y el planificador Cron para ejecutar las notificaciones según una programación. ¡Será interesante!
Requisitos previos
Para lograr nuestra tarea, necesitas la utilidad notify-send
versión 0.8 o superior, ya que a partir de esta versión soporta botones activos. Puedes comprobar la versión con este comando:
notify-send --version

Esta utilidad forma parte del paquete libnotify-bin
, que a su vez depende de la biblioteca de notificaciones libnotify4
. Por lo tanto, la versión de estos paquetes también debe ser 0.8 o superior.
Puedes comprobar la versión de estos paquetes con este comando:
apt show libnotify4 libnotify-bin | grep Version
El comando apt show
muestra información detallada sobre el paquete.

Si la versión de los paquetes libnotify-bin
y libnotify4
en tu sistema es inferior a 0.8.1 (por ejemplo, en Ubuntu 22.04 la versión puede ser 0.7.9 o 0.8.0): deberás actualizarlos manualmente. A continuación, te mostramos cómo hacerlo en sistemas basados en Ubuntu o Linux Mint.
En los repositorios de Ubuntu 24.04 (Noble) hay paquetes compatibles con la versión 0.8.3, que es la más reciente al momento. Ve a la página de descarga, descárgalos e instálalos.
- Descarga el paquete
libnotify4
: https://packages.ubuntu.com/noble/amd64/libnotify4/download - Al intentar la instalación, el sistema te notificará que ya hay instalada una versión anterior desde los repositorios. Haz clic en cerrar y luego en “Instalar paquete”.
- Ahora descarga
libnotify-bin
en la página: https://packages.ubuntu.com/noble/amd64/libnotify-bin/download - La instalación es similar.
Si todo se instaló correctamente, comprueba la versión:
apt show libnotify4 libnotify-bin | grep Version
notify-send --version
¡Excelente! Ahora podemos empezar a configurar las notificaciones personalizadas.
Cabe destacar que en Linux Mint, basado en Debian 12 (LMDE), la versión de libnotify4
en los repositorios estándar es la 0.8.1. Para sistemas basados en Ubuntu 24.04 o Linux Mint 21.3, la versión 0.8.3 está disponible en los repositorios oficiales, por lo que puedes actualizar directamente con:
sudo apt update && sudo apt install libnotify4 libnotify-bin
Ejemplo de mensajes con el comando notify-send
La sintaxis del comando notify-send
es la siguiente:
notify-send [parámetros] <título_notificación> [cuerpo_mensaje]
Recuerda que los parámetros entre corchetes son opcionales.
Probemos a enviar una notificación de texto simple:
notify-send 'Mensaje de prueba' 'Hola adictosalinux'

Con el parámetro --action
puedes crear uno o varios botones. Al presionar un botón, se devuelve una respuesta al proceso en la salida estándar stdout
. Este enfoque permite procesar de forma flexible las acciones al presionar los botones de las notificaciones en scripts y comandos. Un ejemplo de implementación se mostrará a continuación.
Probemos a mostrar una notificación con un botón activo:
notify-send 'Mensaje de prueba' 'Hola adictosalinux' --action 'pressed=Pulsa el botón'

En el comando anterior, para el parámetro --action
, hemos indicado la clave pressed
, que debe devolverse al shell al presionar el botón. Es decir, al presionar el botón, se mostrará la palabra pressed
en la consola. Si no se especifica dicha clave, por defecto se devuelve un código de salida cero.
Ahora probemos a mostrar una notificación con varios botones:
notify-send 'Mensaje de prueba' 'Hola adictosalinux' --action 'pressed=Pulsa el botón' --action 'no_pressed=No me pulses'

Puedes usar claves arbitrarias para los botones.
Mostremos una notificación con iconos del sistema, añadiendo el parámetro -i
y el nombre del icono:
notify-send -i 'face-devilish' 'Mensaje de prueba' 'Hola adictosalinux' --action 'pressed=Pulsa el botón'
Donde face-devilish
es el nombre del icono.

Para conocer los nombres de los iconos en el sistema, puedes usar la utilidad gráfica gtk3-icon-browser
. Se incluye en el paquete gtk-3-examples
de los repositorios estándar. Para instalarlo, ejecuta:
sudo apt install gtk-3-examples
Después de la instalación, ejecuta en la consola:
gtk3-icon-browser

Y aquí tienes un ejemplo de notificación con un enlace web clicable:
notify-send -i 'face-devilish' 'Mensaje de prueba' 'https://adictosalinux.com/ - blog de Linux' --action 'pressed=Pulsa el botón'

Ahora configuremos un recordatorio en forma de notificación, que mostrará un mensaje indicando que debes despegarte de la pantalla del monitor y realizar gimnasia para los ojos con un vídeo de YouTube.
Escribimos un script bash para mayor comodidad
Abre un nuevo archivo para editarlo:
nvim ~/.local/bin/notify.sh
#O puedes usar nano
Y rellénalo con este código:
#!/usr/bin/env bash
# definimos variables
notify_title="Realiza gimnasia para los ojos"
notify_messages="Mira el vídeo 1 o 2"
notify_icon="face-devilish"
notify_button1="Vídeo de 1 min."
notify_button2="Vídeo de 5 min."
pressed_button="$(notify-send "$notify_title" "$notify_messages" -i "$notify_icon" --action "video1=$notify_button1" --action "video2=$notify_button2")"
# creamos una expresión condicional para procesar las pulsaciones de los botones
if [[ "$pressed_button" == "video1" ]]; then
firefox --new-window https://youtu.be/KhJZcmHgKoo
elif [[ "$pressed_button" == "video2" ]]; then
firefox --new-window https://youtu.be/utT7IwFGPyU
fi

En este script, primero definimos las variables cuyo contenido mostraremos en la notificación. Luego, definimos una variable separada que, mediante el mecanismo de sustitución, contendrá el resultado de la ejecución del comando con notify-send
. Después, mediante expresiones condicionales, procesamos la salida recibida. En este ejemplo, se abre una nueva ventana de Firefox con el enlace al vídeo de ejercicios para los ojos seleccionado, dependiendo del botón pulsado. Los vídeos son ejemplos tomados de internet.
Si has configurado Neovim siguiendo mis instrucciones, recuerda que al presionar F5 se guarda el archivo y, si es un script, se ejecuta en la ventana emergente del editor:
Comprobación del funcionamiento del script
Para salir, pulsa sobre la notificación o Ctrl+C en la ventana del editor. Como puedes ver, el script se ejecuta.
Si no has configurado Neovim, simplemente guarda el archivo y sal. Luego, haz que el script sea ejecutable con este comando:
chmod +x ~/.local/bin/notify.sh
chmod
es un comando para gestionar los permisos de los archivos en Linux, y +x
es el parámetro para añadir el flag de ejecución al archivo especificado. Próximamente habrá una entrada separada sobre la línea de comandos de Linux, donde hablaremos de los permisos.
Comprobemos el resultado del comando anterior:
ls -l ~/.local/bin/notify.sh

¡Excelente! Ahora, para ejecutar el script, simplemente indica su ruta en el terminal. Si tiene el flag de ejecución (x), el shell sabrá que estás ejecutando un archivo ejecutable. Introduce en el terminal:
~/.local/bin/notify.sh

Todo funciona. Ahora creemos una tarea que ejecutará este script cada 3 horas.
Añadimos una tarea al planificador Cron
En los sistemas basados en Linux, se incluye de serie el planificador de tareas Cron. Es bastante fácil de usar, solo hay que entender la sintaxis de las programaciones de ejecución.
Para configurar una programación en Cron para el usuario actual, introduce en el terminal este comando:
crontab -e
Si ejecutas este comando por primera vez, se te pedirá que elijas un editor de texto de consola para editar las tareas de cron. ¡Por supuesto, elegimos Neovim!
En mi caso, elijo la opción 3 y pulso Intro:

Por defecto, el archivo crontab
ya está bien comentado: se explica la sintaxis y se proporciona un ejemplo de tarea.

Los 5 primeros parámetros, separados por espacios, son los valores de la programación:
- Minutos;
- Horas;
- Día del mes;
- Mes;
- Día de la semana.
Los valores por defecto son * * * * *
, que significa “cada vez”, es decir, cada minuto, cada hora, etc.
Puedes encontrar una descripción más detallada y la posibilidad de probar la sintaxis en este útil recurso: https://crontab.guru (EN).
Tras abrir crontab
, añade al final del archivo esta línea:
*/2 * * * * DISPLAY=":0" XDG_RUNTIME_DIR="/run/user/$(id -u)" ~/.local/bin/notify.sh
Componentes de la línea:
*/2
– cada 2 minutos (lo configuraremos para comprobarlo);*
– cada hora;*
– cada día;*
– cada mes;*
– cada día de la semana;DISPLAY=":0"
– variable de entorno que especifica el número de la pantalla de la sesión gráfica (simplificado de:0.0
a:0
, que es suficiente en la mayoría de los sistemas modernos);XDG_RUNTIME_DIR="/run/user/$(id -u)"
– variable de entorno que define el directorio de ejecución;~/.local/bin/notify.sh
– ruta al script; aquí puede haber cualquier otro comando.
Las variables DISPLAY
y XDG_RUNTIME_DIR
son necesarias para que cron entienda en qué entorno debe mostrar las notificaciones. Si no las especificas, el script se ejecutará, pero en segundo plano y no veremos las notificaciones.
Guarda y cierra el editor.
Ahora, cada 2 minutos debería aparecer en el escritorio la notificación configurada:

Para ver la lista de tareas instaladas en crontab
, ejecuta el comando:
crontab -l

Una vez que te asegures de que la tarea programada funciona, modifica el tiempo de aparición; configúralo para que sea cada 3 horas. Para ello, corrige la línea de la tarea (a las 0 minutos de cada 3 horas):
0 */3 * * * DISPLAY=":0" XDG_RUNTIME_DIR="/run/user/$(id -u)" ~/.local/bin/notify.sh
Conclusión
Hemos aprendido un poco sobre las notificaciones en el escritorio de Linux: hemos aprendido a enviarlas manualmente desde el terminal con el comando notify-send
, hemos escrito un pequeño script en Bash para mayor comodidad y hemos añadido su ejecución al planificador de tareas del sistema Cron.
En el futuro, haré una entrada aparte sobre la configuración detallada del planificador Cron y sus posibilidades. Por ahora, gracias por leer. Suscríbete a nuestro boletín de correos si tienes alguna pregunta o simplemente quieres hablar sobre temas de Linux.
¿Qué te parece?
Es bueno conocer tu opinión. Deja un comentario.