私のシステムでは、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を使用しています。
答え1
この機能は(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
}
答え2
交換後に利用可能
* * * * * /home/anmol/display-notif.sh
そして
* * * * * sudo -u anmol /home/anmol/display-notif.sh