Я сделал сценарий, который должен уведомлять меня, когда я читаю новую главу манги. Я использовал команду notify-send для этого. Программа работает, когда я пытаюсь запустить ее в терминале. Уведомление показывается. Однако, когда я поместил это в свой crontab, уведомление не показывается. Я уверен, что программа работает, так как я сделал это, чтобы создать файл для меня. Файл был создан, но уведомление не показывалось.
Вот мой сценарий
#!/bin/bash
#One Piece Manga reminder
#I created a file named .newop that contains the latest chapter.
let new=$(cat ~/.newop)
wget --read-timeout=30 -t20 -O .opreminder.txt http://www.mangareader.net/103/one-piece.html
if (( $(cat .opreminder.txt | grep "One Piece $new" | wc -l) >=1 ))
then
(( new+=1 ))
echo $new
echo $new > ~/.newop
notify-send "A new chapter of One Piece was released."
else
notify-send "No new chapter for One Piece."
notify-send "The latest chapter is still $new."
fi
exit
И вот что я написал в моем crontab
0,15,30,45 12-23 * * 3 /home/jchester/bin/opreminder.sh
cron
notify-send
user158335
источник
источник
export DISPLAY=:0
.16.04
этот работал для меня*/1 * * * * eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";/usr/bin/notify-send -i appointment -c "im" "Keep Working"
Ответы:
Команды должны ссылаться на их местоположение. Так
notify-send
должно быть/usr/bin/notify-send
Все команды должны иметь свой полный путь.
Используйте
whereis notify-send
команду, чтобы увидеть, где ваши команды "живут"источник
notify-send
находится наPATH
даже хрон. Смотрите мой ответ ниже.Вещи, кажется, отличаются от 13.04, по крайней мере, в Gnome Shell.
Во-первых, это то, что
env
печатается при запуске из пользовательскогоzzyxy
(не root) задания cron:Чтобы приступить
notify-send
к работе, кажется, необходимо установитьDBUS_SESSION_BUS_ADDRESS
переменную среды, согласно комментарию DahitiF на ubuntuforums.org. Просто добавьте следующее к вашей фактической должностной инструкции:Кажется, нет необходимости устанавливать
DISPLAY
.источник
gnome-session
наxfce4-session
.gnome-session
и использоватьgnome-shell
вместо (будьте осторожны , есть иgnome-shell-calendar-server
такpgrep
будет получить 2 ИДП). Я также нуждался,DISPLAY=:0
потому что я использую 2 физических экрана, и это не было определено. Благодарность!openbox
наgnome-session
.Команда
notify-send
не будет отображать сообщение на вашем экране при запуске cron. Просто добавьте целевой дисплей вверху вашего скрипта, например:источник
gdk_mir_display_open Failed to connect to Mir: Failed to connect to server socket: No such file or directory Option parsing failed: Cannot open display:
echo $DISPLAY
в терминале, чтобы убедиться, что ваш дисплей действительно:0
(как правило, но не всегда).По крайней мере, для Ubuntu 14.04 ответ klrmr выше является правильным ответом. По-видимому, нет необходимости устанавливать DISPLAY или указывать полные пути для уведомления-отправки или чего-либо иного, как правило, в $ PATH.
Ниже приведен скрипт cron, который я использую для выключения виртуальной машины, когда состояние батареи ноутбука становится слишком низким. Установка строки DBUS_SESSION_BUS_ADDRESS в ответе klrmr выше - это модификация, которая, наконец, заставила предупреждения работать правильно.
источник
В моем случае с Ubuntu 16.04 требовался любой явный путь, я решаю проблему, просто добавляя
на первых линиях crontab, перед вызовом notify-send.
источник
Первым виновником является ваш файл crontab, вам также нужно указать имя пользователя, с которым должен выполняться скрипт, лучше сохранить его как root
а затем вы должны использовать user_name пользователя GUI внутри скрипта и добавить его к уведомлению-отправке с помощью "sudo или su", чтобы выполнить команду как пользователь, который владеет GUI
пример :
или
где
gnome_user_name
имя пользователя, который запустил сеанс графического интерфейса пользователя, это вы вошли в систему, и если вы хотите сделать его динамическим выбором, вы можете получить его отпример :
или
источник
oniltonmaciel
, но$GNOME_USER
будет отображатьсяonilton+
(не работает)Способ, которым двоичный файл получает адрес dbus, в последнее время, похоже, изменился. В Ubuntu 15.04 (Vivid Vervet) с уведомлением-отправкой 0.7.6 необходимы следующие две переменные:
Утверждение 'krlmlr' оценивает отлично и устанавливает правильный адрес, но диалог не появляется из задания cron.
источник
Если ваш скрипт в crontab работает от имени root, ответы, приведенные выше, вероятно, не будут работать. Попробуйте эту функцию, которая отлично работает для меня в 16.04:
(Источник: https://unix.stackexchange.com/a/344377/7286 )
источник
Лучше полагаться на
dbus-session
процесс, он должен работать для всех систем, гдеDBUS_SESSION_BUS_ADDRESS
присутствует.Создать скрипт:
Сделайте его исполняемым:
Добавьте его в crontab:
источник
Это заняло целую вечность, чтобы заставить работать на Ubuntu 15.10. Пришлось добавить источник, чтобы пользователи получали нормальные env vars. мой дисплей был: 1 по какой-то причине. Использование pid результатов первого сеанса gnome для поиска DBUS_SESSION_BUS_ADDRESS.
источник
Я только что получил это для работы с рабочим столом cinnamon в Ubuntu 15.10, используя следующий рецепт:
Хитрость заключалась в том, чтобы понять, что «cinnamon-session» слишком длинен для pgrep:
Я также должен был использовать \ grep, потому что мой grep связан с
источник
Я использую i3 на Ubuntu 18.04. Мой способ решить это:
* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"
источник
Проблема вызвана вызовом
python3
в crontab сUTF-8
локалью.TL; DR: вызов префикса в crontab с указанием локали:
Смотрите также click и python3 :
источник
Для всех скриптов crontab, которые используют libnotify, я использую это:
Это работает, даже если я использую cron в режиме root.
источник
Все, что вам нужно, это X_user и X_userid. Замените оба в команде ниже.
Решение с помощью systemd
/etc/systemd/system/opreminder.service # Сервисный файл
/etc/systemd/system/opreminder.timer #timer file
/home/jchester/bin/opreminder.sh # Сценарий
Нет необходимости использовать sudo -u, если служебный файл уже настроен для предполагаемого пользователя
Источник: https://wiki.archlinux.org/index.php/Desktop_notifications#Usage_in_programming
источник