Как настроить уведомление на основе таймера?

9

Будучи компульсивным пользователем компьютера, я весь день перед ним. Иногда я теряю счет времени, когда работаю над своим компом. Мне нужна служба уведомлений, чтобы предупредить меня о текущем времени, либо всплывающим уведомлением, либо воспроизводимым звуком, либо обоими способами.

Для всплывающего окна я нашел стандарт уведомлений Free Desktop, который использует DBus API .

Я был в состоянии создать уведомление с помощью DFeet , графический Dbus исследователь. Я использовал следующие аргументы:

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

Пока он работает нормально, но как я могу взять его дальше?

  • Как мне вызвать это из командной строки?
  • Как мне автоматизировать эту команду? Является ли по- cronпрежнему рекомендуемым способом автоматизации действий на основе времени?
  • Как мне воспроизводить звуки вместе с всплывающим окном? Или через API FreeDesktop или через медиаплеер?

Полное решение будет оценено и возможно полезно для других.

HRJ
источник
1
Что касается пунктов 1, 2, dbus-sendможет быть приложение для использования, и да, cronэто рекомендуемый способ.
энзотиб
dbus-sendне работает, потому что он не поддерживает некоторые параметры, требуемые этим API. Я смотрю в pynotify.
HRJ
+1 за то, что вам нужен компьютер, чтобы уведомить вас о текущем времени :) (но серьезно - это хороший вопрос)
Rafał Cieślak

Ответы:

7

Поскольку я не мог использовать, dbus-sendя написал вместо этого скрипт на Python. Модуль pynotify внутренне использует dbusAPI. Для дополнительных ударов я добавил в сообщение печенье с предсказанием. Работает как шарм:

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

Я тогда запланировал это, используя cron. В crontabвыглядит запись типа:

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

Обновление : добавлен метод воспроизведения звука с использованием импульсного звука.

HRJ
источник
4

Вы можете использовать простой скрипт на Python, например:

#!/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
источник
3

Вы можете отправлять сообщения с помощью команды dbus-send. Смотрите man: dbus-send для более подробной информации об этом.

Джо-Эрленд Шинстад
источник
3
Спасибо за указатель на dbus-send. К сожалению, это не работает в этом случае, потому что dbus-sendне может создать словарь с вариантами, которые требует API
HRJ