Como configuro uma notificação baseada em timer?

9

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

Para o pop-up, encontrei o padrão de notificação do Free Desktop que usa uma API DBus .

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

Até agora, funciona bem, mas como posso ir mais longe daqui?

  • Como invoco isso na linha de comando?
  • Como automatizo este comando? cronAinda é a maneira recomendada de automatizar ações baseadas no tempo?
  • Como tocar sons junto com o pop-up? Através da API do FreeDesktop ou através de um media player?

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

HRJ
fonte
11
Em relação aos pontos 1, 2, dbus-sendpoderia ser o aplicativo a ser usado, e sim croné o caminho recomendado.
enzotib
dbus-sendnão está funcionando porque não suporta alguns parâmetros exigidos por esta API. Eu estou olhando pynotify.
HRJ 16/08
+1 para precisando de você computador para notificá-lo sobre o tempo atual :) (mas sério - que é uma boa pergunta)
Rafał Cieślak

Respostas:

7

Como não podia usar dbus-send, escrevi um script python. O módulo pynotify usa internamente a dbusAPI. 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 crontabentrada se parece com:

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

Atualização : Adicionado um método para reproduzir um som usando áudio de pulso

HRJ
fonte
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)
mspanc
fonte
3

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

Jo-Erlend Schinstad
fonte
3
Obrigado pelo ponteiro para dbus-send. Infelizmente, ele não funciona neste caso, porque dbus-sendnão pode criar um dicionário com variantes que a API requer
HRJ