X11
從根 cron 通知發送
在我的系統上,
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 }