通知を介してcronを使用して画面にメッセージを送信する方法

通知を介してcronを使用して画面にメッセージを送信する方法

notify-send私は(Archマシンで)と遊んでいますが、cronそれらを組み合わせる方法を見つけることができません:

私は与えられた解決策を試しましたここそしてここしかし、それらのどれも動作しません。どうやって使うの?

編集する: crontabでDISPLAYを設定しましたが、まだ機能しません。 Ubuntuで同じことを試しましたが、すべてがうまくいきました。これは私のクローンラインです。

*/1 * * * * DISPLAY=:0.0 /usr/bin/notify-send "hellp" || echo "er" > .er

答え1

私が提案できる唯一の方法は、名前付きパイプを作成し、そのパイプにcronを書き込み、セッションマネージャにパイプから読み取り、通知の送信を呼び出す小さなスクリプトを起動させることです。

while read line < /tmp/.cron2notify.s  # pipe name in /tmp
do notify-send "Cron message" "$line"
done

次に、crontabでプログラムが/tmp/.cron2notify.s

これはテストされていませんが、作業の開始点を提供する必要があります。

答え2

私はそれがnotify-send依存していると思います。D-Busほとんどのシステムでdbusにアクセスする最も一般的な方法は変数を使用することです$DBUS_SESSION_BUS_ADDRESS。ただし、crontab通常はログインまたは再起動時に発生する新しいdbusインスタンスを起動するたびにバスアドレスが変更されるため、これをハードコードすることは不可能です。アルシェ解決策良い解決策のようです。

答え3

Arcegeの答えを試してみましたが、うまく機能しませんでした。最初の行が名前付きパイプに書き込まれた後、whileループは終了します。私にとって役に立ったのは、cronから送信されたシグナルをキャプチャし、通知の送信を呼び出す無限ループを持つ同様のスクリプトを使用することでした。以下は「notify-forward」プログラムです:

#! /bin/bash
function coffee () {
   notify-send "foo" "bar"
}
function lunch () {
   notify-send "bar" "foo" 
}
while true; do
  sleep 10
  trap coffee SIGUSR1
  trap lunch SIGUSR2
done

私のクローンタブは次のとおりです

55 09,13 * * * pkill -USR1 forward-notify
55 11 * * * pkill -USR2 forward-notify

答え4

ラッパースクリプトを使用することをお勧めします。通知転送のcron呼び出しをシミュレートするには、「ssh localhost」を使用して自分のシステムにログインします。 '/usr/bin/notify-send "foo"' を呼び出すと機能しなくなり、DISPLAY=:0.0 をその行に追加できません。これは働きます:

DBUS_SESSION_BUS_ADDRESS="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/`pgrep -u username cinnamon|head -1`/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//')" /usr/bin/notify-send "foo"

いくら言ってもとても混乱していました。これはもっときれいです。

#! /bin/bash

DBUS=$(pgrep -ou $1 cinnamon)
DBUS="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//')"

DBUS_SESSION_BUS_ADDRESS="$DBUS" /usr/bin/notify-send $2

クローンから:

*/1 * * * * /path/to/notify.sh user "help"

私が使用しているウィンドウマネージャのために「シナモン」ビットがあることに注意してください。 Nautilusや他のウィンドウマネージャに置き換える必要があるかもしれません。また、ユーザーを最初のパラメーターとして指定しました。これは、誰がログインしているかに関係なく動作するために、後でさらにモジュール化されるためです。

関連情報