muhas 23.09.2009 14:50
Жизнь в консоли — Первое знакомство с 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 = [email protected]
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 проекта жизнь кипит, и часто вижу как жуйковцы пишут патчи

+ 0 -
Хороший обзор :)
muhas, а ты, случаем, не пробовал настроить event на конкретный контакт?
Мне это нужно, чтоб отличать сообщения из конференции от сообщений других контактов.
Мне это нужно, чтоб отличать сообщения из конференции от сообщений других контактов.
нет не пробывал, но судя по всему надо грипать по необходимому в файле комманд
Всё-таки я не зря советывал ознакомится с примером конфига
Всё-таки я не зря советывал ознакомится с примером конфига
# 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.
event'ы там устроены довольно противно. Например, вот такой скриптик работает:
А если заменить zenity на notify-send — нет. Причем, если выполнять вручную, т.е. ~/.mcabber/eventcmd, то работает и notify-send, а в связке с mcabber — ни в какую.
В mcabberrc только раскомментировал строчку:
P.S. Скриптик находится в файле ~/.mcabber/eventcmd.
#!/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.
Похоже, проблема в том что mcabber передаёт скрипту неправильные stdout/stderr; питон такую ситуацию, видимо, учитывает, а bash передаёт их дальше, и notify-send падает.
Решение: в начале скрипта поставить
exec &>/dev/null
чтобы заменить эти неправильные stdout/stderr на правильный /dev/null.
Решение: в начале скрипта поставить
exec &>/dev/null
чтобы заменить эти неправильные stdout/stderr на правильный /dev/null.
Интересно, у вас получилось использовать statefile для получения количества непрочитанных сообщений?.
Я установил переменную statefile в ~/.mcabber/mcabber.state , создал соответствующий файл, но после перезапуска mcabber'a он удаляется О_О. Logging естественно включен.
Я установил переменную statefile в ~/.mcabber/mcabber.state , создал соответствующий файл, но после перезапуска mcabber'a он удаляется О_О. Logging естественно включен.
получилось (тут как-раз описано как я вывел это в screen) - этого файла просто напросто не существует пока нету непрочитанных, посему в /dev/null хлам перенаправлять при проверке
cat ~/.mcabber/mcabber.state &>/dev/null
cat ~/.mcabber/mcabber.state &>/dev/null
Из уведомлений у меня прикручен звук, панель dzen2 при новом посте
А будет отдельный обзор подобных фич и их прикручивании и настройке?
читай ниже коммент. прикручивание xosd, из дефолтных примеров в архиве с исходниками кстати и во многих дистрах в примерах конфига лежит несколько скриптов... Но если кому шибко очень интересно то мож руки до написания обзора и дойдут
У меня когда-то в mcabber такой eventcmd был(знакомый подкинул):
Разумеется, для него нужен osd_cat. По поводу настройки смотрите комментарии.
#! /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. По поводу настройки смотрите комментарии.
Добавлю, чтобы не искали, что osd_cat устанавливается из пакета xosd-bin
это из примеров в самом мкабере, там же есть ещё pynotify и ещё чего-то
А кто-нибудь может кинуться ссылкой на палитру с возможными 256-ю цветами? А то стандартных восьми цветов маловато будет :)