내 시스템에서는 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을 통해 어떻게 작동하게 합니까?
우분투 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