Tkabber Wiki

Удалённое управление с помощью send
Login

Удалённое управление с помощью send

Материал из Tkabber Wiki

Tcl/Tk имеет одну очень полезную функцию -- удаленное выполнение команд. Следовательно, все программы, написанные на Tcl/Tk, ее тоже имеют. Для того, чтобы воспользоваться этим плюсом, нужно:

  1. запустить wish на том же дисплее (определяется переменной окружения DISPLAY) что и сам клиент.
  2. узнать идентификатор приложения (в документации это "name of application").
  3. выполнить send <идентификатор> <команда> в открытом wish

Для Tkabber-а идентификатором будет "tkabber" для первого клиента и "tkabber #N" для остальных.

Содержание

Управление клиентом локально

Если клиент запущен на тех же Иксах что и терминал 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 . Этот скрипт берет параметры, которые вы передали из командной строки и загоняет их в статус клиента.

См. также

ТЗ по управлению через параметры командной строки