Самоучитель Гончарова
ALT Linux в офисе
WWW.TEKCT.RU | Содержание книги | Предыдущий раздел | Следующий раздел

9.8. Обмен сообщениями в сети. Kpopup

В свое время корпорация Microsoft разработала для Windows 98 очень удобную систему обмена сообщениями между компьютерами локальной сети. Для отправки сообщения служила программа winpopup. Особенность этой системы в отсутствии сервера для обмена сообщениями. Таких вариантов практически нет. Jabber, ICQ, Scype требуют установки сервера. Большинство систем обмена сообщениями поддерживают серверы, работающие в Интернете, но не каждая коммерческая фирма захочет, чтобы переписка ее сотрудников шла через Интернет.

Разные умельцы по всему миру попытались воспроизвести технологию Microsoft. Система winpopup (будем называть ее так) сравнительно сложна. Обмен идет по протоколу UDP через порты 137 и 138 и по протоколу TCP через порты 139 и 445. В линейке Windows NT-Windows XP для реализации этой системы была использована «Служба обмена сообщениями» и предусмотрена консольная команда net send. Причем полной совместимости с Windows 98 нет. По какой-то причине Microsoft не стала развивать это направление, система не получила удобного графического интерфейса и осталась известной, в основном, специалистам. Хотя для оповещения работников в офисе и обмена сообщениями трудно придумать что-то более удобное.

Несколько фирм разработали коммерческие аналоги winpopup.

Я поставил задачу использовать эту систему в сети, где сервер управлялся OC Windows 2003 Server, а клиентские компьютеры работали под Windows XP и ALT Linux.

На компьютере с ALT Linux надо установить компонент kdenetwork (по умолчанию он не установлен) и убедиться, что сервер Samba работает (# service smb status). Если не работает, надо запустить службу smb в Центре управления системой (раздел Службы).

После этого можно устанавливать программу (рис. 9.7). Существует множество программ для Linux, которые эмулируют winpopup, после многих тестов я пришел к выводу, что лучше использовать Kpopup (из Sisyphus):

# rpm -ihv kpopup-0.9.8.2-alt4.i586.rpm

Программа Kpopup

Рис. 9.7. Программа Kpopup

Командой К — Настройка — Samba надо открыть окно настройки и на вкладке Дополнительно найти раздел Команды. В строке Команда сообщения должно появиться:

/bin/sh -c '/usr/bin/receivepopup.sh "%s" "%f" '

Каждая программа для обмена сообщениями использует здесь свою команду. Вы можете придумать и свой вариант (ниже я предложу один). Здесь могут использоваться такие параметры:

%s — файл сообщения;

%f — пользователь, отправивший сообщение;

%t — время отправки сообщения.

Если строка в настройках Samba не появилась, ее надо вписать вручную или отредактирвать конфиг-файл. В файле /etc/samba/smb.conf этой строке соответствует параметр message command.

Еще в этом файле надо раскоментировать такие строки:

dos charset = 866

unix charset = UTF8

display charset = UTF8

Для того чтобы программа kpopup запускалась автоматически, надо скопировать ее ярлык в К — Автозапуск (папка /home/user/.kde/Autostart)

Как это работает?

Когда приходит сообщение, сервер Samba помещает его в папку /tmp. Следить за приходом сообщений (или за ошибками) можно по журналам в папке /var/log/samba (для сообщений от каждого компьютера создается свой журнал). Затем Samba выполняет указанную команду. В нашем случае скрипт receivepopup.sh перемещает сообщение в папку /var/lib/kpopup, программа Kpopup читает этот файл и выводит на экран его содержимое.

Проверить работу системы можно из консоли:

$ echo "Привет" | smbclient -M имя_компьютера

Если выводится ошибка NT_STATUS_CONNECTION_REFUSED, значит, у вас не работает или не настроена служба smb. Если вместо русских букв выводятся кракозябры, значит в /etc/samba/smb.conf не указаны правильные кодировки.

Система получается несколько сложной, потому что Samba не умеет отображать сообщения.

Разумеется, сообщения можно и отправлять. Программа Kpopup понравилась мне тем, что быстро определяет имена компьютеров в домене. Имя компьютера, которому надо послать сообщение, выбирается из списка. Послать сообщение можно только на один компьютер. Дело в том, что никому не удалось воспроизвести работу команды Windows для рассылки сообщения на все компьютеры домена:

net send * Сообщение

Воспроизводится лишь работа команды для отправки сообщения на один компьютер, например:

net send petya Сообщение

В программах для Linux рассылку на все компьютеры можно сделать только при помощи цикла, перебирающего все известные в данный момент хосты, но при большой сети это занимает довольно много времени (видимо, поэтому авторы программ и не стали реализовывать эту возможность).

Кроме того, сообщение типа net send *, отправленное с компьютера под управлением Windows не будет принято на Linux-машинах.

Как быть? Решить проблему можно, если поместить на сервер, работающий под Windows, скрипт, который отправлял бы сообщения на каждый компьютер по-отдельности. Для пользователей Linux доступ к скрипту легко организуется при помощи программы терминального доступа rdesktop (см. главу 1). Имя скрипта указывается как имя программы, которую надо запустить, все очень просто. У меня такой скрипт написан на Visual Basic Script (файл должен иметь правильное расширение, например, message.vbs):

Dim mess

Dim c1

mess = InputBox("Введите текст для отправки. Если передумали - оставьте поле пустым.", "Сообщение всем")

If Len(Trim(mess)) > 0 Then

Set myDomain = GetObject("WinNT://OFIS")

myDomain.Filter = Array("computer")

c1 = 0

For Each Comp In myDomain

c1 = c1 + 1

Set myShell = CreateObject("WScript.Shell")

myExec = myShell.Run("net send " & Comp.Name & " " & mess, 0, True)

Next

MsgBox "Отправка завершена " & c1

End If

Предполагается, что домен называется OFIS. Чтобы сообщения получали все, такой скрипт на сервере должны использовать и пользователи Linux, и пользователи Windows.

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

Вернемся к серверу Samba.

Возникает вопрос, можно ли заменить команду для вывода сообщения (со скриптом receivepopup.sh) какой-либо другой? Это сделать не очень просто. Samba работает в таком режиме, что запуск программ с графическим интерфейсом в данном случае невозможен. Поэтому не подойдут программы, специально предназначенные для создания окон диалога (например, zenity). Наверное, единственным исключением является программа KAlarm, (входящая в состав ALT Linux, но требующая установки). Это удобный органайзер-напоминатель, многие им пользуются, но его popup-окно можно вызвать из командной строки, например:

$ kalarm "Hello"

Окно небольшое (рис. 9.8), по умолчанию ярко-красного цвета. Интересно и то, что оно является «по совместительству» напоминанием, его можно «отложить» на определенный срок, а потом оно появится вновь. Для работы в офисе — идеально. Допустим, пришло сообщение «Собрание будет в 16:00». Работнику достаточно отложить это сообщение до 15:55, на что уходят секунды, и можно работать дальше, не отвлекаясь.

Программа KAlarm

Рис. 9.8. Окно напоминания KAlarm

Для системы Samba команда должна быть такой:

kalarm "%s"

Все хорошо, но есть одна проблема — с кодировкой. KAlarm использует кодировку cp1252, в которой нет русских букв, поэтому мы можем использовать для сообщений только латиницу.

Linux использует кодировку UTF8. Мы можем протестировать KAlarm из консоли на предмет вывода кириллицы, но, скорее всего, получим в сообщении кракозябры:

$ (txt=`echo Привет | iconv -f UTF8 -t cp1251` ; kalarm $txt)

Использовать в этой команде ключ -t cp1252 мы в данной ситуации вообще не имеем права, потому что программа iconv сразу определит, что символу в кодировке UTF8 (например, русской букве «П») ничего не соответствует в кодовой таблице cp1252 и выдаст сообщение об ошибке.

В настоящее время эту проблему можно решить только использованием специального шрифта, который, имея кодировку cp1252, содержал бы изображения символов кириллицы. В настройках нынешней версии KAlarm можно выбрать шрифт, но нельзя выбрать кодировку.

WWW.TEKCT.RU | Содержание книги | Предыдущий раздел | Следующий раздел

© Алексей Гончаров, 2010

Рейтинг@Mail.ru Rambler's Top100