Shell
將通知發送與 cron 一起使用
我正在使用帶有 KDE/Awesome WM 的 Arch Linux。我正在努力
notify-send
與cron
.我試過設置
DISPLAY
/XAUTHORITY
變數,並notify-send
用“sudo -u”執行,都沒有結果。我可以從會話中以互動方式呼叫 notify-send 並獲取通知。
FWIW,cron 作業執行良好,我通過將內容回顯到臨時文件來驗證。只是“通知發送”不起作用。
程式碼:
[matrix@morpheus ~]$ crontab -l * * * * * /home/matrix/scripts/notify.sh [matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority echo "testing cron" >/tmp/crontest sudo -u matrix /usr/bin/notify-send "hello" echo "now tested notify-send" >>/tmp/crontest [matrix@morpheus ~]$ cat /tmp/crontest testing cron now tested notify-send [matrix@morpheus ~]$
如您所見,通知發送工作之前和之後的迴聲。
我也試過設置
DISPLAY=:0.0
更新:我搜尋了一下,發現需要設置 DBUS_SESSION_BUS_ADDRESS。在使用我從互動式會話中獲得的值對其進行硬編碼後,每分鐘都會在螢幕上彈出一條小小的“你好”消息!
但是要注意的是,該變數不是該文章的永久變數,因此我將嘗試那裡建議的命名管道解決方案。
[matrix@morpheus ~]$ cat scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c echo "testing cron" >/tmp/crontest /usr/bin/notify-send "hello" echo "now tested notify-send" >>/tmp/crontest
由於
cron
似乎不支持通知發送(至少不直接支持),還有其他一些cron
我可以使用的更友好的通知系統嗎?
您需要設置
DBUS_SESSION_BUS_ADDRESS
變數。預設情況下,cron 無權訪問該變數。為了解決這個問題,將以下腳本放在某個地方並在使用者登錄時呼叫它,例如使用awesome和run_once
wiki 上提到的函式。任何方法都可以,因為如果函式被呼叫的頻率超過了要求,它不會造成傷害。#!/bin/sh touch $HOME/.dbus/Xdbus chmod 600 $HOME/.dbus/Xdbus env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus exit 0
這將創建一個包含所需 Dbus 環境變數的文件。然後在 cron 呼叫的腳本中,通過獲取腳本來導入變數:
if [ -r "$HOME/.dbus/Xdbus" ]; then . "$HOME/.dbus/Xdbus" fi