muhas 23.09.2009 14:50

Жизнь в консолиПервое знакомство с mcabber

Ребята, надо уже как-то начинать неделю консольных программ, посему первый пост как и обещал о mcabber



MCabber - это текстовый Jabber-клиент поддерживающий SSL, PGP, историю, конференции и кучу XEP, но не поддерживающий регистрацию на сервере.

Для первого запуска mcabber нам понадобится создать файл конфигурации, а лучше скопировать файл примера (из исходников или из пакета)

mkdir ~/.mcabber

# обязательно меняем права на папку

сhmod 700 ~/.mcabber

# пример для archlinux

cp /usr/share/mcabber/example/mcabberrc ~/.mcabber/mcabberrc

Его можно не создавать, тогда придется вводить информацию о логине вручную, к тому же с помощью конфигурационного файла можно настроить mcabber на свой вкус (на то он и конфигурационный)


Первое что нам понадобится это прописать в конфигурационном файле ваш сервер, имя и пароль(можно не вводить), а так же по необходимости порт

set username = логин

set password = пароль

set server = сервер

set port = 5222

set nickname = ник_в_конференциях_по_уомлчанию

Для gtalk, к примеру, необходимо использовать опции ssl, а так же логин и сервер указывать вручную

set username = name@gmail.com

set server = talk.google.com



set ssl = 1

set ssl_verify=0



Теперь можно запускать mcabber. Но методом научного тыка сразу использовать mcabber не получится, ибо необходимо знать минимум по его управлению.



Всё рабочее пространство mcabber поделено на 4 области: слева ростер, с права окно сообщений, с самого низа строка ввода команд и несколько строк журнала событий прямо над ней. Некоторые из этих областей можно менять местами (опции set log_win_on_top и set roster_win_on_right)





Собственно всё управление сводится к набиванию команд в строку ввода, все команды начинаются со слеша (/ позволит вам с ними ознакомится). Но на многие команды уже назначены клавиши. Так как самое главное для jabber-клиента это писать и принимать сообщений, то с этого и начнём. PageUp/PageDown передвигают курсор по ростеру, а клавиша Enter закрывает/скрывает группу контактов либо когда курсор установлен на ней. Ну а если курсор установлен на контакте, то можно приступать к написанию ему сообщения или прочитать присланное.

Перемещение по самому окну сообщения сделано с помощью ^p (Ctrl-p) и ^n (Ctrl-n)



Команда /roster unread_next перемещает вас к следующему непрочитанному сообщению/событию, и по умолчанию этой команде назначена клавиша ^Q (Ctrl-Q)

А команда /room join адрес_конференции ник пароль соединит вас с конфернцией (ник c паролем к комнате указывать необязательно) и конференция появится в ростере как обычный контакт (с русскими адресами конференций как-то неудачно получилось)



Так же mcabber поддеживает хуки после некоторых действий. К примеру строки в конфиге

set hook-post-connect = source ~/.mcabber/post-connect.rc

set hook-pre-disconnect = status message Сломал свой мозг! показывает что после коннекта к серверу считывать команды mcabber (в конфиге все команды без слеша) из файла ~/.mcabber/post-connect.rc а перед отсоединением сменить статусное сообщение на Сломал свой мозг!



А теперь посмотрим как задовать хоткеи на команды и заодно научимся писать многострочные сообщения

Нажимаем нужный нам хоткей и в журнале событий (если такое сочетание не использовано) видем что-то вроде <13:53:28> Unknown key=MU1090 - MU1090 это Alt-n. Таким образом выбираем понравившиеся клавиши и записываем их в конфиг в виде

# Alt-m начать многострочное сообщение

bind M109 = msay toggle

# что бы и в русской раскладки работало, т.е. Alt-ь

bind MU1100 = msay toggle

# ну и по Alt-Enter отправляем сообщение (По-умолчанию работает Ctrl-d)

bind M13 = msay sendПосле знака равенства пишем команду (без слеша)



Дальнейшая работа с mcabber зависит только от наших желаний. Можно разукрасить mcabber под те цвета что радуют глаз (смотри set color_*), можно прикрутить любые уведомления (смотри set events*), выполнять можно создать свои команды и хоткеи, да много чего можно (даже бота сделать из mcabber можно).

К примеру что бы mcabber выглядел как на скриншоте

у меня в конфиге прописано

set log_win_height = 1

set roster_width=30

set log_win_on_top = 0

set roster_win_on_right = 1

set color_background = default

set color_general = default

set color_info = default

set color_msgin = 240

set color_msgout = white

set color_msghl = 237

set color_bgstatus = 240

set color_status = white

set color_roster = default

set color_bgrostersel = white

set color_rostersel = brightdefault

set color_rosterselmsg = default

set color_rosternewmsg = brightdefault(цвета указаны с учетом что терминал поддерживает их 256штук)



Из уведомлений у меня прикручен звук, панель dzen2 при новом посте(можно и osd и вообще что угодго - а управление им через именованный канал и возможность отправлять rawxml серверу позволяют превратить mcabber в бота) и сообщение о количестве написавших в screen, пример получения от mcabber количества сообщений здесь.



Так же mcabber снабжен неплохой системой помощи (переведенной на русский) - всего лишь вводим /help и нам расскажут как ей пользоваться.

Думаю для начала ознакомления этого хватит, так же настоятельно рекомендую посмотреть дефолтный конфиг и примеры дабы узнать побольше о возможностях mcabber (ну и man, естественно). Если что ещё об mcabber интересно, то спрашивайте - помогу чем смогу.



По материалам muhas.ru/?t=mcabber, т.е собственных же заметок =)



PS. в git проекта жизнь кипит, и часто вижу как жуйковцы пишут патчи


Тэги: console Jabber mcabber
+ 11 -
Похожие Поделиться

Filgor 23.09.2009 14:55 #
Хороший обзор :)
lwilis 23.09.2009 16:17 #
muhas, а ты, случаем, не пробовал настроить event на конкретный контакт?
Мне это нужно, чтоб отличать сообщения из конференции от сообщений других контактов.
muhas 23.09.2009 18:07 #
нет не пробывал, но судя по всему надо грипать по необходимому в файле комманд
Всё-таки я не зря советывал ознакомится с примером конфига
# External command for events
# You can specify a script or process to be launched when an event occurs.
# Set 'events_ignore_active_window' to 1 if you don't want the script to
# be run for a message to the current active window (default: 0).
#
# If 'event_log_files' is set, a file is created and contains the body of
# the message (incoming messages only); the file name is the last parameter.
# If you enable this, you can specify the directory mcabber will use to
# create these messages with the 'event_log_dir' variable (default is the
# system temp dir, or MCABBERTMPDIR environment variable). Please note
# that mcabber won't delete these files, it's your script's job.
#
# The command is called the following way:
# $events_command MSG IN jabber@id (when receiving a message)
# $events_command MSG OUT jabber@id (when sending a message)
# $events_command MSG MUC room_id (when receiving a MUC message)
# $events_command STATUS X jabber@id (new buddy status is X)
# $events_command UNREAD N (number of unread buddy buffers)
# See sample script in contrib/ directory.
Denis 24.09.2009 14:07 #
event'ы там устроены довольно противно. Например, вот такой скриптик работает:
#!/bin/sh

if << $2 == 'IN' >> ; then
SUCCESS_SOUND=/usr/share/sounds/wrap_success.wav
zenity --notification --text='New Message' &
aplay -q $SUCCESS_SOUND
fi


А если заменить zenity на notify-send — нет. Причем, если выполнять вручную, т.е. ~/.mcabber/eventcmd, то работает и notify-send, а в связке с mcabber — ни в какую.

В mcabberrc только раскомментировал строчку:

set events_command = ~/.mcabber/eventcmd

P.S. Скриптик находится в файле ~/.mcabber/eventcmd.
muhas 24.09.2009 17:49 #
в контриб mnotify.py прекрасно работает
MarSoft 20.01.2010 06:50 #
Похоже, проблема в том что mcabber передаёт скрипту неправильные stdout/stderr; питон такую ситуацию, видимо, учитывает, а bash передаёт их дальше, и notify-send падает.
Решение: в начале скрипта поставить
exec &>/dev/null
чтобы заменить эти неправильные stdout/stderr на правильный /dev/null.
h0rr0rr_drag0n 23.09.2009 21:42 #
Интересно, у вас получилось использовать statefile для получения количества непрочитанных сообщений?.
Я установил переменную statefile в ~/.mcabber/mcabber.state , создал соответствующий файл, но после перезапуска mcabber'a он удаляется О_О. Logging естественно включен.
muhas 24.09.2009 09:21 #
получилось (тут как-раз описано как я вывел это в screen) - этого файла просто напросто не существует пока нету непрочитанных, посему в /dev/null хлам перенаправлять при проверке
cat ~/.mcabber/mcabber.state &>/dev/null
MagoBuono 29.09.2009 15:14 #
Из уведомлений у меня прикручен звук, панель dzen2 при новом посте

А будет отдельный обзор подобных фич и их прикручивании и настройке?
muhas 30.09.2009 09:43 #
читай ниже коммент. прикручивание xosd, из дефолтных примеров в архиве с исходниками кстати и во многих дистрах в примерах конфига лежит несколько скриптов... Но если кому шибко очень интересно то мож руки до написания обзора и дойдут
cppmm 29.09.2009 15:47 #
У меня когда-то в mcabber такой eventcmd был(знакомый подкинул):
#! /bin/sh
#
# Sample events script for mcabber
# Use OSD to display events on the user's desktop
#
# To use this script, set the "events_command" option to the path of
# the script (see the mcabberrc.example file for an example)
#
# MiKael, 2006-01-07

XOSD_CMD_PIPE='osd_cat --pos=bottom --align=center --delay=4 --color=magenta --font=-*-courier-*-*-*-*-14-*-*-*-*-*-iso8859-15'

event=$1
arg1=$2
arg2=$3
filename=$4
# Note that the 4th argument is only provided for incoming messages
# and when 'event_log_files' is set.

if < $event = "MSG" >; then
case "$arg1" in
IN)
# Incoming message from buddy $arg2
echo "You have an IM from <$arg2>" | $XOSD_CMD_PIPE > /dev/null 2>&1
if < -n "$filename" -a -f "$filename" >; then
# We could process filename here...
/bin/rm $filename
fi
;;
MUC)
# Groupchat message in room $arg2
if < -n "$filename" && -f "$filename" >; then
# We could process filename here...
/bin/rm $filename
fi
;;
OUT)
# Outgoing message for buddy $arg2
;;
esac
elif < $event = "STATUS" >; then
# Buddy $arg2 status is $arg1 (_, O, I, F, D, N, A)
echo "<$arg2> has changed status to: <$arg1>" | $XOSD_CMD_PIPE > /dev/null 2>&1
echo > /dev/null
fi
Разумеется, для него нужен osd_cat. По поводу настройки смотрите комментарии.
ner_uto 29.09.2009 16:30 #
Добавлю, чтобы не искали, что osd_cat устанавливается из пакета xosd-bin
muhas 30.09.2009 09:44 #
это из примеров в самом мкабере, там же есть ещё pynotify и ещё чего-то
cppmm 30.09.2009 10:00 #
Странно. Помню, тогда у меня его не было. Или я плохо имкал. :)
sattellite 10.02.2010 21:30 #
А кто-нибудь может кинуться ссылкой на палитру с возможными 256-ю цветами? А то стандартных восьми цветов маловато будет :)
HTaeD 13.02.2010 01:01 #
тоже был бы несказанно рад такой ссылочке! )