Como configuro uma notificação baseada em timer?

8

Sendo um usuário de computador compulsivo, estou na frente dele o dia todo. Às vezes, perco a noção do tempo quando estou trabalhando na minha composição. Eu preciso de um serviço de notificação para me alertar sobre a hora atual, seja por uma notificação pop-up ou um som sendo tocado ou ambos.

Para o pop-up, encontrei o padrão de notificação de área de trabalho gratuita que usa um DBus API .

Eu consegui criar uma notificação usando o DFeet , um explorador gráfico de DBUS. Eu usei os seguintes argumentos:

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

Funciona bem até agora, mas como posso ir mais longe daqui?

  • Como invoco isso da linha de comando?
  • Como eu automatizo este comando? A cron ainda é a maneira recomendada de automatizar ações baseadas no tempo?
  • Como faço para reproduzir sons junto com o pop-up? Quer através da API FreeDesktop ou através de um media player?

Uma solução completa seria apreciada e talvez útil para outros também.

    
por HRJ 16.08.2011 / 17:57

3 respostas

7

Como não consegui usar dbus-send , escrevi um script python. O módulo de pynotify usa internamente a API dbus . Para chutes extras, adicionei um biscoito da sorte na mensagem. Funciona como um encanto:

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

Eu agendei isso usando cron . A entrada crontab se parece com:

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

Atualizar : Adicionado um método para reproduzir um som usando áudio por pulso

    
por HRJ 16.08.2011 / 22:59
4

Você pode usar um script Python simples 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)
    
por mspanc 06.08.2012 / 12:12
2

Você pode enviar mensagens usando o comando dbus-send. Veja man: dbus-send para mais detalhes sobre isso.

    
por Jo-Erlend Schinstad 16.08.2011 / 18:22