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

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

答え2

crontab自体で変数を設定する必要があります。

DISPLAY=:0.0
XAUTHORITY=/home/matrix/.Xauthority

# m h  dom mon dow   command 
* * * * *  /usr/bin/notify-send "hello"

いいえsudo、少なくとも私のシステムにはありません。

答え3

Ubuntu 18.04でi3を使用しています。私がこの問題を解決した方法は次のとおりです。

* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"

答え4

このジョークはManjaroとCronieで私に効果的でした。

# Note: "1000" would be your user id, the output of... "id -u <username>" 
10 * * * * pj DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'Hello world!' 'This is an example notification.'

非常に醜いDBUS_blah_blahがなければ、まったく機能しません。私もjournalctl -xb -u cronieそれが役に立つことがわかりました。 FWIW、Cronieはcrondを使用し、Vixie cronと逆互換する必要があります。

ここで解決策を見つけましたhttps://wiki.archlinux.org/index.php/Desktop_notifications

更新: 2021 年でも引き続き有効です。このプロンプトを/etc/crontabファイルに追加しました。

# After installing cronie:
# systemctl start cronie
# systemctl enable cronie

# After editing this file:
# chmod 600 /etc/crontab    
# crontab /etc/crontab
# Check that the changes are set:
# crontab -l

関連情報