masai 27.07.2009 22:15
Жизнь в консоли — Управляем Gajim из командной строки
Gajim — это популярный и активно развивающийся Jabber-клиент, написанный на Python. К слову, он обладает очень неплохой поддержкой всевозможных вкусностей и полезностей Jabber по сравнению со многими другими клиентами. Одной из таких полезностей является возможность управления им из командной строки при помощи D-Bus — системы межпроцессного взаимодействия.Управление из командной строки не означает, что Gajim имеет консольный интерфейс. Он по-прежнему будет располагаться на рабочем столе в виде окошка. Просто из консоли можно будет отправлять ему какие-либо команды. Собственно, команд поддерживается немного, но для каких-то простейших действий должно хватить.
В состав пакета с Gajim входит консольная утилитка gajim-remote, которая как раз и предназначена для отправки команд основной программе. Если вызвать её без параметров, она покажет список поддерживаемых действий. Вот наиболее интересные:
check_gajim_running — проверить, запущен ли Gajim (результат — True или False),list_accounts — список учётных записей,list_contacts <�учётные записи> — список контактов в учётных записях,contact_info — информация о пользователе с указанным JID,account_info <учётная запись> — показать информацию об одной из учётных записей Gajim,add_contact <�учётные записи> — добавить контакт в ростер,remove_contact <�учётные записи> — удалить учётную запись из ростера,change_status <статус> <�сообщение> <�учётные записи> — изменить статус с возможностью указания сообщения и учётной записи (если не указать — будет изменен статус всех учётных записей),get_status <�учётные записи> — получить статус указанных учётных записей,get_status_message <�учётные записи> — получить сообщение статуса указанных учётных записей,get_unread_msgs_number — количество непрочитанных сообщений,handle_uri <�учётные записи> — обработать ссылку вида «xmpp://»,join_room <комната> <�ник> <�пароль:> <�учётные записи> — присоединиться к конференции,send_chat_message <сообщение> <�учётные записи> — отправить сообщение в чат,send_file <файл> <�учётные записи> — отправить файл,send_groupchat_message <сообщение> <�учётные записи> — отправить сообщение в конференцию,send_single_message <тема> <сообщение> <�учётные записи> — отправить одиночное сообщение,open_chat <�учётные записи> — открыть чат с указанным контактом,start_chat <учётные записи> — открыть чат для заданной учётной записи (появится окно ввода JID),toggle_roster_appearance — показать/скрыть окошко ростера.
Попробуем теперь применить это на практике. Напишем скрипт, меняющий сообщение статуса на случайную цитату из fortunes. (Для тех, кто ещё не знает, fortunes — это консольная программа, выдающая случайную цитату из довольно объемной базы.)
Для этого в бесконечном цикле будем вызывать gajim-remote, передавая ему при помощи обратных кавычек результат выполнения команды fortunes. Между вызовами поставим паузу 5 минут (5?60=300 с).
1 |
|
У этой команды есть небольшой недостаток — нужно всё время держать терминал открытым. Для того, чтобы решить эту проблему, можно просто записать команду в текстовый файл, а потом запустить следующим образом:
1 |
|
Амперсанд в конце запустит выполнение скрипта в фоне. Можно также создать правило для cron — тогда вообще не придется что-либо запускать.
Другое возможное применение — отправка кому-то сообщения по расписанию. Например, при помощи такой команды:
1 |
echo "gajim-remote send_chat_message [email protected] 'Hello'" | at 10:00
|
Ровно в 10:00 пользователю будет отправлено сообщение «Hello» (если, конечно, Gajim будет в этот момент запущен).
Итак, даже этот небольшой набор команд в сочетании с инструментами командной строки позволяет сделать что-то полезное.
Если работа gajim-remote покажется слишком медленной, можно воспользоваться, например, командой dbus-send или qdbus для отправки сообщения напрямую через D-Bus.
Список предоставляемых функций можно посмотреть при помощи команды
1 |
|
Вызвать же функцию можно так:
1 |
|
Работает намного быстрее gajim-remote, но приходится явно указывать, кому мы шлём команды.
Кросспост
drujebober 28.07.2009 01:28 #
+ 0 -
а вот за наводку на dbus спасибо
заитересовала именно работа через дбас, я тут просто скриптик пишу, и уж очень мне не нравится gajim-remote, теперь буду курить дбас, если есть вменяемый мануал желтельно на ru по дбас+питон буду благодарен
А, ясно. Ну, если что-то интересное по D-Bus найду, обязательно выложу. ;)