29-05-2008 17:36
Другой основной графической платформой на рынке является Microsoft Windows, которая претерпела за свою историю весьма значительные эволюции. Она выросла из программного окружения, которое по большей части игнорировало сетевые технологии в общем, и TCP/IP в частности. Она выросла из того окружения, которое предполагало, что один и только один пользователь должен использовать компьютерные ресурсы, и что такой пользователь должен сидеть подле компьютера.
В PC под управлением Windows, приложения должны быть запущены на том же самом компьютере, на котором они будут отображаться. Нет разницы меж "сервером" (читай операционной системой), на котором запущена программа и сервером пользовательского интерфейса (API отображения). В X-ах API-отображения это набор сервисов, предлагаемых сервером, доступных по сети. Программный API, предоставляется операционной системой того хоста, на котором выполняется приложение. На Windows PC оба эти множества сервисов являются локальными.
Этот недостаток Windows привел к тому, что появился целый новый класс программных продуктов. От Close-up до PC Anywhere, эти программные продукты по существу опрашивают дисплей серверного PC и, используя полностью проприетарный протокол, отсылают изменения посредством установленного соединения (изначально это был модем, позже IP-сеть). На клиентской стороне это программное обеспечение перехватывает нажатия клавиш и перемещения мыши и посылает их обратно по установленному соединению, а затем "регенерирует" их на PC-сервере в той последовательности, в которой они происходили, -- пользователю кажется, что он сидит за PC-сервером.
Такие программы использовались, а зачастую продолжают использоваться, для удаленного управления Windows PC. Такой прием работы не имеет ничего общего с тем, как это делается в X. Это просто репликация всего desktop-а. Вы не сможете получить единовременно на одном desktop-е окна, показывающие приложения, запущенные на разных хостах. Тем не менее, это позволяет пользователям Windows достичь некоторых возможностей X-ов в области удаленных вычислений.
AT&T разработали открытый стандарт для, такого рода, пересылок графических desktop-ов и пользовательского ввода. Они назвали его VNC или virtual network console (виртуальная сетевая консоль). Они разработали серверную и клиентскую части, работающие по такому стандарту, доступные для большого количества платформ, к счастью и для Linux, и поместили открытый код под GNU Public License.
Перед тем как мы погрузимся в детали реализации на Linux, давайте исследуем общую модель VNC-сессии (Рисунок 2-2). На нашей диаграме простейшей VNC-сессии видим компьютер с запущенным на нем VNC-клиентом (хост salt.kitchen.org) и компьютер с VNC-сервером (pepper.kitchen.org). Оба компьютера компьютеры с Windows 98. Итак, на компьютере Pepper запущен VNC-сервер. VNC-серверы имеют "имена", сходные (однако не идентичные) именам серверов X-windows.

Рисунок 2-2. Блок-схема VNC-окружения.
Имя VNC-сервера следует такой форме:
address:desktop
где "address" -- это имя хоста, на котором запущен VNC-сервер, а "desktop" -- это число, определяющее с какой сессие VNC-сервера, на этом компьютере установить соединение. VNC-сервер прослушивает соединение на порту 5900 плюс номер desktop. Другими словами, чтобы соединиться с desktop 2, VNC-клиент должен установить tcp-соединение на порту 5902.
Данные, передающиеся от серверной части, опускаются вниз по уровням, изображенным слева, пепедаются по Internet в правую часть диаграммы, где они поднимаются по уровням. Данные, передающиеся от клиентской части, опускаются вниз по уровням правой части диаграммы, потом следуют по сети, и затем поднимаются по уровням левой части. Весь этот процесс невидим для пользователя. Пользователь на клиентской cтороне видит окно, на компьютере "salt", которое выглядит точно так же как desktop, отображаемый на компьютере "pepper".
Итак, как мы видим, VNC полностью отличается от X. Однако все в порядке. Просто у этих двух приложений разные цели. Когда у вас есть в наличии хорошие X-сервер и X-приложения, то X -- это все, что вам надо. Однако, мы держим в голове и то, что если у нас Windows 98, и недостаточный бюджет на программное обеспечение, то наверняка у нас нет приличного X-сервера. А что делать тем несчастным, которые работают в среде OS/2? Что же им то бедным делать? Спокойно, сейчас все будет. Имейте терпение.
VNC, конечно же, доступен и для всех версий Microsoft Windows. И, к счастью, также доступен для Linux. Общая модель VNC-сессии подходит и для большинства того, когда вы используете VNC на платформе Windows. В случае платформы Linux, ситуация более интересная.
Программа, которая реализует VNC-сервер для Linux называется Xvnc. Это несколько более сложная штука, с, буквально, несколькими сотнями возможных конфигураций. Практически всегда, он запускается с помощью shell-скрипта, называемого "vncserver", который считывает конфигурационный файл и конфигурирует экземпляр Xvnc такими установками, которые подходят для большинства пользователей (Рисунок 2-3).

Рисунок 2-3. Блок-схема окружения Xvnc.
VNC на Linux несколько более другой: Xvnc не просто VNC-сервер, -- он также X-сервер. Совершенно верно. Когда вы запускаете VNC-сервер на Linux, то на самом деле получаете запущенный вполне функциональный X-сервер. Этот X-сервер обеспечивает полный самостоятельный X-desktop. И он имеет уникальную спецификацию X-display.
Как это работает? Большинство Linux-компьютеров уже имеют запущенный X-сервер и графическую консоль по умолчанию. И чтоб все работало замечательно, каждый VNC-сервер конфигурирует себя так, чтобы получить отдельный display-номер. Спецификация вашей стандартной консоли X-сервера, скорее всего выглядит так:
flour.kitchen.org:0.0
Спецификация для Вашего первого VNC-сервера будет такой:
flour.kitchen.org:1.0
Если вы укажете приложению на первый вариант, то оно отобразится на консоли. Если же вы укажете на последний вариант, то оно отобразится на VNC-консоли. Правда замечательно?
Погодите, сейчас будет еще круче! Ваш стандартный X-desktop может выглядеть примерно так, как показано на Рисунке 2-4. Тот же самый X-desktop с VNC-клиентом, может выглядеть так, как показано на Рисунке 2-5. Как видите клиент, изображающий VNC-desktop, работает в совершенно другом desktop-окружении.

Рисунок 2-4. Изображение X-desktop, -- это KDE-desktop, однако может быть что угодно.

Рисунок 2-5. Изображение показывает тот же самый X-desktop как и на Рисунке 2-4, но на этот раз с запущенным VNC-клиентом, отображающим GNOME-desktop.
Более того, ыы можете подсоединиться к VNC-серверу из абсолютно отличной OS (смотри Рисунок 2-6). Рисунок 2-7 показывает Windows 98, с запущенным Windows VNC-клиентом, который подсоединен к компьютеру с Linux. Поэтому если у вас нет в наличии приличного X-сервера для Windows, то как видите, все же можно иметь полный доступ к X, посредством VNC-клиента.

Рисунок 2-6. Тот же самый desktop, как и на Рисунке 2-4, но с VNC-клиентом, подсоединенным к Windows-компьютеру.

Рисунок 2-7. Windows 98 с запущенным VNC-клиентом, присоединенным к Linux-компьютеру.
А что насчет OS/2 или еще какой-нибудь другой сиротинушки? Ну... случилось так, что имеется экспериментальный VNC-клиент для OS/2 Presentation Manager, однако имеется и другое, даже более лучшее решение. Xvnc обеспечивает не только прослушивание X-сервером на X-порт плюс 1 (который, для тех, кто еще не знает, на самом деле TCP порт 6001), но и прослушивание на VNC-порту 5901, и более того, также организуется HTTP-сервер, прослушивающий TCP порт 5801. HTTP-сервер? Это что... Web-cервер? Совершенно верно, Web-сервер. Однако, это не для того, чтобы обслуживать запросы на получение HTML-файлов и прочего. Это реализовано для того, чтобы обслуживать единственную страницу, содержащую Java-апплет. Этот Java-апплет является полнофункциональным VNC-клиентом!
Вот так вот. Если имеющаяся у вас платформа имеет Web-броузер, поддерживающий Java, то вы можете подсоединиться к Linux VNC-серверу. Вот насколько все просто. Взглянем на рисунок 2-8. Конечно же я приверженец X-ов, однако я должен отдать должное VNC, предоставляющему определенный уровень платформонезависимости, такую функциональность, от которой я уже не могу отказаться.

Рисунок 2-8. VNC-сессия в OS/2.
Однако VNC не лишен ограничений и недостатков. Он не может пересылать звуки (кстати, X тоже не обладает такой функциональностью). Он жутко незащищенный, так как защищается простым незашифрованным паролем (однако мы рассмотрим использование SSH, чтобы исправить эту ситуацию и кстати многие другие протоколы, информацию об этом смотрите в этой же книге, но позже). Он зачастую использует низкую глубину цвета, чтобы увеличить производительность протокола, что приводит к ограничению на испльзование этого протокола для удаленной работы с мультимедией. Экран "отрисовывается" сверху-вниз и слева-направо настолько быстро, насколько позволяет коммуникационное оборудование. Такой эффект отрисовки делает VNC бесполезным для использования с анимационными приложениями. И все же, даже несмотря на эти ограничения, он позволяет мне испльзовать Linux-платформу на всю катушку.
И еще одно, -- существует VNC-клиент для Palm-органайзера! Итак: пользуйтесь чем угодно... Windows, X... прямо с Вашего Palm-а. Сильно! Однако об этом речь пойдет быть может в другой раз.
Настало время поговорить о использовании vncserver, двух VNC-клиентов для Linux, подсоединении к VNC-серверу с использованием броузера.
Чтобы запустить X VNC-сервер, вам необходимо просто набрать:
$ vncserver
Если вы еще ни разу не запускали vncserver-сессию, то на экране увидите примено следующее:
$ vncserver You will require a password to access your desktops. Password: Verify: New 'X' desktop is roux.kitchen.org:1 Starting applications specified in /etc/X11/Xsession Log file is /home/mschwarz/.vnc/roux.kitchen.org:1.log $
Вам потребуется набрать, а потом повторить пароль. Если они не совмпадут, то вам потребуется перезапустить vncserver. Этот пароль в дальнейшем будет использоваться постоянно для этого пользователя. Домашний каталог этого пользователя будет содержать каталог .vnc. Этот каталог содержит управляющие и журнальные файлы VNC. Исследуйте эти файлы в свободное время.
Если вы желаете изменить VNC-пароль, то используйте комманду vncpasswd.
Сессия vncserver-а продолжает работать до тех пор, пока компьютер не перезагрузится, либо пока вы не остановите ее. Вот как можно остановить VNC-сессию на Linux:
$ vncserver -kill :1 Killing Xvnc process ID 13824 $
Когда вы запустите vncserver, то получите первый доступный desktop-номер. Как правило это :1 (так как :0 наверняка занят настоящей системной X-серверной консолью). Если потребуется запустить vncserver на определенном desktop-номере, сделайте следующее:
$ vncserver :8 New 'X' desktop is roux.kitchen.org:8 Starting applications specified in /etc/X11/Xsession Log file is /home/mschwarz/.vnc/roux.kitchen.org:8.log $
В вашем распоряжении довольно много опций и вариантов, которым можно конфигурировать VNC. То, в каком месте находятся эти опции, зависит от того как вы установили VNC. В Debian-е эти настройки находятся в подкаталоге /etc. И это удобно, так как настройки всей системы хранятся в одном месте.
В случае RedHat (и других RPM-подобных дистрибутивов), по умолчанию ставится в /usr/bin/vncserver, -- это Perl-скрипт, который запускает VNC X-сервер (который называется Xvnc). Вот именно этот скрипт вы и должны изменять.
Одно из соглашений, которое часто используется, однако не является необходимым, это установка размера отображаемой области VNC X-сервера в "меньший размер" чем размер desktop-а клиента. Этого соглашения придерживались все рисунки, приведенные в этой главе. Если у Вас стоит разрешение 800x600, то сделайте установки вашего VNC-сервера на 640x480. Если же у вас 1024x768, то сделайте установки VNC-сервера на 800x600 и т.д. Это даст увереность в том, что весь серверный desktop будет виден на вашем клиентском экране, и не прийдется использовать прокрутку, чтобы перемещаться по desktop-у сервера. С прокруткой тоже можно работать, однако это отвлекает и раздражает.
Только Mandrake и Debian поставляют VNC на дистрибутивном диске, однако доступен и исходный код, и RPM-пакеты.
Чтобы использовать VNC-сервер, потребуется запустить VNC-клиент.
Имеется три VNC-клиента для Linux. Некоторые пакеты включают только два из них. Этими тремя клиентами являются:
Когда вы решите использовать X vncviewer, то можете запустить его так, как показано на Рисунке 2-9. Когда vncviewer (или xvncviewer) запущен, то desktop выглядит так, как показано на Рисунке 2-5.

Рисунок 2-9. xviewer xterm.
Клиент svncviewer работает точно таким же образом, исключая только то, что он будет работать только в текстовом режиме консоли Linux-компьютера. Этот клиент использует библиотеку SVGA (поставляемую, насколько я знаю, с каждым Linux-дистрибутивом, включая очень старые) для того, чтобы отображать графический desktop VNC на консоли. Единственной причиной для того, чтобы загрузить и собрать SVGA-клиент является то, что требуется использовать VNC-клиент на Linux-компьютере, который не имеет X-сервера.
Запуск svncviewer проходит точно таким же способом как и в случае vncviewer/xvncviewer, однако когда он запустится, то не откроет окно на desktop, вместо этого он займет весь экран под VNC-desktop. Может быть вы найдете эту возможность полезной для старых компьютеров (класса 386/486) с ограниченной памятью (16М и менее), на которых запуск X-сервера будет большой обузой.
И наконец рассмотрим Java-клиента. Предположим, что вы запустли Xvnc-сервер на Linux-компьютере soda.kitchen.org. Предположим, что это desktop :2. Тогда для того, чтобы использовать Java-клиент, просто укажите вашему броузеру на следующий URL:
http://soda.kitchen.org:5802/
и получите экран аутентификации, представленный на Рисунке 2-10.

Рисунок 2-10. Броузер с экраном аутентификации VNC.
Когда вы пройдете аутентификацию, то получите окно броузера с отрисованным внутри VNC-клиентом, который выглядит точно так же, как на Рисунке 2-7. Вот именно так я и использовал полнофункциональный X-desktop на моем OS/2-компьютере!
<< Основы X-ов | Multi Tool Linux | '''Глава 3. Выпускаем наружу целую сеть под одним IP-адресом''' >>