GNU/Linux >> Tutoriales Linux >  >> Linux

¿Usando Notify-send con Cron?

Estoy usando Arch Linux con KDE/Awesome WM. Estoy tratando de obtener
notify-send para trabajar con cron .

He intentado configurar DISPLAY /XAUTHORITY variables y ejecutando notify-send con “sudo -u”, todo sin resultado.

Puedo llamar a notificar-enviar de forma interactiva desde la sesión y recibir notificaciones.

FWIW, el trabajo cron funciona bien, lo cual verifiqué haciendo eco en un archivo temporal. Es solo el "envío de notificación" que no funciona.

Código:

[[email protected] ~]$ crontab -l
* * * * *  /home/matrix/scripts/notify.sh

[[email protected] ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest

[[email protected] ~]$ cat /tmp/crontest
testing cron
now tested notify-send

[[email protected] ~]$ 

Como puede ver, el eco antes y después de notificar-enviar funcionó.
También intenté configurar DISPLAY=:0.0

ACTUALIZACIÓN:
Busqué un poco más y descubrí que es necesario configurar DBUS_SESSION_BUS_ADDRESS. Y después de codificar esto utilizando el valor que obtuve de mi sesión interactiva, ¡el diminuto mensaje de "hola" comenzó a aparecer en la pantalla cada minuto!

Pero el problema es que esta variable no es permanente según esa publicación, así que probaré la solución de canalización con nombre sugerida allí.

[[email protected] ~]$ cat scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c
echo "testing cron" >/tmp/crontest
/usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest

Desde cron no parece admitir el envío de notificaciones (al menos no directamente) ¿hay algún otro sistema de notificación que sea más cron? amigable que puedo usar?

Respuesta aceptada:

Debe configurar el DBUS_SESSION_BUS_ADDRESS variable. Por defecto, cron
no tiene acceso a la variable. Para remediar esto, coloque el siguiente script
en algún lugar y llámelo cuando el usuario inicie sesión, por ejemplo, usando awesome y
el run_once función mencionada en la wiki. Cualquier método funcionará, ya que
no hace daño si la función se llama con más frecuencia de la necesaria.

#!/bin/sh

touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus

exit 0

Esto crea un archivo que contiene la variable de entorno Dbus necesaria. Luego, en
el script llamado por cron, importa la variable obteniendo el script:

if [ -r "$HOME/.dbus/Xdbus" ]; then
  . "$HOME/.dbus/Xdbus"
fi

Aquí hay una respuesta que usa el mismo
mecanismo.

Relacionado:¿Cómo generar registros SSHFP?
Linux
  1. Programación de tareas del sistema con Cron en Linux

  2. Uso de una secuencia de comandos contenedora de Cron

  3. ¿Usando Word Wrap con Mc?

  4. Cómo programar trabajos de Cron con Crontab

  5. ¿Usando trabajos CRON para visitar la URL?

Programación de trabajos de Cron con Crontab

Programación con cron &At

¿Usando –exclude con el comando Du?

Entendiendo Crontab en Linux con ejemplos

Programar trabajos en Linux con el comando 'at'

¿Cómo rellenar un archivo con FF usando dd?