|
|||||||
Настройка приема сообщений, отправленных из Windows через net send, в виде автоматически появляющегося окна (Ubuntu HOWTO)
Время создания: 19.06.2015 09:32
Автор: Xintrea
Текстовые метки: Linux, Windows, net sent, сообщения, samba, дисплей, display, X11, zenity
Раздел: Компьютер - Linux - Samba
Запись: xintrea/mytetra_syncro/master/base/1434695544i1slafb8u5/text.html на raw.github.com
|
|||||||
|
|||||||
Не секрет, что во многих организациях, использующих Linux наравне с Windows, есть небольшая проблема. Проблема заключается в том, что сообщения, отправляемые привычной для администраторов Windows командой net send, не принимаются компьютерами, на которых установлен Linux. В этом HOWTO описан простой способ создания системы приема сообщений net send на Linux-декстопе под управлением Ubuntu. Принимаемые сообщения будут появляться в небольшом, автоматически появляющемся окне. Способ проверен на Ubuntu 7.04 и на Ubuntu 7.10, и упешно работает. Так же, без каких либо переделок, он должен подойти и для Ubuntu 8.04. Далее идет пошаговая инструкция с комментариями. 1. Убедиться, что установлены пакеты samba samba_common smbclient zenity Это можно сделать через Synaptic. Если какой-либо пакет не установлен, установить. Комментарий: Пакет samba устанавливает samba-сервер, который как раз и отслеживает поступление netsend сообщений. Пакет smbclient устанавливает программу smbclient, которая помимо поддержки работы в Windows-сетях позволяет отправлять с Linux-компьютера netsend сообщения. Как это делать будет написано ниже. Пакет samba_common устанавливает необходимые библиотеки для работы сервера samba и программы smbclient. Пакет zenity содержит программу zenity, которая умеет показывать на экране простые графические интерфейсы. Мы будем ее использовать для того, чтобы вывести красивое окошко с пришедшим сообщением. 2. Под правами рута открыть на редактирование файл /etc/samba/smb.conf, и в начало секции [ global ] добавить строки dos charset = 866 unix charset = UTF8 display charset = UTF8 message command = /bin/sh -c '/usr/bin/getnetsend.sh %s' Комментарий: Данное действие справедливо для свежеустановленного пакета samba. Если пакет samba уже был установлен и подвергался настройке, необходимо убедиться, что каждая из приведенных опций не встречается в тексте файла /etc/samba/smb.conf где-нибудь еще. В момент прихода сообщения netsend, сервер samba кладет в каталог /tmp файл с текстом сообщения. Затем выполняет команду, прописанную в опции message command. При вызове данной командной строки, вместо символов %s, будет подставлено имя файла с текстом сообщения. 3. Под правами рута открыть на редактирование файл /etc/profile, и в конец файла дописать строку xhost +local: Комментарий: Данная команда обязательно должна выполниться после запуска X-сервера. По умолчанию, X-сервер настроен так, что соединяться с ним и открывать окна могут только программы от пользователя, зарегистрированного в данный момент в системе. Сервер samba работает под системным пользователем nobody (так же как и, например программа cron). Поэтому любые попытки запустить X-приложение из samba (или например из cron), будут отвергаться X-сервером Команда xhost +local:, запущенная от текущего пользователя, настраивает X-сервер так, что он начинает принимать локальные (в пределах компьютера) соединения от любого пользователя. Таким образом, X-программа zenity, которая вызывается из скрипта /usr/bin/getnetsend.sh из-подпользователя nobody, сможет нормально работать. Для систем Ubuntu и Debian, размещать команду xhost +local: нужно именно в файле /etc/profile. Команды из этого файла выполняются после того, как произошел логин пользователя в оконную систему (справедливо для KDE, GNOME, на других DE не проверялось). По неизвестным причинам, файл /etc/X11/xinit/xinitrc, который специально предназначенн для выполнения команд в момент входа в DE, в системах Ubuntu и Debian не работает. 4. Создать под правами рута в каталоге /usr/bin файл getnetsend.sh следующего содержания #!/bin/sh # getnetsend.sh v.1.04 # Получаем номера активных дисплеев. # Это нужно, чтобы сообщение открывалось не только на дисплее :0, если в системе # одновременно открыто несколько сессий с разными пользователями disp=`ps -ef | awk '$8 ~ /X$/ {print $9}'` for n in $disp do export DISPLAY=${n} zenity --text-info --title="Net message" --filename $1 & done Комментарий: Не забудьте назначить этому файлу права 755! По-умолчанию такой файл обычно получает права 700, что дает ему право работать только от root, и сообщения не будут видны! Назначить права можно командой chmod 755 /usr/bin/getnetsend.sh. Внимание! На разных Linux-системах чаще всего разные команды запуска X-сервера, в связи с чем имеем разный вывод команды ps -ef, который в нашем скрипте разбирается программой awk. В системе Ubuntu 7.04 строка процесса X-сервера имеет такой формат: root 5458 5432 13 14:29 tty7 00:15:48 /usr/bin/X -br -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-AKBbhb то есть номер дисплея (:0) расположен в 12-м поле данной строки. А в системе Ubuntu 7.10 в строке процесса X-сервера ключи расположены в другой последовательности: root 5458 5432 13 14:29 tty7 00:15:48 /usr/bin/X :0 -br -nolisten tcp vt7 -auth /var/run/xauth/A:0-AKBbhb то есть, номер дисплея расположен в 9-м поле. Таким образом, первая команда в скрипте getnetsend.sh должна соответсвовать формату, выдаваемому программой ps, иначе сообщения не будут видны. Ubuntu 7.04: disp=`ps -ef | awk '$8 ~ /X$/ {print $12}'` Ubuntu 7.10: disp=`ps -ef | awk '$8 ~ /X$/ {print $9}'` Чтобы выяснить, правильно ли написана команда, выполните ее отдельно в консоле (при работающем X-сервере само собой). Если в ответ вы увидите :0 (или список номеров дисплеев при открытых нескольких сессиях), значит все в порядке. 5. Перезагрузить компьютер, войти под любым пользователем, и убедиться что прием сообщений работает. Проверка. Проверку, как все работает, можно начать с того, чтобы компьютер отправил netsend-сообщение самому себе. Для этого выполните такую команду (это аналог Windows-команды net send в Linux) echo "Текст сообщения" | smbclient -M имя_компьютера где имя_компьютера - это сетевое имя данного компьютера (не IP-адрес!). Обратите внимание, что между командами используется перенаправление потока ( | ), а не файлового ввода ( > ). На экране должно появиться окошечко с текстом сообщения, так же как это происходит и в Windows. Если сообщение не появлятся, значит вы что-то сделали неправильно, и нужно начинать отладку. Например можно включить в начало файла getnetsend.sh команду echo "Getnetsend running" >> /tmp/getnetsendlog.txt после чего снова отправить сообщение и посмотреть файл /tmp/getnetsendlog.txt, создался ли он вообще и есть ли в нем строка "Getnetsend running". Если его нет, то скрипт вообще не вызывается самбой. Если он есть, то скрипт не может соединиться с X-сервером чтобы показать окошечко. Дальше думайте сами, что вы сделали неправильно. Если сообщение пришло, значит у нас все работает. Теперь пробуем отправить сообщение с Windows. На Windows-компьютере даем команду net send имя_компьютера "Текст сообщения" и если увидели сообщение, то радуемся. Если не увидели, значит Linux-компьютер и Windows-компьютер находятся в разных рабочих группах или в разных доменах. Внимание! Сервер samba принимает сообщения, адресуемые только конкретному компьютеру! Samba не принимает сообщения, отправленные "всем". То есть, если на Windows-компьютере дать команду net send * "Текст сообщения" то такое сообщение получат только Windows-компьютеры. Linux-компьютеры его проигнорируют. Посему, системный администратор, для рассылки сообщений "для всех", должен озаботиться поиском или написанием программки, которая получает список компьютеров в сети, и отправиляет net send сообщения по списку. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|