¿Cómo configuro una notificación basada en temporizador?

9

Siendo un usuario compulsivo de la computadora, estoy frente a él todo el día. A veces pierdo la noción del tiempo cuando estoy trabajando en mi comp. Necesito un servicio de notificaciones para alertarme de la hora actual, ya sea mediante una notificación emergente o un sonido que se está reproduciendo o ambos.

Para la ventana emergente, encontré el estándar de notificación Free Desktop que usa una API DBus .

Pude crear una notificación usando DFeet , un explorador gráfico DBUS. Usé los siguientes argumentos:

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

Funciona bien hasta ahora, pero ¿cómo puedo llevarlo más lejos desde aquí?

  • ¿Cómo invoco esto desde la línea de comandos?
  • ¿Cómo automatizo este comando? ¿ cronSigue siendo la forma recomendada de automatizar acciones basadas en el tiempo?
  • ¿Cómo juego los sonidos junto con la ventana emergente? ¿A través de la API de FreeDesktop o de un reproductor multimedia?

Una solución completa sería apreciada y quizás útil para otros también.

HRJ
fuente
1
En cuanto a los puntos 1, 2, dbus-sendpodría ser la aplicación a utilizar, y sí crones la forma recomendada.
enzotib
dbus-sendno funciona porque no admite algunos parámetros requeridos por esta API. Estoy buscando en pynotify.
HRJ
+1 por necesitar su computadora para notificarle sobre la hora actual :) (pero en serio, esa es una buena pregunta)
Rafał Cieślak

Respuestas:

7

Como no podía usar dbus-send, escribí un script de Python. El módulo pynotify usa internamente la dbusAPI. Para patadas adicionales, agregué una galleta de la fortuna en el mensaje. Funciona de maravilla:

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

Luego programé esto usando cron. La crontabentrada se ve así:

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

Actualización : se agregó un método para reproducir un sonido usando audio de pulso

HRJ
fuente
4

Puede usar un script Python simple, como este:

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

Puede enviar mensajes utilizando el comando dbus-send. Ver man: dbus-send para más detalles sobre eso.

Jo-Erlend Schinstad
fuente
3
Gracias por el puntero a dbus-send. Desafortunadamente, no funciona en este caso porque dbus-sendno se puede crear un diccionario con las variantes que requiere la API
HRJ