알림을 통해 cron을 사용하여 화면에 메시지를 보내는 방법

알림을 통해 cron을 사용하여 화면에 메시지를 보내는 방법

notify-send나는 and (Arch 머신에서) 를 가지고 놀고 있지만 cron그것들을 결합하는 방법을 찾을 수 없습니다:

나는 주어진 해결책을 시도했다여기그리고여기, 그러나 그들 중 누구도 작동하지 않습니다. 어떻게 사용하나요?

편집하다: crontab에서 DISPLAY를 설정했지만 여전히 작동하지 않습니다. 우분투에서 같은 것을 시도했는데 모든 것이 잘 작동했습니다. 이것은 내 크론 라인입니다.

*/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"

내가 사용하고 있는 창 관리자 때문에 "계피" 비트가 있다는 점에 유의하세요. 노틸러스나 다른 창 관리자로 바꿔야 할 수도 있습니다. 또한 사용자를 첫 번째 매개변수로 지정했습니다. 누가 로그인했는지에 관계없이 작동하려면 나중에 더 모듈화되기 때문입니다.

관련 정보