|
|||||
|
Терминальный сервер под Linux? Это просто.
Занимаясь автоматизацией учетных процессов, я часто (почти постоянно) использую терминальные решения. В начале 2000-х годов мне приходилось организовывать терминальные серверы на базе Citrix MetaFrame. Позже я перестал использовать Citrix и ограничился достаточно качественным сервером Windows 2003. Когда проблема лицензионного программного обеспечения заставила обратить свои взоры на Linux, одним из вопросов, требующих ответа до принятия решения о переходе c системы на систему, стал вопрос о настройке терминального сервера. Покапавшись в недрах интернета я нашел решение, которое мне показалось достаточно простым и удобным. Данное решение пока не до конца проверено, но результаты первых экспериментов меня вполне удовлетворили. Итак:
Настройка терминального сервера под Debian 4.0 или 5.0
(про Debian 6 читайте ниже)На самом деле установка и настройка непосредственно терминального сервера происходит до безобразия просто. Установим VNC сервер с помощью программы управления пакетами synaptic или с помощью команды:
apt-get install vnc4server
Терминальный VNC сервер установлен и его уже можно запускать командой vncserver. При этом VNC запрсит у Вас пароль для подключения клиентом. Учтите, что при логоне удалённым VNC вьювером, сервер даст вам рабочий стол пользователя, от имени которого был запущен vncserver. Помимо этого есть один неприятный, на первый взгляд, момент - Если к запущенному VNC серверу уже подключен один VNC вьювер, то при подключении второго вьювера на этот же порт - клиенты или начнут делить один и тот же сеанс или одного из клиентов просто "выбросит" из сессии, что нас конечно же не устраивает. Выхода из данной ситуации два:
1) Автоматом открыть N VNC-сессий (N=количеству ноебходимых клиентских подключений). При этом каждое подключение будет происходить на отдельный порт 5900 - 590N. Помимо этого, постоянно будут подгружены "неиспользумые" VNC сервера. Также не решается проблема с одновременным подключением нескольких вьюверов на один порт. Данный Вариант нас в корне не устраивает, т.к. нам надо получить работающую систему, максимально похожую на терминальный виндовый сервер для удобства пользователей.
2) Настроить супердемон inetd, чтобы при коннекте на порт 5900 происходил автоматический запуск VNC сервера. При этом все соединения слушаются на одном порту и количество VNC серверов не превышает количество необходимых в данный момент.
Таким образом, выбираем п.2 - правку inetd. В /etc/inetd.conf добавляем слелующую строку:
5900 stream tcp nowait my_user /usr/bin/Xvnc Xvnc -inetd -query localhost -once -depth 24 securitytypes=none
Параметр my_user заменяете на имя пользователя, от чьего имени будет запущен vncservsr. Параметр -query localhost говорит нашему vncserver-у, что авторизация будет происходить локально, используя gdm или xdm (в зависимости от того, что у Вас установлено). Помимо этого можно "поиграть" с настройками geometry, которые зададут разрешение сервера VNC. Все параметры можно увидеть, набрав в консоли Xvnc -h
Терминальный сервер настроен, осталось настроить gdm/xdm (в зависимости от того, что у Вас стоит) принимать запрсы по xdmcp
Если gdm:
Редактируем /etc/gdm/gdm.conf - добавляем
[xdmcp]
Enable=true
Если xdm:
По умолчанию, в целях безопасности, xdm запрещено слушать xdmcp, поэтому редактируем /etc/X11/xdm/xdm-config Находим строку DisplayManager.requestPort: 0 Перед ней ставим знак "!", т.о. получаем следующе
! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
! DisplayManager.requestPort: 0
Таким образом настройка gdm/xdm закончена.
После это рестартуем inetd, gdm/xdm и пробуем подключиться терминальным VNC клиентом. Благодаря тому, что VNC является открытым, существуют различные программные продукты под разные ОСи. Из-под Windows я пользовался VNC Enterprise Edition 4.4 released. Из под Debian – «родной» VNCVIEWER.
Естественно, что везде есть свои "подводные камни". В нашем случае они тоже имеются. Из замеченного - явно бросается в глаза невозможность "восстановиться" в отвалившуюся сессию. Т.е. если человек работал под своим логином, и у него отвалилась сеть, то при повторном логине он не получит окружение рабочего стола, которое было ДО отваливания. Это немного неудобно, но в конечном итоге не смертельно. По крайней мере не будет "мёртвых" сессий.
Debian 6.0. отличается от предыдущих версий (Debian 5.0 и Debian 4.0) тем, что при установке Debian 6.0:
1. по умолчанию устанавливается графическая оболочка Gnome 3, а не Gnome (как в Debian 4.0 и 5.0). Соответственно устанавливается пакет gdm3.
2. по умолчанию не устанавливается пакет openbsd-inetd, который в свою очередь содержит конфигурационный файл inetd.conf супер сервера inetd.
Поэтому мы не находим его в каталоге etc.
Сначала, с помощью программы управления пакетами Synaptic (Система —> Администрирование —> программа управления пакетами Synaptic) или с помощью команды от имени суперпользователя
Затем, с помощью программы управления пакетами Synaptic (Система —> Администрирование —> программа управления пакетами Synaptic) или с помощью команды от имени суперпользователя
Теперь, аналогично установке пакетов vnc4server и gdm устанавливаем пакет openbsd-inetd, т.е. с помощью программы управления пакетами Synaptic (Система —> Администрирование —> программа управления пакетами Synaptic) или с помощью команды от имени суперпользователя
Чтобы при подключении на порт 5900 происходил автоматический запуск VNC сервера и при этом соединения на одном порту
и количество VNC серверов не превышало количество необходимых в данный момент, надо настроить супер сервер inetd.
От имени супер пользователя (root) открыть (вызвать с помощью команды gedit) текстовый редактор. Открываем файл в etc/inetd.conf, добавляем следующую строку:
Осталось настроить, установленный нами, gdm. Открываем файл в etc/gdm/gdm.conf и редактируем его. Добавляем
[xdmcp]
Enable=true