答え1
私が提案できる唯一の方法は、名前付きパイプを作成し、そのパイプにcronを書き込み、セッションマネージャにパイプから読み取り、通知の送信を呼び出す小さなスクリプトを起動させることです。
while read line < /tmp/.cron2notify.s # pipe name in /tmp
do notify-send "Cron message" "$line"
done
次に、crontabでプログラムが/tmp/.cron2notify.s
。
これはテストされていませんが、作業の開始点を提供する必要があります。
答え2
答え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や他のウィンドウマネージャに置き換える必要があるかもしれません。また、ユーザーを最初のパラメーターとして指定しました。これは、誰がログインしているかに関係なく動作するために、後でさらにモジュール化されるためです。