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 можно скачать отсюда.
Этот пост является кросспостом из моего блога.
![](/media/av/digiwhite1254601028.jpeg/)
+ 0 -
Интересная штука, жаль у меня не N900.
Строго говоря штука получилась достаточно универсальная, должна работать практически на любом линуксе с дбасом. В частности отлаживал на ноуте с дебиан сквизом. Просто деб-пакет готовил именно для маемо.
Вах! Интересно).. А можно с помощью этой штуки как-нибудь плеером управлять при заблокированном экране? Вы для музыки MPD используете? А клиент какой?
Использовал когда-то. Сейчас cmus. Но не суть важно. Думаю можно повесить фильтры на какие-нить дбас-события с вызовом того же mpc для контроля mpd, а потом либо использовать уже готовые события, либо генерировать свои с помощью dbus-send. Получится своеобразный шлюз между дбасом и протоколом мпд. В общем, я думаю можно много применений дбаскрону найти. Похоже у меня получился своеобразный аналог нетката для дбаса =)
спасибо, запости новость на talks.maemo.org. там как раз пару людей делают коммьюнити прошивку новую, может включат, и им в чем-то это поможет.
на канале девам кинул ссылку на гит, ну и Jaffa объявил в новостях — http://twitter.com/#!/mwkn/status/13999032728813568
так что отпишись на форуме, там самое главное.
Devel: dbuscron: cron-like daemon to launch actions on DBus events https://github.com/kstep/dbuscron #maemo
так что отпишись на форуме, там самое главное.
В русском языке есть слово "шедулер"? Первый раз слышу. Что это?
Шедулер -> Scheduler -> Планировщик
Круто. Надо попробовать, может выкину свои самописные костыли для отслеживания событий от mpris (вроде
dbus-monitor type='signal',interface='org.freedesktop.MediaPlayer' --profile |while read LINE; do...
).
Да, будет такая строчка в dbuscrontab-е:
s signal * org.freedesktop.MediaPlayer * * * * your script here
И уже в скрипте можешь анализировать всякие $DBUS_* переменные.
s signal * org.freedesktop.MediaPlayer * * * * your script here
И уже в скрипте можешь анализировать всякие $DBUS_* переменные.
># Подключить интернет по PPTP при включении домашнего wifi-я
вообще-то это по идее можно сделать и через icd2 (т.е. из менюшки).
вообще-то это по идее можно сделать и через icd2 (т.е. из менюшки).
Из менюшки много чего можно, то цуко меню пухнет. Гораздо лучше чтобы оно само всё делало, а не напрягало меня тыканием в меню. А скрипты-хуки на icd2 тоже повесить можно, но так много где можно развешать хуков в разных местах. Но тогда их всех не упомнишь и управлять этими хуками становиться практически нереально. А тут они у меня все в одном файле. Удобно и просто.
есть такое событие
dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.Answer
только вот как его запускать, тогда, когда вставлена гарнитура ?
dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.Answer
только вот как его запускать, тогда, когда вставлена гарнитура ?
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 нужно потому, что событие это возникает как при втыкании, так и при вытаскивании ушек, и как различать эти два события на уровне дбас-фильтров я не нашёл =(
Да и это всё одной строчкой. < spam mode on >Кстати последняя версия дбаскрона умеет брать конфиги из каталога (по-умолчанию /etc/dbuscrontab.d), так что можно каждую группу событий выделит в отдельный конфиг-модуль< /spam mode off >
Спасибо, давно не заходил, и забыл уже.
оказывается, когда гарнитура вставлена, на гарнитуре можно жать кнопку для ответа, а если два раза нажать, то сброс)
а также поставил espeacker, чтобы при входящем вызове, слышать кто звонит. и отвечать/неотвечать не вынимая телефон из кармана.
оказывается, когда гарнитура вставлена, на гарнитуре можно жать кнопку для ответа, а если два раза нажать, то сброс)
а также поставил espeacker, чтобы при входящем вызове, слышать кто звонит. и отвечать/неотвечать не вынимая телефон из кармана.
у меня вот такой вопрос. телефон перестал реагировать на подключение / отключение гарнитуры.
/sys/.../headphone/state это еще не проверял, вечером посмотрю. а кто пишет в этот файл - connected/disconected ?
можно ли послать dbus-send, для ручного включения гарнитуры?
/sys/.../headphone/state это еще не проверял, вечером посмотрю. а кто пишет в этот файл - connected/disconected ?
можно ли послать dbus-send, для ручного включения гарнитуры?
Послать можно, главное параметры правильно подобрать, чтобы точно замимикрировать под 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 подключение.
но тоже скрипт не выполняется.
может подскажите где какие логи смотреть?
S signal * com.nokia.wlancond.signal /com/nokia/wlancond/signal connected * wlan0 run-standalone.sh /home/user/script.sh
не выполняется скрипт..
и как тут определить, при каком подключении запускать а при каком не запускать ?
нашел в репах dbus-scripts-setting
там возможно записать задания, выбрать wifi подключение.
но тоже скрипт не выполняется.
может подскажите где какие логи смотреть?