Как я могу использовать cron для отображения сообщений на экране через notify-send

Я обожаю с notify-send и cron (на машине с Arch), и я не могу понять, как их сочетать:

Я попробовал решение, данное здесь и здесь , но не работал. Как я могу их использовать?

EDIT: Я установил DISPLAY в crontab и все еще не работал. Я пробовал то же самое в Ubuntu, и там все работает нормально. Вот моя линия cron:

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

5 Solutions collect form web for “Как я могу использовать cron для отображения сообщений на экране через notify-send”

Единственное, что я могу предложить, это создать именованный канал и написать cron в трубе и создать небольшой скрипт, запускаемый диспетчером сеансов, который читает из канала и вызывает notify-send:

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

Затем в crontab /tmp/.cron2notify.s программу для записи /tmp/.cron2notify.s .

Не проверял это, но должен дать вам отправную точку для работы.

Я думаю, что notify-send полагается на D-Bus на большинстве систем, а наиболее распространенный метод обращения к dbus – через переменную $DBUS_SESSION_BUS_ADDRESS . Однако жесткое кодирование в crontab , вероятно, не очень эффективно, поскольку адрес шины изменяется каждый раз, когда вы запускаете новый экземпляр dbus, который обычно возникает при каждом входе в систему или при перезагрузке. Решение Arcege звучит как хороший обходной путь.

Я бы рекомендовал использовать сценарий оболочки. Чтобы эмулировать cron call notify-send, я перешел в свою собственную систему с помощью «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 

И в cron:

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

Обратите внимание, что бит «корицы» существует, потому что я использую диспетчер окон. Вероятно, вам придется заменить его на наутилус или что-то еще, что у вас есть в качестве оконного менеджера. У меня также есть пользователь, указанный в качестве первого аргумента, потому что он делает его более модульным позже, если вы хотите, чтобы это работало независимо от того, кто вошел в систему.

Я попытался использовать ответ Арсеге, но не смог заставить его работать: цикл while заканчивается после того, как первая строка будет записана в именованный канал. То, что сработало для меня, было похоже на аналогичный скрипт с бесконечным циклом, в котором я захватываю сигналы, отправленные из cron, а затем вызываю notify-send. Ниже приведена программа «уведомлять-вперед»:

 #! /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 

Альтернатива: вы можете бороться со всем, что вы делаете, или просто использовать опцию xmessage:

  MSSG="/tmp/mssg-file-${RANDOM}" echo -e " MESSAGE \n ==========\n Done with task, YEY. " > ${MSSG} xmessage -center -file ${MSSG} -display :0.0 [[ -s ${MSSG} ]] && rm -f ${MSSG} 
  • запустить xscreensaver с cron @ reboot, запуск ubuntu, сервис / deamon?
  • Вставьте переменную и сохраните переменную
  • vixie-cron.x86_64, похоже, не выполняет задания на crontab
  • Запустить приложение gui при запуске
  • Как я могу запустить команду cron с существующими переменными окружающей среды?
  • Каков наилучший способ подключения к программе cron без TTY
  • Как я могу увидеть все записи cron в CentOs7
  • Есть ли что-нибудь в unix crontab, чтобы определить, что это должно быть выполнено в стандартное время PST / CST?
  • Не удается выполнить ssh на удаленную машину, используя сценарий оболочки в Crontab
  • Исключая конкретную дату и время в cronjob
  • Горизонтальное конкатенирование периодически
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.