Comment configurer une notification basée sur une minuterie?

9

Étant un utilisateur d'ordinateur compulsif, je suis devant elle toute la journée. Je perds parfois le temps lorsque je travaille sur mon ordinateur. J'ai besoin d'un service de notification pour m'alerter de l'heure actuelle, soit par une notification contextuelle, soit par un son en cours de lecture, soit par les deux.

Pour le popup, j'ai trouvé la norme de notification Free Desktop qui utilise une 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 puis-je l'invoquer à partir de la ligne de commande?
  • Comment automatiser cette commande? Est-ce crontoujours le moyen recommandé d'automatiser les actions basées sur le temps?
  • Comment jouer des sons avec le popup? Soit via l'API FreeDesktop, soit via un lecteur multimédia?

Une solution complète serait appréciée et peut-être utile à d'autres aussi.

HRJ
la source
1
Concernant les points 1, 2, dbus-sendpourrait être l'application à utiliser, et oui cronest la voie recommandée.
enzotib
dbus-sendne fonctionne pas car il ne prend pas en charge certains paramètres requis par cette API. Je regarde pynotify.
HRJ
+1 pour avoir besoin de votre ordinateur pour vous informer de l'heure actuelle :) (mais sérieusement - c'est une bonne question)
Rafał Cieślak

Réponses:

7

Comme je ne pouvais pas l'utiliser, dbus-sendj'ai écrit un script python à la place. Le module pynotify utilise en interne l' dbusAPI. Pour des coups de pied supplémentaires, j'ai ajouté un cookie 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 planifié cette utilisation cron. L' crontabentrée ressemble à:

0,30 * * * * DISPLAY=:0 ./local/bin/notify_new.py

Mise à jour : ajout d'une méthode pour lire un son en utilisant le son pulsé

HRJ
la source
4

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)
mspanc
la source
3

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

Jo-Erlend Schinstad
la source
3
Merci pour le pointeur vers dbus-send. Malheureusement, cela ne fonctionne pas dans ce cas car dbus-sendne peut pas créer un dictionnaire avec des variantes dont l'API a besoin
HRJ