Сказка о том, как Windows и Linux дружили в одной сети

Сказка о том, как Windows и Linux дружили в одной сети

Артур Крюков

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

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

Вопрос показался странным — зачем устанавливать рабочие станции Windows, если так волнует безопасность? В системе Linux имеется полный набор офисного программного обеспечения, для их использования переобучать персонал почти не приходится. Как рабочая станция Linux - вполне приемлемое и безопасное решение. Разве что специфическое программное обеспечение, наподобие «1C Предприятие», на нем не установишь — для его выполнения потребуется терминальный сервер 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-терминал, или программа для любой операционной системы (в том числе Windows), лишь бы они обеспечивали функционал Х-сервера. Потенциально данные на Х-сервере способен отображать любой Х-клиент, но обычно вводят ограничения и указывают конкретные клиенты.

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

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

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

Реализация х-сервера для windows

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

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

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

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

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

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

Подготовка машины linux

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

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

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

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

найти файл kdmrc. В разных дистрибутивах он находится в разных каталогах. Например, в Slackware Linux — в /opt/kde/share/config/kdm, в Red Hat Linux — B/etc/X11/xdm;

в файле kdmrc найти раздел [Xdmcp] и задать параметр Enable=true;

в том же каталоге, где расположен kdmrc, имеется файл Xaccess, где описываются X-терминалы, с которых возможно подключаться к менеджеру дисплеев. Чтобы всем разрешить такое подключение, в любую пустую строку необходимо поместить символ «*»;.

в файле /etc/X11/xdm/xdm-config, в начале последней строки в параметре DisplayManager.requestPort следует указать символ "!";

если система X Window на сервере не настроена, т. е. не предполагается работать в графическом режиме на самом сервере, то в файле /etc/X11/xdm/Xservers рекомендуется поставить символ комментария «#» в начале строки local/usr/X11R6/bin/X;

если kdm не был запущен, его следует запустить. Если он уже активен, то следует указать, чтобы он перечитал свой конфигурационный файл — killall -HUP kdm;

убедитесь, что kdm открыл на прослушивание порт 177: netstat -nip I grep 177.

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

Установка и конфигурация GYGWIN/X

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

Программу можно установить прямо из 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-x 11 -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:\cygwin\usr\X11R6\bin. В нем необходимо найти строку run XWin -multiwindow -clipboard -silent-dump-error и дописать в конце -xkbrules xorg -xkbmodel pc104 -xkblayout «us.ru» -xkbvariant winkeys -xkboptions «grp:alt_shiftjtoggle». Добавленные параметры позволяют использовать русскую клавиатуру и по своему значению полностью совпадают с аналогичными параметрами конфигурационного файла Х-сервера xorg.conf в Linux.

Работа с CYGWIN/X

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

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

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

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

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

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

Установка и настройка WEIREDX

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

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

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

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

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

Установка и настройка X-DEEP/3

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

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

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

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

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

Но при всей простоте установки и настройки Х-сервер показал себя не с лучшей стороны в плане производительности — cygwin/X работает гораздо быстрее. Встроенная в X-Deep/32 возможность удаленного запуска программ опирается на rsh и гехес. Ни один здравомыслящий администратор эти программы использовать не будет. Таким образом, в случае 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. LAN

Артур Крюков — преподаватель учебного центра «Специалист». С ним можно связаться по адресу: akr-jukov@speciaUst.ru.

Список литературы

Журнал LAN №8 2005