Материал из Tkabber Wiki
Tcl/Tk имеет одну очень полезную функцию -- удаленное выполнение команд. Следовательно, все программы, написанные на Tcl/Tk, ее тоже имеют. Для того, чтобы воспользоваться этим плюсом, нужно:
- запустить wish на том же дисплее (определяется переменной окружения DISPLAY) что и сам клиент.
- узнать идентификатор приложения (в документации это "name of application").
- выполнить send <идентификатор> <команда> в открытом wish
Для Tkabber-а идентификатором будет "tkabber" для первого клиента и "tkabber #N" для остальных.
Содержание
- 1 Управление клиентом локально
- 2 Управление клиентом удаленно
- 3 Определение основных переменных
- 4 Выполнение основных действий
- 5 Управление клиентом из скрипта
- 6 См. также
Управление клиентом локально
Если клиент запущен на тех же Иксах что и терминал c wish, то все просто:
$ wish
%
иначе нужно указать дисплей:
$ DISPLAY=:1.0 wish
%
Появится серенькое окошко, но оно нам не понадобится, его можно свернуть. "%" - это приглашение к вводу tcl команд.
Проверить связь можно следующей командой:
% send tkabber {array get loginconf}
если все ок, то вы увидите массив с настройками профиля. Приводить не буду -- там пароль %).
Управление клиентом удаленно
Нужно зайти на удаленный компьютер и запустить wish с указанием дисплея, на котором запущен tkabber.
Дисплей можно узнать или из ps или ... просто знать %)
[user@localhost user]$ ssh remotehost
Password:
[user@remotehost user]$ DISPLAY=:0.0 wish
%
В данном примере выбран стандартный дисплей :0.0 вероятно, что у вас тоже используется он.
Конечно можно было бы и так:
[user@localhost user]$ DISPLAY=remotehost:0.0 wish
%
но для этого нужно, чтобы был открыт порт tcp/6000 для соединений, розрешены соединения к иксам и т.д. В общем через ssh надежнее и приятнее. Подробнее о дисплеях и портах можно прочесть в [X Apps mini-HOWTO]
Определение основных переменных
$myconnid
Переменная connid определяет соединение.
Если честно у меня всегда была равна 1, но для универсальности её надо универсально определить:
% send tkabber {jlib::connections}
1
% send tkabber {jlib::connection_jid 1}
roboto@jabber.ru/tkabber
Результат первой комманды - список доступных connid, результат второй - JID для connid = 1. Выбирайте нужный и присваивайте перменной myconnid (или просто запомните):
% send tkabber {set myconnid 1}
$mychatid
Перменная chatid нужна для команд, которые работают с открытыми конференциями (отсоединиться, послать сообщение, сменить ник и т.д.). Т.е. она определяет конференцию и, за одно, сам $connid.
Чтобы получить список открытых конференций, нужно выполнить:
% send tkabber { array get ::chat::opened}
{1 botzone@conference.jabber.ru} .chat_1_botzoneconferencejabberru410892420
Т.е. у нас всего один открытый чат: botzone@c.j.r. То что в фигурных скобках -- это и есть chatid. Вообще chatid -- это список из двух значений: {<connid> <jid чата>}.
Теперь мы знаем список открытых конференций. Можно выбрать нужную и записать в $mychatid:
%send tkabber {set mychatid {1 botzone@conference.jabber.ru}}
Теперь все готово.
Выполнение основных действий
смена профиля
Профили указываются в конфигурационном файле config.tcl. Посмотреть, как это сделать, можно в примерах. Каждый профиль - это массив loginconfN и есть один большой массив loginconf. Смена профиля -- это просто копирование данных из маленького массива в большой:
% send tkabber {array set loginconf [array get loginconf4]}
В данном случае мы поставили "четвертый" профиль. Проверить можно так:
% send tkabber {array get loginconf}
Login (подключится к серверу)
Соединение (данные берутся из массива loginconf):
% send tkabber {login [array get loginconf]}
Logout (оборвать соединение)
Обрыв всех соединений:
% logout
Обрыв только одного соединения:
% logout $myconnid
Join (войти в конференцию)
% send tkabber {join_group botzone@conference.jabber.ru}
Leave (выйти из конференции)
Выйти из всех конференций:
% send tkabber {::chat::disconnect_groupchats $myconnid}
Выйти из определенной конференции: !FIX!
смена ника
Поменять ник на C3PO:
% send tkabber { muc::change_nick $mychatid C3PO}
отправка сообщения
Отправка сообщения в конференцию: !FIX!
Отправка сообщения определенному пользователю: !FIX!
смена статуса
Смена текстового статуса (такая строчка внизу ткаббера):
% send tkabber {set textstatus "lalala"}
смена состояния
Для всего клиента: !FIX!
Для определенного JID-а (канала): !FIX!
Управление клиентом из скрипта
Замечательная програмка wish -- это просто интерпретатор команд tcl/tk, и то, что мы делали выше -- это просто команды tcl. Ничего вам не мешает эти команды загнать в скрипт и поставить управление ткаббером на автомат. Например, можно сделать автоматическую смену состояния по скринсэйверу, обрыв всех соединений ровно в 17:00 или еще какой-нибудь кошмарик. :)
Пример такого скрипта вы можете найти в исходниках tkabber-а: <tkabber-root>/examples/tkabber_setstatus . Этот скрипт берет параметры, которые вы передали из командной строки и загоняет их в статус клиента.
См. также
ТЗ по управлению через параметры командной строки
- тут есть наброски про XMPP-URI команды