kstep 12.12.2010 19:22

Мой OpenSource проектDbuscron — шедулер dbus-событий для N900

После некоторых доработок решил отдать на откуп сообществу свой cron-подобный шедулер DBUS-событий. Писал я его для своей N900, так что deb-пакет расчитан именно на Maemo 5, но использовать саму программу можно в любом Linux-е с DBUS-ом. Писано на питоне.

Upd: на данный момент допилил до версии 1.3 (скачать пакет для Маемо) и запостил анонс на talk.maemo.org. За обновлениями и новостями следите в моём уютненьком. Всем спасибо за советы и поддержку!


Работает очень просто: запускаем dbuscron и радуемся жизни =)

Хотя для начала лучше настроить. Формат dbuscrontab-а (который лежит в /etc/dbuscrontab) похож на crontab-овский. Каждая строчка — фильтр для DBUS события. Эти фильтры состоят из 9 полей: шина («S» — системная, «s» — сессионная), тип события (signal, method_call, method_return или error), имя назначения на шине, имя интерфейса, «путь» к объекту, имя метода, имя получателя, аргументы и команда для запуска.

Каждое поле может иметь несколько значений через запятую, либо звёздочку (*), если фильтровать по этому полю не надо. Поле с аргументами может содержать несколько аргументов, разделённых точкой с запятой: событие пройдёт если эти значения совпадут со значениями аргументов, с которыми вызвано это DBUS-событие.

Также можно указывать переменные среды в произвольном месте конфига в виде «ИМЯ=ЗНАЧЕНИЕ».

Кроме того следующие переменные среды всегда устанавливаются самим демоном при вызове команды:
DBUS_ARG# (где # это номер от 0 до DBUS_ARGN) — аргументы события,DBUS_ARGN — число аргументов,DBUS_SENDER — имя отправителя события,DBUS_DEST — имя получателя события,DBUS_IFACE — интерфейс,DBUS_PATH — путь к объекту,DBUS_MEMBER — вызванный метод,DBUS_BUS — шина, по которой пришло событие («session» или «system»),DBUS_TYPE — тип событие (signal, method_call, method_return или error).
Пустые строки и строки, начинающиеся на «#» как всегда игнорируются =)

Можно долго распинаться по поводу возможностей, но я лучше приведу в пример свой рабочий конфиг с комментами:

# Остановить плеер при вынимани наушников
S signal * org.freedesktop.Hal.Manager /org/freedesktop/Hal/Manager DeviceRemoved * * run-standalone.sh /opt/userscripts/mpcontrol.sh stop
# Произнести номер звонящего с помощью espeak
S signal * com.nokia.csd.Call /com/nokia/csd/call Coming * * run-standalone.sh /opt/userscripts/tasks/speak-caller.sh
# Подключить интернет по PPTP при включении домашнего wifi-я
S signal * com.nokia.wlancond.signal /com/nokia/wlancond/signal connected * wlan0 run-standalone.sh /opt/userscripts/tasks/connect-pptp.sh
# Отключить этот инет
S signal * com.nokia.wlancond.signal /com/nokia/wlancond/signal disconnected * wlan0 run-standalone.sh /opt/userscripts/tasks/disconnect-pptp.sh
# Переключиться на 3G при включении сотового коннекта, чтобы быстрее было =)
S signal * com.nokia.csd.GPRS.Context /com/nokia/csd/gprs/0 Connected * * /opt/userscripts/radiomode.sh both
# При отключении сотового инета, переключиться на GSM, чтобы батарейку сохранить
S signal * com.nokia.csd.GPRS.Context /com/nokia/csd/gprs/0 Disconnected * * /opt/userscripts/radiomode.sh gsm
# Вот такое событие приходит при смене соты:
#S signal * Phone.Net /com/nokia/phone/net cell_info_change * status;lac;cid;mnc;mcc;services;userdata command
# Вот такое при смене имени оператора:
#S signal * Phone.Net /com/nokia/phone/net operator_name_change * status;opname;unk;mnc;mcc command
# При смене имени оператора, вывести попап-сообщение об этом:
S signal * Phone.Net /com/nokia/phone/net operator_name_change * * run-standalone.sh /opt/userscripts/tasks/show-opname.sh

В общем возможностей множество =) Пользуйтесь на здоровье.

Лежит это чудо на гитхабе вот тут: http://github.com/kstep/dbuscron. Готовый пакет для Maemo 5 можно скачать отсюда.

Этот пост является кросспостом из моего блога.


Тэги: dbus Linux maemo5 python scheduler
+ 13 -
Похожие Поделиться

digiwhite 12.12.2010 19:27 #
Интересная штука, жаль у меня не N900.
kstep 12.12.2010 22:35 #
Строго говоря штука получилась достаточно универсальная, должна работать практически на любом линуксе с дбасом. В частности отлаживал на ноуте с дебиан сквизом. Просто деб-пакет готовил именно для маемо.
shade 13.12.2010 01:50 #
Вах! Интересно).. А можно с помощью этой штуки как-нибудь плеером управлять при заблокированном экране? Вы для музыки MPD используете? А клиент какой?
kstep 13.12.2010 02:58 #
Использовал когда-то. Сейчас cmus. Но не суть важно. Думаю можно повесить фильтры на какие-нить дбас-события с вызовом того же mpc для контроля mpd, а потом либо использовать уже готовые события, либо генерировать свои с помощью dbus-send. Получится своеобразный шлюз между дбасом и протоколом мпд. В общем, я думаю можно много применений дбаскрону найти. Похоже у меня получился своеобразный аналог нетката для дбаса =)
ZogG 12.12.2010 19:40 #
спасибо, запости новость на talks.maemo.org. там как раз пару людей делают коммьюнити прошивку новую, может включат, и им в чем-то это поможет.
ZogG 12.12.2010 20:01 #
на канале девам кинул ссылку на гит, ну и Jaffa объявил в новостях — http://twitter.com/#!/mwkn/status/13999032728813568
Devel: dbuscron: cron-like daemon to launch actions on DBus events https://github.com/kstep/dbuscron #maemo


так что отпишись на форуме, там самое главное.
kstep 12.12.2010 22:39 #
Спасибо! Обязательно отпишусь. Главное зарегиться там =)
haku 12.12.2010 20:44 #
В русском языке есть слово "шедулер"? Первый раз слышу. Что это?
pluton 12.12.2010 22:14 #
В русском языке есть слово "шедулер"? Первый раз слышу. Что это?

Шедулер -> Scheduler -> Планировщик
haku 13.12.2010 01:12 #
Автор, в статье надо бы s/шедулер/планировщик/
Uzix 12.12.2010 22:52 #
Круто. Надо попробовать, может выкину свои самописные костыли для отслеживания событий от mpris (вроде dbus-monitor type='signal',interface='org.freedesktop.MediaPlayer' --profile |while read LINE; do... ).
kstep 13.12.2010 11:16 #
Да, будет такая строчка в dbuscrontab-е:

s signal * org.freedesktop.MediaPlayer * * * * your script here

И уже в скрипте можешь анализировать всякие $DBUS_* переменные.
hate 13.12.2010 12:43 #
># Подключить интернет по PPTP при включении домашнего wifi-я

вообще-то это по идее можно сделать и через icd2 (т.е. из менюшки).
kstep 13.12.2010 14:25 #
Из менюшки много чего можно, то цуко меню пухнет. Гораздо лучше чтобы оно само всё делало, а не напрягало меня тыканием в меню. А скрипты-хуки на icd2 тоже повесить можно, но так много где можно развешать хуков в разных местах. Но тогда их всех не упомнишь и управлять этими хуками становиться практически нереально. А тут они у меня все в одном файле. Удобно и просто.
alex.kostrukov 28.12.2010 22:08 #
есть такое событие
dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.Answer

только вот как его запускать, тогда, когда вставлена гарнитура ?
kstep 29.12.2010 17:18 #

S signal * org.freedesktop.Hal.Device /org/freedesktop/Hal/devices/platform_headphone Condition * ButtonPressed;connection /bin/grep/ -q disconnected /sys/devices/platform/gpio-switch/headphone/state || dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.Answer


Как-то так. Проверять содержимое /sys/.../headphone/state нужно потому, что событие это возникает как при втыкании, так и при вытаскивании ушек, и как различать эти два события на уровне дбас-фильтров я не нашёл =(
kstep 29.12.2010 17:19 #
После /bin/grep слеша не нужно, конечно, это я опечатался.
kstep 29.12.2010 17:22 #
Да и это всё одной строчкой. < spam mode on >Кстати последняя версия дбаскрона умеет брать конфиги из каталога (по-умолчанию /etc/dbuscrontab.d), так что можно каждую группу событий выделит в отдельный конфиг-модуль< /spam mode off >
alex.kostrukov 22.02.2011 12:58 #
Спасибо, давно не заходил, и забыл уже.
оказывается, когда гарнитура вставлена, на гарнитуре можно жать кнопку для ответа, а если два раза нажать, то сброс)

а также поставил espeacker, чтобы при входящем вызове, слышать кто звонит. и отвечать/неотвечать не вынимая телефон из кармана.
alex.kostrukov 22.02.2011 12:58 #
у меня вот такой вопрос. телефон перестал реагировать на подключение / отключение гарнитуры.

/sys/.../headphone/state это еще не проверял, вечером посмотрю. а кто пишет в этот файл - connected/disconected ?
можно ли послать dbus-send, для ручного включения гарнитуры?
kstep 01.03.2011 17:42 #
Послать можно, главное параметры правильно подобрать, чтобы точно замимикрировать под HAL-а. В /sys/... «пишут» драйвера. Не пишут даже, просто /sys это интерфейс к системе драйверов в ядре, если кратко, то есть чтение из /sys/.../headphone/state это на самом деле опрос драйвера гарнитуры о состоянии гарнитуры.
не получается (( как можно при подключении домашнего wifi запустить скрипт ?

S signal * com.nokia.wlancond.signal /com/nokia/wlancond/signal connected * wlan0 run-standalone.sh /home/user/script.sh

не выполняется скрипт..
и как тут определить, при каком подключении запускать а при каком не запускать ?

нашел в репах dbus-scripts-setting
там возможно записать задания, выбрать wifi подключение.

но тоже скрипт не выполняется.

может подскажите где какие логи смотреть?