Информационные технологииStfw.Ru 🔍

Обеспечение удаленного доступа с помощью сервера VNC

🕛 08.07.2009, 11:49
Средства X Window очень часто применяются для создания графической среды в системе Linux. Поскольку система X Window непосредственно разрабатывалась для работы в сети, ее очень удобно использовать в качестве инструмента удаленной регистрации. Однако X Window - не единственный инструмент, предоставляющий графический интерфейс для взаимодействия с удаленным компьютером. Эту задачу решают также средства VNC. Сетевая модель VNC отличается от X Window, и ей присущи свои преимущества и недостатки. Процедура инсталляции и настройки сервера VNC отличается от установки и выбора конфигурации Х-сервера. Клиенты этих систем также различаются между собой.
Взаимодействие клиента и сервера VNC
Излагая материал данной главы, я пытался обратить внимание на роль различных клиентских и серверных программ в процессе сетевого взаимодействия. Как вы уже знаете, один и тот же компьютер может действовать как сервер по одному протоколу и выполнять функции клиента по другому протоколу. Рассматривая VNC, понять принцип взаимодействия программ несколько проще, так как в этом случае компьютер, за которым работает пользователь, является клиентом VNC, а удаленный компьютер - сервером VNC.
Если вы вспомните недавнее обсуждение принципов работы X Window, вам, наверное, покажется странным, как клиент VNC может обеспечивать работу пользовательского компьютера. Если Х-сервер управляет клавиатурой, мышью и дисплеем, то как пользователь, не работающий за Х-сервером, может выполнять Х-программы? Дело в том, что VNC предполагает дополнительный уровень сетевого взаимодействия, скрытый от пользователя. На узле сети, выполняющем роль сервера VNC, присутствует Х-клиент, который взаимодействует с Х-сервером локального компьютера. Х-сервер обменивается данными с сервером VNC так, как будто Х-сервер работает с реальными устройствами ввода-вывода, однако вместо локальной клавиатуры, мыши и дисплея сервер VNC взаимодействует по сети с удаленным клиентом VNC, который поддерживает обмен с устройствами ввода-вывода. На рис. 14.5 показано, как работают компоненты сервера VNC. Для сравнения

Отдельный компьютер
Традиционное использование удаленного Х-сервера
VNC-сервер
Рис. 14.5. Сервер VNC взаимодействует с локальным Х-сервером и удаленным клиентом VNC. Клиент, в свою очередь, взаимодействует с Х-сервером и поддерживает обмен данными с клавиатурой, мышью и дисплеем
на этом же рисунке изображено взаимодействие Х-клиента и Х-сервера, работающих на отдельном компьютере и в сети.
Х-сервер, работающий совместно с сервером VNC, поддерживает свое текущее состояние даже в том случае, когда VNC соединение разрывается. Например, если в работе сервера VNC возникнет сбой или если пользователь закроет клиент-программу, не завершив сеанс, сервер VNC продолжит свою работу, и когда пользователь возобновит соединение, приложения, работающие с сервером VNC, останутся открытыми. Такая возможность во многих случаях упрощает работу, например, она может быть очень полезна тогда, когда сеть функционирует ненадежно. Однако не стоит пользоваться ею без необходимости. Если вы надолго прервете сеанс взаимодействия, в работе сервера VNC может возникнуть ошибка; не исключено также, что соединением воспользуется злоумышленник, пытающийся получить доступ к важной информации. (Заметьте, что текущее состояние не поддерживается, когда средства VNC работают совместно с XDMCP.)

VNC обеспечивает уровень защиты выше, чем в Telnet, но ниже, чем XDMCP при Х-взаимодействии посредством SSH. VNC кодирует пароль, но остальные данные передаются в незашифрованном виде. Таким образом, при использовании VNC существует опасность перехвата данных, особенно если соединение устанавливается через Internet.
Средства X Window разрабатывались специально для работы в сети. При обмене X-клиента с Х-сервером информация пересылается в виде символьных строк; битовые карты формируются на том компьютере, на котором осуществляется вывод на дисплей. При работе X Window по сети часто передаются небольшие фрагменты данных. В отличие от X Window, средства VNC ориентированы на работу с битовыми картами. При работе сервер VNC поддерживает сравнительно небольшое число транзакций, но в рамках каждой транзакции передается значительный объем данных. Это означает, что в некоторых сетях и для некоторых приложений VNC будет работать медленнее обычного X-соединения. Например, если вы работаете с текстовым редактором, он передает Х-серве-ру отдельные символы или слова, получив которые Х-сервер генерирует битовую карту на локальной машине. Если же взаимодействие с редактором будет осуществляться посредством VNC, по сети будут передаваться битовые карты, объем которых значительно превышает объем самого подробного описания текста. Различия в скорости работы незначительны в быстродействующих сетях, но становятся все более заметными при уменьшении пропускной способности линий. Способ обмена между компьютерами практически не имеет значения при работе с графическими программами, генерирующими растровые изображения. VNC может работать быстрее на линиях с большой задержкой, например при связи через спутник; в этом случае частые обмены информацией, типичные для системы X Window, являются недостатком и замедляют взаимодействие. Если скорость обмена, обеспечиваемая клиентом и сервером VNC, не устраивает вас, вы можете использовать модифицированный вариант VNC, в котором используется кодирование данных, например TightVNC (http: //www. tightvnc. com) или TridiaVNC (http: / /www. developvnc. org). Кодирование с целью уменьшения объема передаваемых данных занимает ресурсы процессора, поэтому TightVNC или TridiaVNC желательно использовать тогда, когда на обоих концах соединения находятся быстродействующие компьютеры. Сжатие данных может также осуществляться при туннелировании VNC через SSH. При этом, в зависимости от пропускной способности линий и быстродействия процессора, эффективность работы может увеличиться либо уменьшиться.
Одно из преимуществ VNC перед X Window состоит в том, что VNC можно использовать для управления системами Windows и MacOS. Сервер VNC получает контроль над устройствами ввода-вывода и передает информацию клиенту VNC. Функционирование серверов VNC для Windows и MacOS здесь описываться не будет, достаточно лишь сказать, что они работают подобно серверу VNC в Linux, но предоставляют ограниченные возможности, а настройка их осуществляется с помощью диалоговых окон. Обращение к серверу VNC, работающему в среде Windows или MacOS, выполняется так же, как и обращение к серверу VNC в Linux. Поскольку в системе Windows или MacOS сервер VNC перехватывает управление экраном, в каждый момент времени работать с компьютером может только один пользователь.
Инсталляция сервера VNC
Программу, реализующую сервер VNC, можно получить с Web-узла VNC http: //www.uk. research. att. com/vnc/. Сервер и клиент VNC поставляются со многими версиями Linux (VNC распространяется в исходных кодах). Иногда и клиент, и сервер входят в состав одного пакета (такой пакет обычно называется vnc), а иногда оформляются в виде разных пакетов (в этом случае пакеты называются vncserver и vnc). Процедура инсталляции Tight VNC и TridiaVNC ничем не отличается от той, которая будет описана ниже.
Если VNC входит в состав вашей версии Linux либо если вы имеете в своем распоряжении архив, содержащий двоичные файлы, инсталляция VNC сводится к выполнению следующих действий (предполагается, что вы инсталлируете версию 3.3.3r2 VNC).
1. Распакуйте архив, вызвав команду tar xvfz vnc-3 . 3 . 3r2_x86_linux_2. О . tgz. При выполнении этой команды будет создан каталог vnc_x86_linux_2 . 0.
2. Скопируйте файлы vncviewer, vncserver, vncpasswd, vncconnect и Xvnc в один из каталогов, указанных в переменной окружения PATH. При желании вы можете поступить и по-другому: скопировать весь каталог vnc_x86_linux_2 . О в подходящую для вас позицию файловой системы (например, в каталог /opt) и указать этот каталог в переменной окружения PATH. Если необходимо, вы можете обеспечить доступ к каталогу с помощью символьной ссылки.
3. Создайте в рабочем каталоге пользователя, который должен работать с VNC, подкаталог с именем .vnc. Владельцем этого каталога должен быть сам пользователь. В этом каталоге будут содержаться конфигурационные файлы, в том числе файл пароля. Чтобы предотвратить утечку информации, необходимо установить права доступа 700 (rwX-).
4. От имени пользователя, работающего с VNC, введите команду vncpasswd. Как нетрудно догадаться, с помощью утилиты vncpasswd задается пароль. В отличие от большинства других серверов регистрации, VNC не полагается на результаты процедуры аутентификации, проведенной средствами Linux. (Если VNC работает совместно с сервером XDMCP, за аутентификацию отвечает Linux, поэтому вы
жете не выполнять пп. 3 и 4 данной процедуры.)
Выше были описаны действия, которые обычно выполняются при инсталляции сервера и клиента VNC. VNC также обеспечивает работу в режиме Java-сервера. Этот режим позволяет пользователю обращаться к серверу VNC с любого Web-броузера, поддерживающего Java. Необходимые классы Java находятся в подкаталоге classes. Дополнительная информация об инсталляции и использовании этих классов находится в файле README.
Запуск сервера VNC
Для того чтобы запустить сервер VNC, надо зарегистрироваться как обычный пользователь на том компьютере, на котором инсталлирован этот сервер. Обычно пользователи регистрируются с того узла сети, на котором они собираются работать, но при необходимости вы можете подготовить сервер VNC к взаимодействию с удаленной системой, с помощью консольного терминала. Для запуска сервера надо задать от имени обычного пользователя следующую команду:
$ vncserver

New 'X' desktop is vncserv.threeroomco.com: 1
Starting applications specified in /home/rodsmith/ .vnc/xstartup Log file is /home/rodsmith/.vnc/vncserv.threeroomco.com:1.log
Обратите внимание на данные, отображаемые при выполнении команды; особенно для вас важен номер рабочего стола. В приведенном выше примере это номер 1 - число, которое отображается после имени узла (vncserv .threeroomco. com: 1). В процессе работы VNC запускает Х-сервер (программа Xvnc). Этот Х-сервер можно рассматривать как сервер, запускаемый посредством команды startx; он формирует среду рабочего стола или диспетчер окон. Если несколько пользователей запускают серверы VNC с одного компьютера, необходимы средства, позволяющие идентифицировать их. В качестве идентификатора используется номер Х-сервера. Номер 0 обычно выделяется для X-сервера, связанного с консолью, поэтому первому серверу VNC, вероятнее всего, будет соответствовать номер 1. В последующих сеансах VNC будут использоваться номера 2, 3 и т. д.
ВНИМАНИЕ Если вы зарегистрируетесь на удаленном узле средствами SSH и попытаетесь f вызвать сервер VNC, вы, возможно, обнаружите, что выполняется только сервер VNC, а остальные программы (в том числе диспетчеры окон) не работают. В результате вы увидите экран, заполненный фоновым цветом без окон. Так происходит потому, что SSH пытается установить конфигурацию xauth в соответствии с настройкой своих средств туннелирования Х-взаимодействия. Чтобы избавиться от этой проблемы, нужно перед запуском vncserver задать команду export XAUTHORITY=~/ .Xauthority, в результате выполнения которой будут восстановлены установки по умолчанию. Можно также скопировать записи из файла, используемого по умолчанию, во временный файл SSH.
Закончив работу с сервером VNC, надо завершить сеанс взаимодействия, указав для этого опцию -kill:
$ vncserver -kill :1
Число в составе данной команды определяет номер сеанса VNC; этот номер отображается при вызове vncserver. Завершать выполнение сервера VNC не обязательно, но работающий сервер напрасно занимает память компьютера. Вызывать данную команду целесообразно с точки зрения безопасности системы, поскольку невозможно воспользоваться недостатками в защите сервера, если он не выполняется. Перед тем как отключать сервер, убедитесь, что вы окончили работу со всеми программами и закрыли файлы, так как сервер VNC, заканчивая работу, не выводит предупреждающих сообщений.
Использование клиента YNC для взаимодействия с сервером
Программа, реализующая функции клиента VNC в системе Linux, называется vncviewer. Для вызова клиента надо ввести имя программы и, возможно, имя сервера VNC и номер дисплея.
$ vncviewer vncserv.threeroomco.com:1
VNC server supports protocol version 3.3 (viewer 3.3) Password:

При вводе пароля символы не отображаются на экране. При выполнении клиент VNC выводит дополнительную информацию, например, число битов, используемых для представления цвета, и другие технологические характеристики. Если клиент-программа выполняется корректно, вы увидите на экране окно, отображающее рабочий стол Linux. Возможно, что конфигурация сервера VNC вас не устроит и вы захотите изменить ее.
Если вы не укажете номер дисплея, клиент VNC попытается подключиться к дисплею с номером 0, который в системе Linux не работает, так как используется локальным X-сервером. Без указания номера дисплея можно обращаться к серверу VNC, работающему в системе Windows или MacOS. Если вы не зададите имя узла, клиент VNC отобразит диалоговое окно, в котором предложит вам ввести имя узла и пароль.
Клиенты, предназначенные для работы в Windows и MacOS, действуют аналогично клиенту VNC Linux. Для запуска программы надо дважды щелкнуть на соответствующей пиктограмме, в результате чего клиент отобразит диалоговое окно для ввода имени сервера VNC и номера дисплея (например, vncserv.threeroomco.com: 1). Если имя узла задано верно, у пользователя запрашивается пароль, после ввода которого будет выведено окно с рабочим столом сервера VNC.
Настройка сервера VNC
VNC представляет собой удобный инструмент удаленного доступа, но при его использовании могут возникать проблемы. В частности, многие пользователи сообщают об ошибках, возникающих при совместной работе редактора NEdit (http: //www. nedit. org) и VNC. В моей системе NEdit не реагировал на нажатие клавиш, т. е. оказался совершенно непригоден к использованию. К счастью, серьезные ошибки, подобные этой, возникают достаточно редко. В большинстве случаев проблему удается решить с помощью настройки компонентов VNC. Характеристики VNC можно задавать, редактируя сценарий, используемый для запуска сервера, либо изменяя содержимое конфигурационных файлов.
Установка основных характеристик сервера
Программа, реализующая функции сервера VNC, называется Xvnc. Эта программа содержит Х-сервер (взаимодействующий с локальными Х-программами) и сервер VNC (который взаимодействует с клиентом VNC). Вы, вероятно, заметили, что при обсуждении работы сервера VNC программа Xvnc не упоминалась. Дело в том, что эта программа вызывается из сценария vncserver, используемого для запуска сервера VNC. Сценарий vncserver написан на языке Perl; изменяя его код, вы можете задавать характеристики сервера VNC, принимаемые по умолчанию. Некоторые из установок, которые можно осуществить, редактируя код сценария, описаны ниже.
- Автоматическая установка параметров, используемых по умолчанию. В последних версиях vncserver для определения размера дисплея, числа битов, используемых для представления цвета, и других параметров применялся вызов &GetXDisplayDefaults(). Однако при этом может быть получено значение размера, не подходящее для клиента. Если вы хотите изменить размер экрана, вам надо закомментировать данную строку, поместив в начале ее символ #, и указать размер экрана явным образом. В сценарии, поставляемом в составе пакета, размер экрана устанавливается до вызова SGetXDisplayDefaults ().

- Размер экрана. При запуске программа Xvnc создает виртуальный экран определенного размера. Если вы не используете опции по умолчанию, установите размер экрана с помощью переменной $geometry. Например, чтобы задать размер 900 х 675, надо включить в состав сценария следующую строку:
$geometry = "900x675";
СОВЕТ Поскольку клиент VNC отображает рабочий стол сервера VNC в окне, имеет смысл указать размер дисплея несколько меньше, чем реальный его размер.
Оставшееся место понадобится для вывода обрамления. Если размер дисплея
выбран слишком большим, для просмотра рабочего стола придется использовать
элементы прокрутки.
Глубина цвета. Включив в состав сценария nepeMeHHyro$depth, вы можете контролировать число битов, используемых для представления цвета. Во многих случаях для кодирования цвета бывает достаточно 16 битов, однако программы, воспроизводящие большое количество разнообразных цветов, могут искажать данные, отображаемые другими программами. Это правило не распространяется на VNC;
16-битовое представление может привести к некорректному отображению цвета. В будущем данная проблема, скорее всего, будет решена.
- Шрифт, или путь к шрифту. Сценарий, поставляемый в составе пакета, по умолчанию настроен для использования сервера шрифтов. Изменить эту настройку можно с помощью раздела Add font path and color database stuff here.
Для добавления шрифта используется параметр -f р в строке $cmd, которая используется при вызове Xvnc. При необходимости вы можете сконфигурировать VNC для работы с сервером шрифтов. Использованием сервера шрифтов описано в главе 15.
Диспетчер окон, используемый по умолчанию. Сценарий vncserver, поставляемый в составе дистрибутивного пакета, содержит переменную $defaultXStartup, определяющую содержимое пользовательского сценария запуска. При первом запуске сценарий vncserver помещает соответствующий файл в пользовательский каталог. По умолчанию задан диспетчер окон twm, который в настоящее время используется достаточно редко. Вы можете отказаться от значения, заданного по умолчанию, и заменить вызов twm на вызов другого диспетчера окон или среды рабочего стола, например startkde, sawmill или icewm. Изменения, внесенные в сценарий vncserver, повлияют на работу только тех пользователей, которые еще не запускали данный сценарий. Ниже будет рассмотрены средства установки конфигурации для существующих пользователей.
Даже если вы плохо знакомы с языком Perl, просмотрев данный сценарий, вы найдете сведения о многих характеристиках, которые, возможно, захотите изменить. В основном данный сценарий устанавливает опции, которые должны быть указаны при запуске Xvnc; они помещаются в строку $cmd. Разобравшись в том, как формируются опции, вы сможете легко модифицировать их. По команде Xvnc -help &> Xvnc-help.txtсоздается текстовый файл с именем Xvnc-help. txt, содержащий информацию о доступных опциях Xvnc.

Перед тем как вносить изменения в сценарий vncserver, необходимо создать его резервную копию. Она понадобится в случае, если вы допустите ошибку и вам придется вернуться к исходному варианту сценария.
Сценарии vncserver, входящие в состав некоторых пакетов, существенно отличаются от исходного варианта. Особенно это относится к сценарию, поставляемому в составе системы Debian. Тем не менее советы, приведенные выше, применимы ко всем разновидностям vncserver. Необходимо лишь перед внесением изменений ознакомиться с конкретными особенностями сценария. Например, сценарий для системы Debian создает для определения шрифта переменную $ fontpath.
Изменение параметров для отдельных пользователей
Глобальные характеристики сервера VNC задаются с помощью сценария vncserver. Если пользователь захочет изменить некоторые установки, он может предпринять следующие действия.
- Самостоятельно создать сценарий запуска сервера VNC. Пользователь может скопировать сценарий в свой каталог, модифицировать его и использовать в дальнейшем для запуска сервера.
- Организовать передачу опций сценарию. Сценарий vncserver обрабатывает несколько опций, которые могут быть использованы для переопределения значений, заданных по умолчанию. Например, опция -geometry ширина_и_высота устанавливает размер рабочего стола. Эти опции в основном совпадают с опциями программы Xvnc.
- Редактировать отдельные конфигурационные файлы. Стандартный сценарий запуска сервера VNC перед окончанием своего выполнения вызывает сценарий ~/ . vnc/xstartup. В нем содержатся команды запуска диспетчера окон и xterm. Пользователь может редактировать этот файл так же, как и обычный сценарий запуска X Window. В некоторых дистрибутивных пакетах имя и расположение этого сценария отличается от указанных здесь. Например, в системе Debian вызывается сценарий /etc/Xll/Xsession, который, в свою очередь, запускает пользовательский сценарий ~/ .xsession.
В большинстве случаев для организации передачи опций и редактирования конфигурационных файлов приходится затрачивать гораздо меньше усилий, чем для создания сценария запуска. Однако бывают ситуации, когда один из способов настройки оказывается намного удобнее остальных. Например, размер экрана проще всего задавать с помощью опции -geometry в сценарии vncserver, а диспетчер окон лучше всего настраивать, используя его сценарий запуска. Общее правило таково: содержимое сценария vncserver позволяет задать поведение Х-сервера в составе VNC, а опции сценария запуска дают возможность настроить диспетчер окон и среду рабочего стола.
Совместная работа серверов XDMCP и VNC
Один из главных недостатков VNC заключается в следующем: для того, чтобы начать работу с сервером VNC, надо зарегистрироваться, используя один из стандартных протоколов, загрузить сервер и запомнить номер дисплея. Эта рутинная процедура мешает выполнению реальных задач. Решением данной проблемы может быть использование VNC Х-сервера и сервера XDMCP на одном компьютере.

Подобно большинству Х-серверов, VNC Х-сервер позволяет серверу XDMCP управлять отображением данных. Для того, чтобы это стало возможным, вам надо указать при запуске VNC Х-сервера опцию -query имя_узла. Если вы используете суперсервер xinetd, соответствующая запись в конфигурационном файле будет выглядеть следующим образом:
service vnc
{
disable = no
socket_type - stream protocol = tcp wait = no
user - nobody
server = /usr/local/bin/Xvnc
server args = -inetd -query vncserv -once
}
В данном случае важно правильно задать параметры сервера. В частности, опция -inetd сообщает Xvnc о том, что он запущен посредством суперсервера, -query vncserv означает, что необходимо обратиться к vncserv. Опция -once свидетельствует о том, что сервер должен быть вызван однократно, а затем прекратить свою работу; в результате, если пользователь завершит сеанс взаимодействия, соединение VNC будет разорвано. Вы можете также использовать и другие опции Xvnc, например -geometry или -fp. Кроме того, в файле /etc/services должно присутствовать описание порта.
vnc 5900/tcp
Для обычных соединений VNC использует номера портов 5900-5999, а порты 5800-5899 применяются для обработки обращений посредством Web-броузера (поддержки режима Java-сервера). Порт 5900 соответствует дисплею 0, порт 5901 - дисплею 1 и т. д. Таким образом, приведенное выше описание задает отображение приглашения к регистрации XDMCP и взаимодействие VNC через порт 0. Очевидно, что сервер XDMCP должен выполняться на компьютере, определенном посредством опции -query. Вы можете настроить систему так, чтобы она по-разному реагировала на обращения клиента через различные порты. Например, дисплею 0 может соответствовать размер рабочего стола 800 х 600, дисплею 1 - размер 1024 х 768 и т. д. Для идентификации таких серверов необходимо поместить в файл /etc/services несколько записей: по одной на каждый порт. Настроенный таким образом сервер VNC не требует ввода пароля - все детали взаимодействия обеспечивает сервер XDMCP. (Заметьте, что в отличие от традиционного VNC-взаимодействия, имя пользователя и пароль передаются в незакодированном виде.) Еще одна особенность сконфигурированного подобным образом сервера VNC состоит в том, что он может принимать обращения нескольких пользователей через один порт. Таким образом, совместное использование серверов VNC и XDMCP можно условно сравнить с применением сервера XDMCP и удаленного Х-сервера. Однако эти системы имеют ряд отличий. Наиболее важные из них описаны ниже.
- При использованииVNC между двумя компьютерами устанавливается одно соединение. Это удобно в тех случаях, когда взаимодействующие компьютеры разделены брандмауэром; при этом уменьшается количество серверов, доступных извне.
- При работе сVNC на пользовательском компьютере вместо Х-сервера выполняется клиент VNC. Сервер VNC распространяется в исходных кодах, поэтому он свободно доступен, в то время как большинство Х-серверов для Windows и MacGS предоставляется на коммерческой основе.
- Протокол VNC имеет свои особенности. Если на пользовательском компьютере вы замените Х-сервер клиентом VNC, качество системы может как повыситься, так и снизиться, в зависимости от потребностей пользователя и применяемого X-сервера.
- В большинстве случаев протокол VNC обеспечивает меньшее быстродействие по сравнению с X Window, однако в некоторых случаях применение VNC вместо X Window может повысить производительность системы.

Сетевые средства Linux   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉