私はKDE/AwesomeWMでArchLinuxを使用しています。
notify-send
を取得しようとしています cron
を使用するには 。
DISPLAY
を設定してみました / XAUTHORITY
変数、およびnotify-send
の実行 「sudo-u」を使用すると、すべて結果が表示されません。
通知を呼び出すことができます-セッションからインタラクティブに送信し、通知を受け取ります。
FWIW、cronジョブは正常に実行されています。これは、一時ファイルにエコーすることで確認しました。動作しないのは「通知-送信」だけです。
コード:
[[email protected] ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[[email protected] ~]$ 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
[[email protected] ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[[email protected] ~]$
ご覧のとおり、notify-sendが機能する前後のエコーを確認できます。
また、DISPLAY=:0.0
を設定してみました
更新:
もう少し検索したところ、DBUS_SESSION_BUS_ADDRESSを設定する必要があることがわかりました。そして、インタラクティブセッションから取得した値を使用してこれをハードコーディングした後、小さな「こんにちは」メッセージが毎分画面にポップアップし始めました!
ただし、この変数はその投稿ごとに永続的ではないため、そこで提案されている名前付きパイプソリューションを試してみます。
[[email protected] ~]$ 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
これが同じ
メカニズムを使用する答えです。