Как стать автором
Обновить

Использование mcabber через ssh на удаленном сервере с уведомлениями

Время на прочтение3 мин
Количество просмотров2.6K
В этой статье я расскажу, как можно держать постоянно запущенным jabber-клиент mcabber на удаленном сервере и пользоваться им подключаясь к серверу по ssh. Также здесь будет описано, как можно реализовать уведомления о пришедших сообщениях.
Профиты от такой схемы следующие:
  • вы постоянно on-line
  • если вдруг рвется соединение не приходится перелогиниваться и терять (при неудачном раскладе) оффлайновые сообщения
  • логи хранятся в одном месте и доступны отовсюду где есть интернет
  • вы можете пользоваться mcabber с любого устройства, поддерживающего ssh, будь то мобила или веб-клиент
  • говорят, что ssh кушает меньше трафика, чем xmpp (не проверял)

К недостаткам же можно отнести:
  • необходимость сервера
  • тормознутость интерфейса (на медленных каналах)
  • необходимость использования консольного клиента(для кого-то это даже плюс)

Запустить и использовать mcabber на удаленном сервере не составляет труда. Впринципе, почти никакой разницы по сравнению с настройкой локально нет.
Для экспериментов можно воспользоваться сервисом blinkenshell.org, предоставляющим бесплатные shell-аккаунты за то, что вы сидите на их irc канале. Однако чтобы стать там полноправным юзером надо потратить пару дней, да и отклик сервера у них не самый лучший. Статья написана на примере настройки для сервера blinkenshell, но вы можете легко применить ее для своего собственного.
Для запуска mcabber на сервере можно использовать следующую команду:

tmux new-session -d -s mcabber mcabber

(tmux — это аналог screen, на мой субъективный взгляд он лучше)
На локальном компьютере тогда будет достаточно выполнить в терминале:

ssh -t blinkenshell 'LANG=ru_RU.UTF-8 tmux attach -d -t mcabber'

где -d обозначает, что любая другая mcabber-сессия tmux должна быть сначала детачнута. Таким образом достигается то, что mcabber будет подключен только с одного компьютера. blinkenshell — алиас, настроенный в ~/.ssh/config.

Если вы следовали этому руководству, то в конфиге awesome можно прописать:

awful.key({ modkey }, "grave", function () scratch.drop("urxvtc -e ssh -t blinkenshell 'LANG=ru_RU.UTF-8 tmux attach -d -t mcabber'", bottom, center, 0.98, 0.95) end),

и тем самым свести запуск jabber клиента на компьютере к комбинации клавиш Win+`, после чего откроется терминал с ssh-сессией в которой уже будет запущен mcabber.

Интереснее становится, когда мы захотим уведомления о событиях на удаленном mcabber.
В mcabberrc на сервере пропишите следующие строки:

set events_command = ~/.mcabber/event.sh

Содержимое же ~/.mcabber/event.sh небольшое:

#!/bin/sh
echo $@ >> logfile


Этим мы создаем logfile на сервере, в который будут дописываться все события mcabber.

Для уведомлений я использовал скрипт на python, написанный разработчиком mcabber. В комплекте идет вполне понятный конфигурационный файл и readme. Скрипт и конфигурационный файл следует положить в директорию ~/.mcabber/ на локальном компьютере.
Затем там же создаем скрипт remote_events.sh следующего содержания:

#!/bin/zsh
SERVER=blinkenshell
EVSCRIPT=~/.mcabber/mcevent.py
CONFFILE=~/.mcabber/mcevent.cfg
ssh $SERVER 'tail -n0 -F ~/.mcabber/logfile' < /dev/null | $EVSCRIPT -c $CONFFILE &|


Он подключается по ssh к удаленному серверу и считывает содержимое ~/.mcabber/logfile. При запуске скрипт отреагирует только на последнее событие mcabber (ключ -n0). А далее будет постоянно мониторить изменения в этом файле (ключ -F) и передавать новые события скрипту уведомлений.

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

P.S. с удовольствием выслушаю предложения по оптимизации данной схемы.
Теги:
Хабы:
+27
Комментарии14

Публикации