Как я могу использовать 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} 
  • Резервное копирование баз данных с помощью cron
  • Динамическое изменение пароля root root каждый день
  • Инструмент командной строки XML-командной строки
  • Как сделать запуск Cron
  • Как убить процесс в скрипте оболочки, который работает через cron?
  • что означает crond : (* system *) RELOAD (/etc/cron.d/mycron)
  • Cron только время от времени отправляет электронную почту на выходе и ошибки
  • Cron не выполняет команду xinit
  • Задача Cron не регистрируется?
  • Сценарий для перезапуска приложения
  • Cron: у клиента нет разрешений на отправку в качестве этого отправителя.
  • Interesting Posts

    Как сопоставить другой столбец в файле 1 и file2 с awk?

    configure allowed_tcp_congestion_control через конфигурационные файлы в ядре linux

    Многоплатформенный веб-эмулятор терминала

    Операторы печати в реальном времени с тройником в интерактивном скрипте

    применять правила в списке файлов в GNU Make (или «для» инструкции в GNU Make)

    Почему .bash_profile не может установить переменную PS1?

    Нажмите Alt + <на венгерской клавиатуре (где <требует AltGr)

    Heirloom Toolchest tr: ошибка (ы), пытающаяся удалить дополнение к набору, содержащему многобайтовый символ?

    TrackPoint трудно контролировать после обновления Debian

    Как интегрировать звук с событиями на рабочем столе?

    Отключить движение указателя мыши

    Преобразование разрешений в вывод `ls -l` в восьмеричный

    Игнорировать файлы без расширения в ack

    Python 3 не видит пакеты, установленные root под другим пользователем

    Что-то случилось с Swap; он не используется по умолчанию

    Linux и Unix - лучшая ОС в мире.