cronに通知を送信する

cronに通知を送信する

私はArch LinuxとKDE / Awesome WMを使用しています。私 notify-sendと一緒に仕事をしようとしていますcron

私はDISPLAY/XAUTHORITY変数を設定し、notify-send「sudo -u」を使って実行してみましたが、役に立ちませんでした。

インタラクティブに通知を送信し、セッションから通知を受け取ることができます。

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を見つけました。設定が必要です。インタラクティブセッションから得られた値でハードコーディングした後、毎分小さな「hello」メッセージが画面に表示されます。

しかし、問題は、この変数が永続的ではないということです。したがって、そこに提案された名前付きパイプソリューションを試してみましょう。

[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

ベストアンサー1

この変数を設定する必要がありますDBUS_SESSION_BUS_ADDRESS。デフォルトでは、cronはこの変数にアクセスできません。この問題を解決するには、次のスクリプトをどこかに置き、ユーザーがログインしたときに呼び出します。素晴らしいそしてrun_onceWikiに言及されている機能です。関数が必要以上に呼び出されても害にならないので、どんなアプローチでも可能です。

#!/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

これは同じメカニズムを使用して応答します。

おすすめ記事