X11

從根 cron 通知發送

  • February 12, 2017

在我的系統上,notify-send需要 3 個環境變數才能執行,它們保存在登錄時自動生成的文件中:

/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

而且,在 crontab 緩衝區中,我輸入了以下內容:

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

其中*display-notif.sh*包含:

#!/usr/bin/env bash

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

儘管我可以通過此設置notify-send從非 sudo cron ( crontab -e) 執行,但我無法從 sudo cron ( sudo crontab -e) 執行。

我還嘗試檢查是否生成了任何錯誤:

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

但是那個日誌文件是空的。

如何使它從 sudo cron 工作?

我正在使用 Ubuntu 16.04。

更換後工作正常

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

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

此功能(來自https://unix.stackexchange.com/a/344377/7286)在 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 
}

引用自:https://unix.stackexchange.com/questions/289292