Come posso impostare una notifica basata sul timer?


9

Essendo un utente di computer compulsivo, ci sono davanti tutto il giorno. A volte perdo la cognizione del tempo quando lavoro sul mio computer. Ho bisogno di un servizio di notifica per avvisarmi dell'ora corrente, tramite una notifica popup o un suono riprodotto o entrambi.

Per il popup, ho trovato lo standard di notifica Free Desktop che utilizza un'API DBus .

Sono stato in grado di creare una notifica utilizzando DFeet , un esploratore grafico DBUS. Ho usato i seguenti argomenti:

"wakeup", 1234, "", "The time is", "9PM", [], [], 1

Finora funziona bene, ma come posso andare oltre da qui?

  • Come posso invocarlo dalla riga di comando?
  • Come automatizzo questo comando? È cronancora il modo raccomandato di automatizzare le azioni basate sul tempo?
  • Come si riproducono i suoni insieme al popup? O tramite l'API di FreeDesktop o tramite un lettore multimediale?

Una soluzione completa sarebbe apprezzata e forse utile anche per gli altri.


1
Per quanto riguarda i punti 1, 2, dbus-sendpotrebbe essere l'app da utilizzare e sì cronè il modo consigliato.
enzotib,

dbus-sendnon funziona perché non supporta alcuni parametri richiesti da questa API. Sto esaminando pynotify.
HRJ,

+1 per aver bisogno del tuo computer per avvisarti dell'ora corrente :) (ma seriamente - questa è una buona domanda)
Rafał Cieślak

Risposte:


7

Dato che non potevo usare, dbus-sendho scritto invece uno script Python. Il modulo pynotify utilizza internamente l' dbusAPI. Per i calci extra ho aggiunto un biscotto della fortuna nel messaggio. Funziona come un fascino:

#!/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

Ho quindi pianificato questo usando cron. La crontabvoce è simile a:

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

Aggiornamento : aggiunto un metodo per riprodurre un suono utilizzando l'audio a impulsi


4

Puoi usare un semplice script Python, in questo modo:

#!/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)

3

È possibile inviare messaggi utilizzando il comando dbus-send. Vedi man: dbus-send per maggiori dettagli a riguardo.


3
Grazie per il puntatore a dbus-send. Sfortunatamente, in questo caso non funziona perché dbus-sendnon è possibile creare un dizionario con varianti richieste dall'API
HRJ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.