Скрипт для рассылки сообщении linix терминалам


В windows разослать сообщение подключенным терминальным клиентам не составляет никакого труда, в Linux придётся немного поработать.

Так как нам нужен доступ к файлам авторизации пользователей - все команды и скрипты запускаем от имени root или под sudo.

Выполняем на сервере терминалов команду:

termserver-2:~ # who -u
nsafarova 192.168.10.142:1 2012-05-28 15:51   ?         29868 (192.168.10.142)
rod1     192.168.10.96:1 2012-05-31 14:50   ?          3354 (192.168.10.96)
imesnynkina 192.168.10.229:1 2012-05-28 11:10   ?         25503 (192.168.10.229)
fkurmangazieva 192.168.10.247:1 2012-05-19 11:36   ?         13937 (192.168.10.247)
ezaiceva 192.168.10.228:1 2012-05-21 11:44   ?         28037 (192.168.10.228)
и т.д....

и видим кто у нас залогинился на сервере и на каком дисплее.

Для отображения сообщения на чужом рабочем месте необходимо авторизоваться. Для этого экспортируем ключ, который находится в домашней директории пользователя, в файле .Xauthority.

Для примера пошлём сообщение пользователю ezaiceva, которой принадлежит дисплей 192.168.10.228:1 :

export  XAUTHORITY=/home/ezaiceva/.Xauthority

xmessage -display  192.168.10.228:1 privet

на рабочем месте у пользователя  ezaiceva должно появиться окошко:

 

 

 

 

Если всё получилось - значит можно рассылать сообщения всем пользователям, залогинившимся на данном терминальном сервере одним скриптом.

 Теперь сам скрипт:

#!/bin/sh 
text=$(echo $1 | iconv -f utf8 -t koi8-r)
if [ -z "$text" ]; then
echo "Синтаксис: message '"Текст сообщения"'" >&2
exit 1
fi
for username in $(who -u | grep : | grep -v root | awk '{print $1}')
do 
export  XAUTHORITY=/home/$username/.Xauthority
disp=$(who -u | grep $username | awk '{print $2}')
/usr/bin/X11/xmessage -fn -cronyx-fixed-medium-r-normal--20-200-75-75-c-100-koi8-r -center -name ALARM -buttons OK -display $disp "$text"&
done
exit 0 

Создайте файл message, скопируйте текст скрипта в файл и сделайте его исполняемым.

Рассылка производится следующим образом (текст обязательно в кавычки):

./message екст сообщения'

С таким же успехом вместо xmessage можно отображать сообщения с помощью программ zenity или notify-send.

Р.S.

Если Ваш Х-сервер с запускается с помощью startx, поддержка xauth в ряде систем будет отсутствовать. В некоторых случаях вам придется отредактировать сценарий startx (он обычно располагается в каталоге /usr/X11R6/bin) так, чтобы в нем присутствовала опция -auth файл_авторизации; в качестве файла авторизации обычно указывается файл .Xauthority, находящийся в рабочем каталоге. Но обычно в редактировании startx нет необходимости.

PS
Вот ещё вариант

Обсудить на форуме (комментариев 5).