Wie richte ich eine timerbasierte Benachrichtigung ein?

9

Als zwanghafter Computerbenutzer bin ich den ganzen Tag davor. Ich verliere manchmal den Überblick über die Zeit, wenn ich an meinem Comp arbeite. Ich benötige einen Benachrichtigungsdienst, um mich über die aktuelle Uhrzeit zu informieren, entweder durch eine Popup-Benachrichtigung oder einen abgespielten Sound oder beides.

Für das Popup habe ich den Free Desktop-Benachrichtigungsstandard gefunden, der eine DBus-API verwendet .

Ich konnte eine Benachrichtigung mit DFeet , einem grafischen DBUS-Explorer, erstellen. Ich habe die folgenden Argumente verwendet:

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

Bisher funktioniert es gut, aber wie kann ich es von hier aus weiter bringen?

  • Wie rufe ich dies über die Befehlszeile auf?
  • Wie automatisiere ich diesen Befehl? Ist cronimmer noch die empfohlene Methode zur Automatisierung zeitbasierter Aktionen?
  • Wie spiele ich Sounds zusammen mit dem Popup? Entweder über die FreeDesktop-API oder über einen Media Player?

Eine vollständige Lösung wäre wünschenswert und vielleicht auch für andere nützlich.

HRJ
quelle
1
In Bezug auf die Punkte 1, 2 dbus-sendkönnte die App verwendet werden, und ja cronist der empfohlene Weg.
Enzotib
dbus-sendfunktioniert nicht, da einige von dieser API erforderliche Parameter nicht unterstützt werden. Ich untersuche pynotify.
HRJ
+1 dafür, dass Sie Ihren Computer benötigen, um Sie über die aktuelle Zeit zu informieren :) (aber im Ernst - das ist eine gute Frage)
Rafał Cieślak

Antworten:

7

Da ich nicht verwenden konnte, dbus-sendschrieb ich stattdessen ein Python-Skript. Das Pynotify-Modul verwendet intern die dbusAPI. Für zusätzliche Tritte habe ich der Nachricht einen Glückskeks hinzugefügt. Klappt wunderbar:

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

Ich habe das dann mit geplant cron. Der crontabEintrag sieht aus wie:

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

Update : Es wurde eine Methode zum Abspielen eines Sounds mit Puls-Audio hinzugefügt

HRJ
quelle
4

Sie können ein einfaches Python-Skript wie folgt verwenden:

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

Sie können Nachrichten mit dem Befehl dbus-send senden. Siehe man: dbus-send für weitere Details dazu.

Jo-Erlend Schinstad
quelle
3
Danke für den Hinweis auf dbus-send. Leider funktioniert es in diesem Fall dbus-sendnicht, da kein Wörterbuch mit Varianten erstellt werden kann, die für die API erforderlich sind
HRJ