Если бы не слушатель курсов по Linux, преподавателем которых я являюсь, мне, как человеку, очень долго работающему с Linux, эта мысль вряд ли пришла бы в голову. На первый взгляд кажется, а зачем ЭТО вообще надо? Но по здравому размышлению предложенная идея показалась достаточно интересной, и захотелось посмотреть, как он будет работать.

С чего все началось? После рассмотрения темы, посвященной системе X Window и возможности запуска X-клиентов и X-серверов на разных машинах в сети, у слушателя возник вопрос: «А можно ли сделать так, чтобы все критические с точки зрения безопасности приложения выполнялись на Linux, а их вывод отображался на машинах с Windows?».

Вопрос показался странным — зачем устанавливать рабочие станции Windows, если так волнует безопасность? В системе Linux имеется полный набор офисного программного обеспечения, для их использования переобучать персонал почти не приходится. Как рабочая станция Linux — вполне приемлемое и безопасное решение. Разве что специфическое программное обеспечение, наподобие «1С Предприятие», на нем не установишь — для его выполнения потребуется терминальный сервер Windows.

Однако слушатель отверг такое решение, поскольку основными пользователями в его системе были дизайнеры, а им требуется специфичное ПО, отсутствующее в Linux. Проблемы возникают в основном с программами, где предусмотрен доступ в Internet: с почтовыми клиентами, браузерами и т. п. Установка антивирусных средств и обновление самой системы мало чем помогает. Поэтому, когда он услышал на занятии, что в Linux программа способна физически работать на одной машине, а отображать данные на другой, без потери качества изображения и скорости работы, у слушателя возник вполне естественный, с его точки зрения, вопрос о возможности отображать данные программ, работающих под управлением Linux, на компьютерах с Windows. Тогда все программы, обращающиеся в Internet, можно перевести на Linux, где они не подвержены вирусам и прочим возможностям взлома. Все файлы, получаемые клиентами из Internet, будут сохраняться исключительно на машине Linux, а там, где установлена Windows, останутся только окна с соответствующими программами.

ОБ ИСПОЛЬЗУЕМЫХ ТЕХНОЛОГИЯХ

В UNIX в качестве графической оболочки применяется система X Window, у которой имеется много различных реализаций — коммерческих, полукоммерческих и т. д. Что касается Linux, то на данный момент в основном используются XFree86 и xorg. Из-за проблем с лицензированием первая система отсутствует в современных дистрибутивах Linux, поэтому все чаще встречается xorg.

X Window построена по принципу клиент-сервер. Однако принцип взаимоотношения клиента и сервера поставлен «с ног на голову». Обычно под сервером или серверным приложением понимают какое-либо программное обеспечение, реализующее хранение информации или сложные вычисления. А клиент — это программа, позволяющая осуществлять управление или получать доступ к информации. В X Window сервер — программа для отрисовки изображения на экране, а назначение клиента — отображать данные на сервере, с использованием функций библиотеки Xlib. Таким образом, сервер X Window содержит драйверы видеокарты, клавиатуры, мыши и других устройств ввода и позволяет клиентским программам «рисовать» на экране монитора. Клиент и сервер могут находиться на различных машинах в сети. Более того, допустимо, чтобы на одном сервере «рисовали» несколько клиентов, каждый из которых выполняется на разных машинах.

Программу с функциями X-сервера можно расположить на отдельном устройстве в сети — будь то специальное устройство, так называемый X-терминал, или программа для любой операционной системы (в том числе Windows), лишь бы она обеспечивала функционал X-сервера. Потенциально данные на X-сервере способен отображать любой X-клиент, но обычно вводят ограничения и указывают конкретные клиенты.

Для отрисовки окон используется специальное программное обеспечение — оконный менеджер (Window Manager). От него зависит, как выглядят окна и как они себя ведут. Оконный менеджер — тоже X-клиент, т. е. для отображения окон он посылает данные на Х-сервер. Некоторые программы X-сервера, работающие под управлением Windows, имеют встроенный оконный менеджер.

И еще одна немаловажная для X Window программа — менеджер дисплеев (Display Manager). Х-терминал — это устройство, на котором нет ни одной программы. Все программы (X-клиенты) выполняются на каких-либо машинах, а на Х-терминале только отображаются данные. После включения Х-терминал подключается по протоколу X Display Manager Connect Protocol (XDMCP) к серверу, где установлен менеджер дисплеев, посредством которого клиент осуществляет вход в систему и запускает оконный менеджер. Так мы получаем полноценное рабочее место на машине UNIX с отображением рабочего стола на машине Windows. Все программы (включая оконный менеджер) будут выполняться на UNIX, а данные представит Windows.

Современные программы, реализующие функции X-сервера, позволяют полностью эмулировать X-терминала, но они могут обойтись и без эмуляции. Если нет необходимости отображать весь рабочий стол UNIX, отдельные программы можно воспроизводить в отдельном окне Windows, запуская их на машине UNIX, правда, все равно придется заводить на ней учетную запись пользователя и выводить принадлежащие ему данные на X-сервер.

РЕАЛИЗАЦИЯ X-SERVER ДЛЯ WINDOUS

Итак, какие же программы реализуют работу X-сервера на машине Windows? После непродолжительных поисков мне удалось найти три бесплатных сервера: Gygwin/X, WiredX на Java и условно бесплатный X-Deep/32.

Cygwin/X (http://x.cygwin.com). Широко известная в узких кругах компания Cygwin разрабатывает библиотеку cygwin1.dll для эмуляциии Linux API и занимается переносом на Windows набора популярных утилит GNU. Последние (gcc, ld и т. д.) распространяются по лицензии GNU GPL, однако библиотека cygwin1.dll имеет собственную, отличную от GPL лицензию, в соответствии с которой ее можно использовать в коммерческом программном обеспечении.

Cygwin/X — это перенос X Window System на различные виды ОС Windows. Продукт работает на всех видах Windows, начиная с Windows 95 и заканчивая Windows Server 2003. Cygwin/X содержит X-сервер, библиотеку X и набор стандартных Х-клиентов: xterm, xhost, xclock и др.

WeiredX (http://www.jcraft.com/weiredx). Компания JCraft специализируется на создании коммуникационных программ с использованием технологии Java. Большая часть программного обеспечения распространяется в соответствии с лицензией GNU GPL, в том числе сервер WeiredX. Кроме того, компания распространяет еще один сервер, но под коммерческой лицензией — WiredX.

WeiredX реализует все возможности стандартного X-сервера, а поставляемый с ним набор утилит расширяет их: JSch организует передачу данных по защищенному каналу, JRexec является клиентом rexec и т. д.

X-Deep/32 (http://www.pexus.com/). К сожалению, на сайте производителя не указаны особенности данного Х-сервера, лишь заявлено о полной совместимости с редакцией X11R6.5.1.

ПОДГОТОВКА МАШИНЫ LINUX

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

При добавлении учетной записи важно помнить, что у пользователей обязательно должны быть домашний каталог и реальная оболочка shell.

С менеджерами дисплеев ситуация несколько сложнее, поскольку с Linux могут поставляться три менеджера: xdm, gdm (Gnome) и kdm (KDE). Каждый настраивается различными способами. Мы будем использовать kdm.

Для конфигурации kdm необходимо:

  • найти файл kdmrc. В разных дистрибутивах он находится в разных каталогах. Например, в Slackware Linux — в /opt/kde/share/config/kdm, в RedHat Linux — в /etc/X11/xdm;
  • в файле kdmrc найти раздел [Xdmcp] и задать параметр Enable=true;
  • в том же каталоге, где расположен kdmrc, имеется файл Xaccess, где описываются Х-терминалы, с которых возможно подключаться к менеджеру дисплеев. Чтобы всем разрешить такое подключение, в любую пустую строку необходимо поместить символ «*»;.
  • в файле /etc/X11/xdm/xdm-config, в начале последней строки в параметре DisplayManager.requestPort следует указать символ «!»;
  • если система X Window на сервере не настроена, т. е. не предполагается работать в графическом режиме на самом сервере, то в файле /etc/X11/xdm/Xservers рекомендуется поставить символ комментария «#» в начале строки «:0 local /usr/X11R6/bin/X»;
  • если kdm не был запущен, его следует запустить. Если он уже активен, то следует указать, чтобы он перечитал свой конфигурационный файл — killall -HUP kdm;
  • убедитесь, что kdm открыл на прослушивание порт 177: netstat -nlp | grep 177.

Теперь kdm готов к использованию.

УСТАНОВКА И КОНФИГУРАЦИЯ GYGWIN/X

Для установки Gygwin/X достаточно открыть главную страницу сайта и загрузить программу установки setup.exe.

Рисунок 1. Cygwin в режиме эмулятора терминала. Вход в систему.

Программу можно установить прямо из Internet или из каталога, куда она была сохранена заранее. Далее следует указать каталог, куда будет установлена программа, а также тип текстовых файлов (UNIX или DOS). Затем в предложенном списке серверов FTP отметить ближайший сервер.

В окне Select Packages необходимо выбрать следующие пакеты:

  • xorg-x11-base (обязательно устанавливаемый базовый набор);
  • xorg-x11-bin (рекомендуемый к установке набор содержасщий базовыми программами: xterm, twm и др.);
  • xorg-x11-bin-dlls (рекомендуемый к установке набор с библиотеками, необходимыми для выполнения программ (DLL);
  • xorg-x11-etc (обязательно устанавливаемый набор с конфигурационными файлами Х-сервера и программ);
  • xorg-x11-fcyr (рекомендуемый к установке набор с русскими шрифтами);
  • xorg-x11-fenc (обязательно устанавливаемый);
  • xorg-x11-fnts (обязательно устанавливаемый);
  • xorg-x11-libs-data (обязательно устанавливаемый набор с библиотеками);
  • xorg-x11-xwin (обязательно устанавливаемый, Cygwin/X X Server);
  • xterm: Xterm — X Terminal (рекомендуемый к установке набор с программой X-терминал).

Кроме того, в разделе Net следует включить установку openssh и openssl.

После установки Gygwin/X необходимо настроить. Конфигурационные параметры передаются Gygwin/X при запуске программы XWin.exe в ее командной строке. Для облегчения запуска поставляется специальный файл startxwin.bat.

Если в качестве основного каталога был выбран C:cygwin, то файл startxwin.bat следует искать в каталоге C:cygwinusrX11R6in. В нем необходимо найти строку run XWin -multiwindow -clipboard -silent-dump-error и дописать в конце -xkbrules xorg -xkbmodel pc104 -xkblayout «us,ru» -xkbvariant winkeys -xkboptions «grp:alt_shift_toggle». Добавленные параметры позволяют использовать русскую клавиатуру и по своему значению полностью совпадают с аналогичными параметрами конфигурационного файла Х-сервера xorg.conf в Linux.

РАБОТА С GYGWIN/X

После установки программы на рабочем столе создается ярлык Cygwin, посредством которого запускается оболочка bash, так что можно работать со знакомой командной строкой Linux. С ее помощью можно запустить Х-сервер в режиме Х-терминала: X -query 192.168.1.3. Вместо IP-адреса 192.168.1.3 следует указать IP-адрес компьютера, где находится менеджер дисплеев kdm. На экране должно появиться приглашение войти в систему на машине Linux. После входа активизируется оконный менеджер, и теперь можно работать на машине Linux с отображением данных в Windows.

Конечно, такой метод весьма ресурсоемок, при большом количестве клиентов для Linux следует установить мощный компьютер. Впрочем, Gygwin/X предполагает и другой режим, когда на машине Windows запускается Х-сервер, собственный оконный менеджер и программа эмуляции терминала. В этом случае для запуска используется файл startxwin.bat. Благодаря параметру -multiwindow, который передается при запуске XWin.exe, каждое приложение будет открываться в своем окне.

При использовании startxwin.bat не происходит подключение Х-сервера как Х-терминала, и поэтому на машине Linux не требуется настраивать менеджер дисплеев.

После запуска startxwin.bat появляется окно программы эмуляции терминала. Сначала необходимо разрешить удаленным программам отображать данные на Х-сервере, работающем в Windows. Для этих целей воспользуемся программой xhost: xhost +192.168.1.3. Вместо указанного в примере IP-адреса следует ввести IP-адрес машины Linux, на которой будут запускаться программы.

Рисунок 2. Выбор Displey Manager в X Deep/32

Потом необходимо зайти на машину с Linux при помощи программы ssh: ssh user@192.168.1.3 и указать имя пользователя машины Linux и ее IP-адрес.

Теперь сделаем так, чтобы программы, запускаемые на Linux, отображали свои данные в окне на машине Windows. Один из вариантов — использование переменной среды окружения DISPLAY: export DISPLAY=192.168.1.2:0.0. Вместо IP-адреса, указанного в примере, следует использовать IP-адрес машины Windows, на которой работает Х-сервер. Программы запускаются обычным образом.

УСТАНОВКА И НАСТРОЙКА WEIREDX

Сервер поставляется в виде архива zip, который достаточно распаковать в любом каталоге. Перед запуском в системе необходимо установить виртуальную машину Java как минимум версии 1.1.

В каталоге, где был распакован архив, появится подкаталог config, в нем находится всего один конфигурационный файл — props. Все параметры сервера задаются в этом файле.

В файле props следует найти параметр weirdx.display.acl, чтобы определить, кому можно отображать данные на этом Х-сервере. Например: +192.168.1.3 или просто символ «+», если доступ разрешен всем.

Запуск сервера лучше производить посредством специального командного файла из каталога misc — weirdx-Java2.bat. Затем надо зайти на сервер Linux при помощи любой программы, поддерживающей протокол ssh (например PuTTY). Как и в случае с Gygwin/X, это необходимо для определения переменной DISPLAY и запуска программы.

WeiredX работал очень медленно (сказывается использование Java), и при отрисовке на экране появлялись черные полосы. В целом качество данного продукта разочаровало, поэтому снимки экрана с примерами работы WeiredX не приводятся.

УСТАНОВКА И НАСТРОЙКА X-DEEP/3

На сайте X-Deep/32 отсутствовала какая-либо документация по продукту, кроме FAQ. Установочный файл занимал почти 16 Mбайт, а для установки нужно 43 Mбайт свободного дискового пространства.

Сам процесс представляет собой обычную процедуру установки программы Windows. По его завершении была обнаружена документация по продукту и две программы: Х-сервер и X Client Launcher.

После запуска Х-сервера появилось диалоговое окно, где предлагалось выбрать сетевой интерфейс, посредством которого X-сервер будет слушать запросы. Затем сервер осуществил поиск доступных по сети менеджеров дисплеев и представил их список.

Правда, при первой попытке подключиться к менеджеру дисплеев не удалось: в сети требовалось настроить корректное преобразование имен. Но после запуска X-Deep/32 можно открыть окно настроек, где явным образом указать машину Linux, к которой следует подключаться.

И еще одна интересная возможность — сделать главное (root) окно Х-сервера прозрачным. Тогда на рабочем столе Windows будут видны пиктограммы Linux.

Рисунок 3. Linux Mozilla показывает данные в окне Windows.

Но при всей простоте установки и настройки Х-сервер показал себя не с лучшей стороны в плане производительности — Gygwin/X работает гораздо быстрее. Встроенная в X-Deep/32 возможность удаленного запуска программ опирается на rsh и rexec. Ни один здравомыслящий администратор эти программы использовать не будет. Таким образом, в случае X-Deep/32 остается довольствоваться режимом эмуляции Х-терминала, что не всегда удобно.

ИТОГИ

В результате проверки трех бесплатных серверов под Windows, наиболее приемлемой, по моему мнению, является реализация от cygwin. Несмотря на то что Х-сервер от cygwin требует установки почти всей базовой среды запуска, он работает великолепно. И это не удивительно, ведь он представляет собой стандартную реализацию сервера xorg, собранную в среде cygwin. Соответственно, при конфигурации сервера применяются те же приемы, что и в Linux.

Про WeiredX ничего хорошего сказать нельзя. Во-первых, очень медленная. Во-вторых, для запуска программ требуется наличие дополнительной программы, позволяющей подключиться к машине Linux.

X-Deep/32 мог бы оказаться лучшим выбором, если бы в нем имелась возможность нормального запуска программ или хотя бы встроенный клиент для удаленной регистрации на машине Linux.

Вероятно, существуют и другие бесплатные реализации Х-серверов для Windows, но при быстром поиске в Internet их обнаружить не удалось. Возможно, коммерческие Х-серверы способны продемонстрировать куда большую скорость работы и легкость конфигурирования, ведь не зря же их продают (цены колеблются от 40 до 300 долларов за рабочее место).

В заключение считаю нужным отметить, что содержать рабочие места под управлением Windows для того, чтобы несколько человек могли запускать специфичные для Windows программы, на мой взгляд, неудобно. Проще выделить один терминальный сервер под управлением Windows 2000 и разместить на нем специфичные программы — 1C, системы CAD и проч., а на рабочих местах использовать бездисковые рабочие станции под управлением Linux, на которых и запускать rdesktop, терминальный клиент для Windows (http://www.rdesktop.org).