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.