Étant un utilisateur compulsif d’ordinateurs, je suis devant lui toute la journée. Je perds parfois la notion du temps lorsque je travaille sur ma maquette. J'ai besoin d'un service de notification pour me prévenir de l'heure actuelle, soit par une notification contextuelle, soit par un son en cours de lecture, ou les deux.
Pour le popup, j'ai trouvé le standard de notification Free Desktop qui utilise un API DBus .
J'ai pu créer une notification à l'aide de DFeet , un explorateur graphique DBUS. J'ai utilisé les arguments suivants:
"wakeup", 1234, "", "The time is", "9PM", [], [], 1
Cela fonctionne bien jusqu'à présent, mais comment puis-je aller plus loin d'ici?
cron
est-il toujours le moyen recommandé d'automatiser les actions basées sur le temps?Une solution complète serait appréciée et peut-être utile aux autres.
Comme je ne pouvais pas utiliser dbus-send
, j’ai plutôt écrit un script python. Le module pynotify utilise en interne l'API dbus
. Pour des coups de pied supplémentaires, j'ai ajouté un biscuit de fortune dans le message. Fonctionne comme un charme:
#!/usr/bin/env python
"""python 2.7 script that creates a notification using pynotify. It shows the current time and a small fortune cookie"""
try:
import pynotify
import time
import subprocess
if pynotify.init("Wakeup service"):
subprocess.Popen(["paplay", "/usr/share/sounds/ubuntu/stereo/message.ogg"])
# You can get more stock icons from here: http://stackoverflow.com/questions/3894763/what-icons-are-available-to-use-when-displaying-a-notification-with-libnotify
timeStr = time.strftime("%I:%M %p %d %b")
cookie = subprocess.check_output(["/usr/games/fortune", "-s"])
n = pynotify.Notification(timeStr, cookie, "/usr/share/app-install/icons/ktimer.png")
n.set_timeout(1)
n.show()
else:
print "problem initializing the pynotify module"
except Exception as exc:
print "Exception", exc
J'ai ensuite programmé ceci en utilisant cron
. L'entrée crontab
ressemble à ceci:
0,30 * * * * DISPLAY=:0 ./local/bin/notify_new.py
Mise à jour: Ajout d'une méthode pour lire un son en utilisant l'audio à impulsions
Vous pouvez utiliser un simple script Python, comme ceci:
#!/usr/bin/python
import dbus
import sys
bus = dbus.SessionBus()
notify = bus.get_object('org.freedesktop.Notifications', '/org/freedesktop/Notifications')
method = notify.get_dbus_method('Notify', 'org.freedesktop.Notifications')
method("wakeup", 1234, "", "The time is", "9PM", [], [], 1)
Vous pouvez envoyer des messages à l'aide de la commande dbus-send. Voir man: dbus-send pour plus de détails à ce sujet.