Понравился контент? Нажми:

Взаимодействие Windows и Linux

Как работать в среде, состоящей из нескольких компьютеров, управляемых разными ОС? Можно купить кресло на колесиках и виртуозно переезжать от одного компьютера к другому (я своими глазами видел такие «гонки» в одном из офисов), а можно наладить взаимодействие между различными платформами. Речь у нас пойдет о взаимодействии Windows и Linux. Нас интересует два типа взаимодействия между компьютерами: удаленный рабочий стол (в широком смысле слова), то есть, возможность работать с удаленной системой так, как если бы ваши монитор и клавиатура были подключены к этой системе и возможность передачи файлов и другой информации между двумя системами. В идеале нам бы хотелось, чтобы все эти возможности были интегрированы в одной программе, но пока что такого идеального решения не существует. Тут я хотел бы уточнить одно важное требование, которое я предъявляю к программам и пакетам, попавшим в этот обзор: используемая ими технология связи должна быть «родной» хотя бы для одной из систем. Представьте себе, что вы пришли со своим ноутбуком в стороннюю организацию и просите тамошних админов настроить их системы так, чтобы вы могли к ним подключиться. Не очень удачный вариант, не так ли? Именно по этой причине в обзор не попали различные решения на базе VNC.

В арсенале Linux и Windows различных средств взаимодействия с другими компьютерами накопилось немало но проблемы стыковки двух платформ требуют зачастую нетривиальных решений. Причина, между прочим, заключается в принципиально различных подходах к созданию средств взаимодействия на упомянутых платформах. Linux изначально разрабатывалась как многопользовательская система с возможностью удаленного подключения как в текстовом так и в графическом режиме. Windows в основе своей всегда была системой персонального, ни с чем не связанного, компьютера. Средства взаимодействия по локальной сети всегда шли в виде своего рода «довеска» (вспомните Windows 3.11 for Workgroups, специальные сетевые расширения Windows 95, или, хотя бы, взгляните на линейки последних версий Windows, где полноценные средства взаимодействия с другими компьютерами доступны только в старших и наиболее дорогих изданиях). Кроме того, Linux всегда опиралась на открытые протоколы, большая часть которых является стандартом в мире Unix-систем. Microsoft, напротив, делает ставку на собственные протоколы, естественно, закрытые и не всегда совместимые со своими предыдущими версиями. Те, кто пишет программы для работы с Linux из-под Windows, работают с открытыми стандартами и спецификациями, а тем, кто решает обратную задачу, приходится нередко заниматься обратной инженерией.

Передача файлов

Думаю, что способ, с помощью которого Windows-компьютеры обмениваются файлами, известен всем читателям этой статьи. Вы, конечно, знаете так же и о средствах, с помощью которых Linux может подключаться к службам разделения файлов и принтеров Microsoft Windows. Поздравим себя! В последнее время Samba работает действительно хорошо. Мой Linux-компьютер находит разделяемые Windows-ресурсы локальной сети быстрее и надежнее, чем это делают компьютеры под управлением Windows. Более того, если вы хотите передавать файлы с Linux на Windows, вы можете «расшарить» директории Linux так, что они будут видны в «сетевом окружении» Windows-компьютеров. Это, впрочем, не лучшее решение. Службы разделения файлов и принтеров всегда отличались не очень высоким уровнем безопасности (не случайно все руководства по безопасности Windows рекомендуют отключить разделение ресурсов если в нем нет необходимости). Разработчики Samba учли этот факт, так что в процессе распаривания директории Linux на доступ к ней налагаются дополнительные ограничения, более или менее суровые, в зависимости от политики безопасности конкретной системы. И уж конечно, ни один пользователь Linux, находясь в трезвом уме и твердой памяти, не станет расшаривать всю свою домашнюю директорию. Тем не менее проблема безопасного доступа к файлам, расположенным на Linux-компьютере из-под Windows вполне решаема. Вспомните, каким средством вы пользуетесь для передачи файлов между двумя Linux-машинами. Наверняка это SFTP. SFTP работает «прямо из коробки» практически в любом дистрибутиве Linux (тогда как FTP, например, надо еще устанавливать и настраивать). Кроме того SFTP, в основе которого лежат протоколы SSH, – один из самых безопасных способов передачи информации по сети. Решение, таким образом, напрашивается само собой – установить на компьютер под управлением Windows клиент SFTP и получить безопасный доступ ко всем потенциально доступным файловым ресурсам Linux.

Среди всех клиентов SFTP для Windows мой выбор пал на WinSCP (название программы может ввести в заблуждение (SCP протокол, предназначенный исключительно для передачи файлов, тогда как SFTP может выполнять и другие операции с файловой системой удаленного ПК), на самом деле WinSCP поддерживает и SCP, и SFTP. WinSCP – самый популярный клиент SFTP/SCP для Windows и популярность эта вполне заслужена. Программа (рис. 1) обладает интуитивно понятным интерфейсом (поддерживаются два варианта интерфейса – в стиле Проводника Windows и в стиле папок Рабочего стола). WinSCP позволяет создать несколько профилей для подключения к разным компьютерам. В профиль можно записать адрес удаленной системы, специальные параметры подключения, имя пользователя удаленной системы и даже пароль (не лучшее решение с точки зрения безопасности), так что позднее для соединения с удаленным ПК вам может потребоваться буквально один щелчок мышью. Программа интегрируется с клиентом SSH PuTTY, при условии, что он установлен в системе.

 

WinSCP – расширенный доступ к файлам Linux

Основная головная боль при работе в WinSCP – имена файлов с кириллическими символами. Для того чтобы система обрабатывала их корректно необходимо в группе настроек Environment окна WinSCP Login в списке «UTF-8 encoding for filenames» выбрать значение On (установленная там по умолчанию опция Auto ничем не поможет). Это все при условии, что ваша система использует UTF-8, про другие варианты и подумать страшно. Командуем Линуксом Про самый популярный клиент SSH для Windows, программу PuTTY, трудно сказать что-то особенное. Этот клиент умеет делать все, что должен уметь стандартный клиент SSH. Виртуальный терминал PuTTY (рис. 2) соответствует принятым в Unix-системах стандартам, корректно передает цвета и кодировки, корректно работает с национальными раскладками клавиатуры.

 

PuTTY – лучший клиент SSH для Windows

Недостаток PuTTY – путанная система настроек программы. Например, для того, чтобы при запуске Midnight Commander вместо крокозебр видеть нормальную кириллицу псевдографику, нужно привести кодировку, используемую программой, в соответствие с кодировкой, используемой сервером Linux. Для этого в окне настроек необходимо перейти в группу Windows/Translation и выбрать требуемую кодировку. Если не хотите скакать по пунктам окна настроек при каждом запуске PuTTy, сохраните их. Это делается в группе настроек Session окна PuTTY Configuration. Если вы правильно задали все необходимые настройки и не забыли сохранить их в соответствующем профиле, то при следующем запуске программы для сoединения с Linux-компьютером понадобится ввести только пароль.

Еще одна особенность PuTTY, понравившаяся лично мне, заключается в том, что программа не требует установки и сразу же запускается из под ограниченной учетной записи Windows. Об это особенности putty хотелось бы сказать поподробнее. Среди индивидуальных разработчиков программ для Windows считается непрофессиональным не снабдить свое творение навороченной системой инсталляции (хорошо еще, если дело ограничивается стандартным файлом MSI). В то же время очевидно, что далеко не всем программам Windows необходимо публиковать разделяемые компоненты или делать записи в реестре Windows. Наличие специального инсталлятора для таких программ означает только то, что пользователю лишний раз придется переключаться в режим администратора. Мой искренний совет всем Windows-разработчикам: если ваша программа не нуждается в обязательной процедуре инсталляции, не делайте ее обязательной! Если функции инсталлятора программы сводятся к размещению ярлыка запуска программы на Рабочем столе и в меню «Пуск», значит инсталлятор этой программе не нужен.

Удаленный рабочий стол

Консоль Linux может многое, но для комфортной работы желательно иметь доступ к программам с графическим интерфейсом. И у Windows, и у Linux есть средства для удаленного доступа к графической оболочке системы, но средства эти, мягко говоря, не очень хорошо сочетаются между собой. Windows использует проприетарный, постоянно развивающийся протокол RDP. Linux использует протокол X Window. Именно на примере протоколов удаленного доступа к графической оболочке наиболее ярко проявляется различие философий сетевого взаимодействия двух систем. Графическая система X Window изначально создавалась для работы в сети, так что любой компьютер с установленными «Иксами» уже готов к удаленному доступу. В мире Windows возможность доступа к удаленному рабочему столу – это бонус. Полнофункциональный доступ (для нескольких пользователей одновременно) возможен только в серверных изданиях Widows, остальные издания довольствуются усеченными вариантами (наиболее усеченный, естественно, в Home Edition). Сам по себе протокол RDP не так уж и плох. Последние версии RDP обеспечивают неплохой уровень безопасности, эффективную передачу трехмерной графики, возможность отображения локальных устройств в удаленной системе (что позволяет совместить работу с удаленным десктопом и передачу файлов). Проблема для Linux-разработчиков заключается, как всегда, в закрытости протокола. Впрочем, как и в случае с Samba, решение, пусть и ограниченное, было найдено. С недавних пор ведущие дистрибутивы Linux обзавелись собственным сервером RDP – xrdp. Если в вашей Linux-системе такой сервер установлен и работает, вы сможете подключаться к серверу X Window, используя стандартный клиент удаленного доступа Windows (рис. 3).

 

Удаленный рабочий стол OpenSUSE

Однако не спешите радоваться. Проект xrdp – довольно сырой и обновляется очень медленно (последнее обновление произошло примерно год назад). Среди протестированных мной систем xrdp стабильно работал только на Open SUSE 11.1 (и то, потому только, что его там дорабатывали напильником). Ни сервер входящий в состав Ubuntu, ни сервер, скомпилированный из исходников, скаченных с сайта проекта (xrdp.sourceforge.net) так и не заработали. Судя по всему у сервера xrdp существуют проблемы с преобразованием шрифтов. За исключением сервера из OpenSUSE ни один протестированный сервер не смог вывести на экран ни одной надписи, а смотреть на пустые окна не очень интересно. Да и сервер из дистрибутива OpenSUSE тоже оказался не идеален. Если мой ноутбук с ОС Windows в ходе подключения к Linux-системе переходил в спящее состояние, то по выходе из него соединение оказывалось разорванным, в чем, конечно, не было бы особой беды, если бы разорванное соединение можно было восстановить. Но сделать это не удавалось. Не помогал даже перезапуск сервера xrdp на Linux-машине, приходилось перезапускать всю систему. Сервер RDP для Linux не поддерживает такие возможности протокола RDP как передача звука и трехмерной графики (об отображении устройств я уж и не говорю). В остальном сервер xrdp от OpenSUSE работает хорошо, в том числе прекрасно справляется с переключением раскладок клавиатуры. Отметим также, что сервер RDP для Linux работает не совсем так, как RDP-сервер Windows. Подключаясь по протоколу RDP у удаленному рабочему столу Windows XP Professional, вы видите тот рабочий стол, который бы видел пользователь, подключенный к системе локально. Сервер RDP для Linux использует специальный оконный менеджер и создает для вас отдельный X-дисплей (работа с несколькими независимыми дисплеями – стандартная функция сервера X Window, которая, однако, мало используется, так как компьютеры редко снабжены несколькими комплектами мониторов и клавиатур). Таким образом, подключаясь к серверу RDP удаленно, вы не увидите графических программ, запущенных в ходе локального сеанса подключения. Положительный момент заключается в том, что удаленный и локальный пользователь могут работать, не мешая друг другу.

В случае с сервером RDP мы используем «не-родную» технологию на стороне Linux-сервера и «родную» технологию на стороне клиента Windows. У нас есть возможность поступить и наоборот – установить X-сервер на компьютере с Windows и подключаться к Linux-машине, используя X-протокол. На этот раз наш выбор - Xming X Server for Windows. Это бесплатный стабильный X сервер для Windows, корни которого, как нетрудно догадаться, уходят в проект Cygwin/X. Собственно говоря, если у вас установлен Cygwin/X, вам незачем беспокоиться о связи с Linux-машинами – весь необходимый инструментарий у вас под рукой. Но громоздкий и непростой в настройке Cygwin/X подходит не всем пользователям. Xming X Server гораздо проще в установке и компактнее (между прочим, несмотря на родственные связи, Xming X Server не использует библиотеку Cygwin). Установив Xming X Server на своем компьютере вы увидите в трей-области знакомы логотип X Window. Это значит, что ваша Windows-система готова к обмену данными по протоколу X. Однако для запуска программ с удаленной системы одного X-сервера недостаточно. Нужен еще клиент SSH. Тут нам, как нельзя кстати, подойдет описанный выше клиент PuTTY. Среди возможностей этого клиента есть и передача данных по X-протоколу, но по умолчанию она отключена. Для того чтобы задействовать ее, в окне настроек PuTTY перейдите в группу Connection/SSH/X11 и установите флажок Enable X11 forwarding. Теперь можете смело подключаться через PuTTY к удаленной системе и любоваться Linux-программами на рабочем столе Windows (рис. 4, 5).

 

Xming X Server может работать в двух режимах – многооконном, когда каждое X-приложение запускается в отдельном окне Windows, и в режиме рабочего стола, когда все окна X-приложений связаны одним супер-окном. Недостатком многооконного режима является невозможность адекватного переключения раскладок клавиатуры. Управляем Windows С клиентом RDP на платформе Linux дела обстоят гораздо лучше, чем с сервером. Клиент RDP для KDE – KRDC работает вполне стабильно. Программа поддерживает передачу звука с удаленного ПК на локальный, но не поддерживает передачу трехмерной графики DirectX и отображение устройств (что, в общем, не удивительно). KRDC умеет работать с различными раскладками клавиатуры. KRDC позволяет настраивать количество цветов и разрешение виртуального экрана, а также некоторые другие параметры подключения (рис. 6). Проблемы возникают только в том случае, если на локальной и удаленной системах для переключения раскладок используется одно и то же сочетание клавиш.

 

А можно ли управлять Windows при помощи SSH? В стандартный комплект поставки Windows SSH-сервер не входит. Есть, конечно, пакет Windows Services for Unix, включающий в себя клиент и сервер SSH, и многое другое, но этот монстр в 217 мегабайт весом работает только на серверных изданиях Windows. Лучше уж, по-моему, ставить CygWin. Зная, что практически все серверные программы Linux давно уже портированы под Windows, я рассчитывал без труда найти компактный сервер OpenSSH с открытыми исходными текстами. На практике все оказалось несколько сложнее. Первый проект, предложенный Google’ом, - WinSSHD, не обновлялся с 2004 года, а в мире Windows за это время изменилось очень многое. В конце концов, я остановил свой выбор на закрытом, но бесплатном freeSSHd (www.freesshd.com). Однако и тут все оказалось непросто. Несмотря на то, что проект активно обновляется, у freeSSHd возникают некоторые проблемы при работе под Windows Vista (и это когда на носу уже Windows 7!). Для того чтобы программа заработала под Вистой, ее надо устанавливать в незащищенную директорию (то есть, не в C:\Proram Files\), и запускать соответствующую службу вручную хотя бы один раз, для настройки сервера (при работе с Windows XP подобных проблем не возникает). Если вы преодолели все эти сложности, вы можете подключиться к Windows, используя клиенты SSH и SFTP вашей Linux-системы. Работа с Windows через SFTP дает вам те же преимущества, что и работа с Linux через WinSCP – гораздо более широкий и одновременно безопасный доступ по сравнению с обычным механизмом разделяемых папок Windows/Samba.

Консольный доступ через SSH на не-серверный вариант Windows не предоставляет вам широких возможностей в плане управления системой, так как консольных программ для Windows не много, а запускать графические вы, естественно, не сможете. Между прочим, для корректного отображения символов кириллицы даже в новейшей Vista вам понадобится установить в терминале Linux старую добрую кодировку CP866.

Впрочем, и при консольном подключении к Windows можно несколько расширить свои возможности, установив в систему новую консоль Windows Power Shell (в Windows 7 эта консоль будет установлена по умолчанию вместе со старым cmd.exe). Главное достоинство Windows Power Shell – встроенный язык сценариев, основанный на C#. На этом языке написано множество скриптов – коммандлетов, которые позволяют выполнять основные консольные операции (вы, естественно, можете пополнить список стандартных коммандлетов своими собственными разработками). Любопытно отметить, что многие коммандлеты имеют псевдонимы, совпадающие с именами консольных команд Unix, так что при работе в Windows Power Shell мы можем использовать команды ls, more, ps, kill, а так же оператор конвейеризации ввода/вывода |. Windows Power Shell поставляется в двух вариантах – графическом и консольном. При подключении к Windows через SSH, мы, естественно, выбираем консольный вариант (рис. 7).

 

Доступ к Windows Power Shell из-под Linux – «убиваем» Internet Explorer


Понравился контент? Нажми:

© Андрей Боровский, 2009


На главную