J'ai créé un script qui devrait m'avertir quand je lis un nouveau chapitre du manga. J'ai utilisé la commande notify-send pour le faire. Le programme fonctionne lorsque j'essaie de l'exécuter dans un terminal. La notification est affichée. Cependant, lorsque j'ai placé ceci dans ma crontab, la notification ne s'affiche pas. Je suis à peu près sûr que le programme est en cours d'exécution depuis que je l'ai créé pour créer un fichier pour moi. Le fichier a été créé, mais la notification ne s’est pas affichée.
Voici mon script
#!/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
Et voici ce que j'ai écrit dans ma crontab
0,15,30,45 12-23 * * 3 /home/jchester/bin/opreminder.sh
cron
notify-send
utilisateur158335
la source
la source
export DISPLAY=:0
.16.04
, celui - ci a fonctionné pour moi*/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"
Réponses:
Les commandes doivent référencer leur emplacement. Donc
notify-send
doit être/usr/bin/notify-send
Toutes les commandes doivent avoir leur chemin complet.
Utilisez la
whereis notify-send
commande pour voir où "vivent" vos commandesla source
notify-send
est sur lePATH
même pour un travail cron. Voir ma réponse ci-dessous.Les choses semblent être différentes le 13.04, du moins dans Gnome Shell.
Tout d’abord, voici ce qui est
env
imprimé lorsqu’il est exécuté à partirzzyxy
du travail cron de l’utilisateur (et non de celui de la racine):Pour se rendre
notify-send
au travail, il semble nécessaire de définir laDBUS_SESSION_BUS_ADDRESS
variable d'environnement, comme le commentait DahitiF sur ubuntuforums.org. Ajoutez simplement ce qui suit à la description de votre travail actuel:Il ne semble pas nécessaire de définir
DISPLAY
.la source
gnome-session
àxfce4-session
.gnome-session
et utilisé à lagnome-shell
place (attention il y a aussi unegnome-shell-calendar-server
sortepgrep
sera obtenir 2 PIDS). J'avais aussi besoinDISPLAY=:0
parce que j'utilise 2 écrans physiques et que cela n'a pas été défini. Merci!openbox
pourgnome-session
.La commande
notify-send
n’affichera pas le message sur votre écran si elle est lancée par cron. Ajoutez simplement l'affichage cible en haut de votre script, par exemple:la source
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
dans un terminal pour vous assurer que votre écran le soit vraiment:0
(comme d'habitude, mais pas toujours).Pour Ubuntu 14.04 au moins, la réponse de klrmr ci - dessus est la bonne réponse. Il ne semble pas nécessaire de définir DISPLAY ou d’articuler des chemins complets pour notify-send ou quoi que ce soit normalement dans $ PATH.
Vous trouverez ci-dessous un script cron que j'utilise pour arrêter une machine virtuelle lorsque l'état de la batterie d'un ordinateur portable devient trop faible. Le paramètre de ligne DBUS_SESSION_BUS_ADDRESS dans la réponse de klrmr ci-dessus est la modification qui a finalement permis aux avertissements de fonctionner correctement.
la source
Dans mon cas avec Ubuntu 16.04, tout chemin explicite était requis, je résous le problème en ajoutant simplement
aux premières lignes de la crontab, avant l'appel notify-send.
la source
Le premier responsable est votre fichier crontab, vous devez également mentionner le nom d'utilisateur avec lequel le script doit être exécuté. Il est préférable de le conserver en tant que root.
et ensuite vous devez utiliser le nom d'utilisateur de l'utilisateur d'interface graphique dans le script et le préfixer de façon à notifier-envoyer avec "sudo ou su" pour exécuter la commande en tant qu'utilisateur propriétaire de l'interface graphique.
Exemple :
ou
où
gnome_user_name
est le nom d'utilisateur de l'utilisateur qui a démarré la session graphique, c'est vous qui vous êtes connecté, et si vous voulez en faire une sélection dynamique, vous pouvez l'obtenir à partir deExemple :
ou
la source
oniltonmaciel
, mais$GNOME_USER
indiqueraitonilton+
(ne fonctionne pas)La façon dont le binaire récupère l'adresse dbus semble avoir changé récemment. Sur Ubuntu 15.04 (Vivid Vervet) avec "notify-send 0.7.6", les deux variables suivantes sont nécessaires:
L'instruction de 'krlmlr' évalue correctement et définit l'adresse correcte, mais la boîte de dialogue ne s'ouvre pas à partir d'un travail cron.
la source
Si votre script dans crontab est exécuté en tant que root, les réponses ci-dessus ne fonctionneront probablement pas. Essayez cette fonction, qui me convient très bien en 16.04:
(Source: https://unix.stackexchange.com/a/344377/7286 )
la source
Mieux vaut compter sur le
dbus-session
processus, il devrait être en cours d’exécution pour tous les systèmes où ilDBUS_SESSION_BUS_ADDRESS
est présent.Créez un script:
Rendez-le exécutable:
Ajoutez-le à crontab:
la source
Cela a pris une éternité pour faire fonctionner ubuntu 15.10, il a fallu ajouter une source pour que les utilisateurs env env normaux. mon affichage était: 1 pour une raison également. Utilisation du pid des premiers résultats de gnome-session pour la recherche DBUS_SESSION_BUS_ADDRESS.
la source
Je viens de recevoir ceci pour fonctionner avec le bureau cannelle sur Ubuntu 15.10, en utilisant la recette suivante:
L'astuce consistait à réaliser que la «session de cannelle» est trop longue pour que pgrep puisse trouver:
J'ai aussi dû utiliser \ grep car mon grep est alias
la source
J'utilise i3 sur Ubuntu 18.04. Ma façon de résoudre ceci est:
* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"
la source
Problème provoqué par l'appel
python3
de crontab avecUTF-8
locale.TL; DR: appel préfixe dans crontab w / locale comme dans:
Voir aussi click et python3 :
la source
Pour tous les scripts crontab utilisant libnotify, j'utilise ceci:
Cela fonctionne même si j'utilise cron en mode racine.
la source
Tout ce dont vous avez besoin est X_user et X_userid. Remplacez les deux dans la commande ci-dessous.
Solution avec systemd
/etc/systemd/system/opreminder.service # fichier de service
/etc/systemd/system/opreminder.timer #timer fichier
/home/jchester/bin/opreminder.sh #Le script
Pas besoin d'utiliser sudo -u si le fichier de service est déjà défini avec l'utilisateur prévu
Source: https://wiki.archlinux.org/index.php/Desktop_notifications#Usage_in_programming
la source