Net send and linux
Настройка приема сообщений, отправленных из Windows через net send, в виде автоматически появляющегося окна (Ubuntu HOWTO)
Не секрет, что во многих организациях, использующих Linux наравне с Windows, есть небольшая проблема. Проблема заключается в том, что сообщения, отправляемые привычной для администраторов Windows командой net send, не принимаются компьютерами, на которых установлен Linux. В этом HOWTO описан простой способ создания системы приема сообщений net send на Linux-декстопе под управлением Ubuntu. Принимаемые сообщения будут появляться в небольшом, автоматически появляющемся окне. Способ проверен на Ubuntu 7.04 и на Ubuntu 7.10 , и упешно работает. Так же, без каких либо переделок, он должен подойти и для Ubuntu 8.04 .
Далее идет пошаговая инструкция с комментариями.
1. Убедиться, что установлены пакеты
Это можно сделать через Synaptic. Если какой-либо пакет не установлен, установить.
Комментарий: Пакет samba устанавливает samba-сервер, который как раз и отслеживает поступление netsend сообщений. Пакет smbclient устанавливает программу smbclient, которая помимо поддержки работы в Windows-сетях позволяет отправлять с Linux-компьютера netsend сообщения. Как это делать будет написано ниже. Пакет samba_common устанавливает необходимые библиотеки для работы сервера samba и программы smbclient. Пакет zenity содержит программу zenity, которая умеет показывать на экране простые графические интерфейсы. Мы будем ее использовать для того, чтобы вывести красивое окошко с пришедшим сообщением.
2. Под правами рута открыть на редактирование файл /etc/samba/smb.conf, и в начало секции [ global ] добавить строки
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 , и в конец файла дописать строку
Комментарий: Данная команда обязательно должна выполниться после запуска 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 следующего содержания
# Получаем номера активных дисплеев.
# Это нужно, чтобы сообщение открывалось не только на дисплее :0, если в системе
# одновременно открыто несколько сессий с разными пользователями
zenity —text-info —title=»Net message» —filename $1 &
Комментарий: Не забудьте назначить этому файлу права 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$/ ‘`
Ubuntu 7.10: disp=`ps -ef | awk ‘$8 ~ /X$/ ‘`
Чтобы выяснить, правильно ли написана команда, выполните ее отдельно в консоле (при работающем 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 сообщения по списку.
- Как из Windows увидеть имена файлов на ресурсе Samba в нужной кодировке
- Как из Windows отправить net send на Linux компьютер
- Как из Linux отправить текстовое сообщение на Windows компьютер
- Сетевой диск (samba), настройка 1С в файловом режиме
- Samba: 1С на самбе
- Samba, 1C, блокировки, файловая база данных
- Настройка samba для работы с 1С (15 Oct 2002)
- Настройка Samba как Wins сервера, общие базовые настройки
- Samba: Поднимаем контроллер домена на Ubuntu Server
- Что делать, если при заходе с Windows Samba запрашивает логин и пароль пользователя
- Настройка приема сообщений, отправленных из Windows через net send, в виде автоматически появляющегося окна (Ubuntu HOWTO)
Way to do ‘netsend’ between a windows and ubuntu computer
Windows has the ability to send a message so that it pops up on another windows computer that is on the same network using ‘netsend’. Is there a way to do something similar between a WindowsXP computer, and a computer running Ubuntu?
2 Answers 2
I have only done this once, I installed Linpopup which is basically a winpopup clone for Linux that can recieve/send messages over the net send/winpopup protocol.
LinPopUp
A Linux Enhanced port of Winpopup.
LinPopUp is a Xwindow graphical port of Winpopup, running over Samba. It permits to communicate with a windows computer that runs Winpopup, sending or receiving message. ( It also provides an alternative way to communicate between Linux computers that run Samba ). Note that LinPopUp is not only a port, as it includes several enhanced features like :
- Doesn’t need to always run : If you close it, it will continue to receive all messages that are send to you. You can even quit Xwindow, and still receive messages. In fact, the only way to miss a message that was sent to you is to have your computer turned off.
- Full message base management : Messages are kept from session to session. You will always retrieve a message that was sent to you, . if you have not deleted it.
- Can be run minimised : It will raise automatically each time a new message arrives.
- And many others features : Full message editor capabilities — Clipboard past & cut — All the docs you need — Easy installation — .
Send messages between 2 Ubuntu PCs (Net Send Style)
I am trying to find a way to send a message (like a popup message) from 1 PC to another. both are using Ubuntu. Already tried the smbclient way but this only works between a linux PC to a windows PC. I need a way to send messages from an Ubuntu PC to another Ubuntu PC. Similar to the way of Windows Net Send.
notify-send sends a pop up on my terminal but I wanted to send a popup to other users (may be a list of specific users) but without using sudo or ssh , do I have any alternative .A command which works as «notify-send» but to send message on other user terminal.
3 Answers 3
I read you wanted to do this without SSH, I believe I have a solution: netcat [nc] It comes with Ubuntu by default.
First we need a «daemon» to run in the background. Second, we need a program to make the alert pop up. I have zenity installed. If you do not, please install it, or edit the script to use whatever you like [e.x. xmessage , but that is ugly]. Next, paste this into ‘daemon.sh’:
#!/bin/bash port=3333 nc -l $port | while read msg; do zenity --info --text "$msg"; done
Now, make it executable chmod +x daemon.sh , now run it in the background: ./daemon.sh &
Now you’re done! Well, you actually need to do this on each computer. You also will want to automate the start of the daemon. Open the ‘startup’ applications from the menu, and add your script. Once that’s done, to send a message to the other computer, type in:
nc 192.168.1.X 3333 then type your message and hit Enter . Each enter line will make a message pop up. To exit nc, press Ctrl + C , or Ctrl + D .
Just make sure to replace 192.168.1.X with the real local IP of the other PC. [You can use ifconfig to find the IP address]
You could also make another script, say, message.sh . In that, paste:
Then chmod +x message.sh . Then you can just type ./message.sh then type your message, then enter, and your message is sent. Also, now that I think of it, you could also add a sound notification. I would recommend mplayer , it’s a CLI media player. Shouldn’t be too hard to figure out, but if you have any questions, please don’t hesitate to ask!