notify-send from root cron

2

No meu sistema, notify-send requer que 3 variáveis de ambiente sejam executadas, que são mantidas em um arquivo gerado automaticamente no logon:

/home/anmol/.env_vars :

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-PwezoBTpF3
export DBUS_SESSION_BUS_ADDRESS
XAUTHORITY=/home/anmol/.Xauthority
export XAUTHORITY
DISPLAY=:0
export DISPLAY

E, no buffer do crontab, eu entrei:

PATH=/home/anmol/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

* * * * *  /home/anmol/display-notif.sh

onde display-notif.sh contém:

#!/usr/bin/env bash

. /home/anmol/.env_vars
notify-send 'hello'

Embora eu possa executar notify-send do cron não-sudo ( crontab -e ) por meio dessa configuração, não consigo fazer isso do sudo cron ( sudo crontab -e ).

Eu também tentei verificar se há algum erro sendo gerado:

* * * * *  /home/anmol/display-notif.sh 2>/home/anmol/log

Mas esse arquivo de log está vazio.

Como faço para que isso funcione no sudo cron?

Estou usando o Ubuntu 16.04.

    
por Anmol Singh Jaggi 12.06.2016 / 16:26

2 respostas

1

Está a funcionar depois de substituir

* * * * *  /home/anmol/display-notif.sh

com

* * * * *  sudo -u anmol /home/anmol/display-notif.sh
    
por 13.06.2016 / 01:57
3

Esta função (do link ) funciona para mim no Ubuntu 16.04:

notify_all() {
    local title=$1
    local msg=$2

    who | awk '{print $1, $NF}' | tr -d "()" |
    while read u d; do
        id=$(id -u $u)
        . /run/user/$id/dbus-session
        export DBUS_SESSION_BUS_ADDRESS
        export DISPLAY=$d
        su $u -c "/usr/bin/notify-send '$title' '$msg'"
    done 
}
    
por 12.02.2017 / 12:59