web-dev-qa-db-fra.com

Comment configurer une notification basée sur un minuteur?

É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?

  • Comment est-ce que j'appelle ceci de la ligne de commande?
  • Comment automatiser cette commande? cron est-il toujours le moyen recommandé d'automatiser les actions basées sur le temps?
  • Comment puis-je jouer des sons avec le popup? Soit via l'API FreeDesktop ou via un lecteur multimédia?

Une solution complète serait appréciée et peut-être utile aux autres.

8
HRJ

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

7
HRJ

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)
4
mspanc

Vous pouvez envoyer des messages à l'aide de la commande dbus-send. Voir man: dbus-send pour plus de détails à ce sujet.

2
Jo-Erlend Schinstad