Мини-HOWTO: LBX

Paul D. Smith

Перевод: Станислав Рогин, ASPLinux

Аннотация

LBX (Low Bandwidth X) - это расширение X-сервера, которое компрессирует X-протокол. Он используется вместе с X-приложениями и X-сервером, разделенными медленным сетевым соединением, для того, чтобы увеличить скорость работы.


Содержание
Введение
Где работает LBX?
Кто может выиграть от использования LBX?
Кому LBX не нужен?
Как работает LBX?
Что мне нужно для LBX?
Что мне НЕ нужно для LBX?
Как запустить LBX?
Проблемы
Документация
Альтернативы
Авторские права

Введение

Low-Bandwidth X X (LBX) существует для тех, кто работает с X-приложениями на машинах, находящихся далеко от сервера.

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

LBX вообще - это схема компрессирования и кэширования, предназначенная для уменьшения X-трафика между двумя системами.


Где работает LBX?

Согласно документации X-Консорциума X11 релиз X11R6.3 (декабрь 1996), LBX является полным зарегистрированным расширением X-протокола. Что же касается XFree86 - это означает, что вам нужна XFree86 версии 3.3.


Кто может выиграть от использования LBX?

LBX ускорит работу соединения, если вы используете модем для работы с провайдером, и через него запускаете Х-приложения на удаленных машинах, на которых переменная DISPLAY указывает на вашу машину (или наоборот), LBX также поможет, если вы работаете очень далеко от этих машин (например, в разных странах) или на других медленных соединениях.


Кому LBX не нужен?

LBX конечно бесполезен, если вы запускаете Х на одной машине, или вообще не используете Х.

LBX также мало поможет, если вы работаете в быстрой локальной сети. Некоторые говорят: "если LBX уменьшает сетевой трафик, не будет ли целесообразным использовать его и в быстрых сетях?" Возможно, если ваша цель - уменьшить трафик в сети. Но если вам необходимо ускорение работы, то, в этом случае, LBX вам вряд ли поможет. LBX включает в себя кэширование и компрессирование, для этого расходуются ресурсы на обоих концах сети (дополнительная память на кэш, дополнительное время процессора на декомпрессирование). Применение LBX на быстром соединении может привести к общему замедлению.


Как работает LBX?

LBX работает как прокси-сервер на клиентской стороне, выполняющий кэширование и компрессирование. X-сервер знает, что клиент использует прокси-сервер, и также занимается компрессией.

Ниже приведена обычная настройка для удаленных Х-клиентов. В этом тексте мы будем придерживаться следующих терминов: ЛОКАЛЬНАЯ рабочая станция - это та, непосредственно на которой вы работаете, а УДАЛЕННАЯ - это та машина, на которой работает приложение.

УДАЛЕННАЯ                                  ЛОКАЛЬНАЯ
 +-----+                                             +-----+
 |Прил.|-\           Сеть              +----------+  |     |\
 +-----+  \--------------------------->| X Сервер |=>|     ||
 +-----+  /       (X-протокол)         +----------+  +-----+\
 |Прил.|-/                                          /_____//
 +-----+

Для использования LBX на удаленной машине используется прокси-сервер (lbxproxy), и приложения общаются с этим процессом, вместо прямой передачи данных на ЛОКАЛЬНУЮ машину. Этот процесс затем производит кэширование и компрессирование X-запросов, и направляет их серверу. Выглядит это примерно так:

УДАЛЕННАЯ                                          ЛОКАЛЬНАЯ
                                                               +-----+
 +-----+  +-------+              Сеть            +----------+  |     |\
 |Прил.|->|Прокси.|----------------------------->| X Сервер |=>|     ||
 +-----+  +-------+       (LBX/X-протокол)       +----------+  +-----+\
 +-----+   /                                                  /_____//
 |Прил.|--/
 +-----+

Описание конкретных протоколов и деталей кэширования и компрессирования LBX не входят в этот документ.


Что мне нужно для LBX?

На ЛОКАЛЬНОЙ машине вам понадобится X-сервер со встроенной поддержкой LBX. В серверах X11R6.3 автоматически разрешен LBX, если только его специально не отключили при сборке. Во всех серверах XFree86 3.3 LBX также по умолчанию разрешен.

Вы можете узнать, встроен ли в ваш сервер LBX, при помощи команды xdpyinfo: запустите xdpyinfo и взгляните на список прямо под надписью "number of extensions" (количество расширений); вы должны увидеть "LBX" в этом списке.

На УДАЛЕННОЙ машине вам понадобится программа lbxproxy. Это достаточно хитрая часть настройки - если удаленная машина использует систему, отличную от вашей, то ваш lbxproxy ей особенно не поможет.

К сожалению, пока не существует "выковырянной" версии исходных текстов lbxproxy, поэтому придется либо (а) найти и собрать почти полностью, если не полностью X11R6.3 для удаленной системы, или (б) найти где-нибудь собранную версию lbxproxy для вашей удаленной системы. Второй вариант, естественно, значительно проще.

lbxproxy - это простая одиночная программа. Никаких конфигурационных файлов, файлов ресурсов и т.п. к ней не прилагается.


Что мне НЕ нужно для LBX?

На УДАЛЕННОЙ системе не требуется нового X-сервера (УДАЛЕННОЙ системе вообще не требуется никакого X-сервера).

Приложение, которое вы хотите запустить, не должно быть обязательно предназначено для вашей версии X, или для каких-то библиотек; Я без особых трудностей использую коммерческие программы для X11R5 поверх LBX.

Вам не обязательно быть root-ом или другим привилегированным пользователем на УДАЛЕННОЙ системе; lbxproxy запускается под любыми разрешениями. Более того, вы можете запускать его прямо из вашего каталога: его не надо никуда устанавливать.


Как запустить LBX?

Теперь перейдем к самому главному. Замените в нижеприведенных примерах слова ЛОКАЛЬНЫЙ и УДАЛЕННЫЙ на имена соответствующих хостов (не перепутайте!)

На ЛОКАЛЬНОЙ машине:

  1. Запустите X-сервер.

  2. Разрешите на своей системе доступ к X-серверу извне. Используйте метод "список машин", наберите команду xhost +REMOTE. Если вы используете xauth, то вам, по-видимому, придется сделать немного больше; смотрите xauth(1) для дополнительной информации. Также вы можете прочитать Мини-HOWTO: Удаленные приложения в X, если вы не знакомы с настройкой разрешений удаленного доступа к X.

На УДАЛЕННОЙ машине:

  1. Запустите lbxproxy и укажите ему перенаправление на ЛОКАЛЬНЫЙ X-сервер, например:
      $ lbxproxy -display LOCAL:0 :1
    Таким образом вы заставляете lbxproxy использовать display :1 на УДАЛЕННОЙ системе; если в системе уже больше 1 дисплея, то используйте :2, или то, что вам необходимо.

  2. Установите переменную окружения DISPLAY так, чтобы она указывала на дисплей, предоставляемый lbxproxy, вместо обычного:
      $ DISPLAY=:1
      $ export DISPLAY
    Или, если вы используете csh или нечто подобное:
      % setenv DISPLAY :1

  3. Если вы используете xauth, то вам надо убедиться, что ваш cookie доступен. Смотрите Мини-HOWTO: Удаленные приложения в X в поисках дополнительной информации.

  4. Запускайте свои X-приложения!

И все; все X-приложения, запущенные с указанием на дисплей :1 будут использовать LBX. Конечно, не существует никаких препятствий к одновременному запуску X-приложений, работающих с LOCAL:0 и :1.


Проблемы

Ниже приведены различные проблемы и методы их решения:

Вопрос

lbxproxy выходит с ошибкой "access denied" (отказано в доступе).

Ответ

Это означает, что ЛОКАЛЬНАЯ система не разрешает соединения с УДАЛЕННОЙ системы из-за ошибок, связанных с разрешениями. Еще раз внимательно прочтите Мини-HOWTO: Удаленные приложения в X.

Способ проверки - попробуйте запустить простое X-приложение типа xclock на УДАЛЕННОЙ системе с дисплеем на ЛОКАЛЬНОЙ без использования lbxproxy:

  $ xclock -display LOCAL:0

Если это не сработало, то проблема в xhost, или, вообще, с X, а не с LBX.


Документация

Единственная документация по этому вопросу в стандартной поставке X - это man lbxproxy(1).

Если у вас есть доступ к исходным текстам X, то информация по LBX доступна в следующих каталогах:

Более подробное объяснение специфических алгоритмов LBX можно найти в:

Если у вас нет исходных текстов X11, то этот файл можно найти на сайте X-консорциума.


Альтернативы

Если вам по какой-то причине не понравился lbxproxy: вас не устраивает быстродействие, он у вас не работает, или вам просто лень возиться с установкой lbxproxy на удаленном хосте, или просто интересно попробовать нечто иное, то существует, как минимум, еще один пакет для компрессирования X-протокола (у кого-нибудь есть, что-нибудь еще?)


dxpc - Дифференциальный компрессор X-протокола

dxpc работает почти также, как LBX. Однако, вместо включения дополнения в X и изменения кода X-сервера, dxpc использует два прокси: один работает на УДАЛЕННОМ хосте, а второй на ЛОКАЛЬНОМ.

Прокси на УДАЛЕННОМ хосте работает между X-клиентами и прокси ЛОКАЛЬНОГО хоста, а прокси на ЛОКАЛЬНОМ хосте работает между X-сервером и прокси УДАЛЕННОГО хоста.

Таким образом, и X-клиенты, и X-сервер видят друг друга, будто работают на обычном X-протоколе.


Плюсы

  • Его значительно проще собирать и устанавливать, т.к это полностью независимое приложение, не требующее никаких изменений внутри X.

  • Оно поддерживается отдельно, поэтому вам не придется ждать, пока OSF выпустит новую версию X с дополнениями или исправлениями.

  • В нем присутствует значительно более полная и понятная статистическая информации о компрессировании, в отличие от lbxproxy.


Минусы

  • Эта программа не является стандартной частью X - вам придется находить и устанавливать ее отдельно.

  • Эту систему немного сложнее настроить, так как в ней требуются 2 прокси: на ЛОКАЛЬНОЙ и УДАЛЕННОЙ машинах.


Где можно найти dxpc?

Исходные тексты dxpc можно найти на ftp.x.org.

Также существует домашняя страница dxpc, на которой есть много интересной информации, включая ссылки на список рассылки dxpc, доступ к исходным текстам и несколько уже готовых вариантов для различных платформ:

http://ccwf.cc.utexas.edu/~zvonler/dxpc/


Ssh (Secure Shell)

Ken Chase <lbxhowto@sizone.org> замечает, что для компрессирования можно использовать ssh. Несмотря на то, что основной его задачей является безопасность, он к тому же компрессирует передаваемые данные.

Таким образом, вы можете запустить X поверх ssh-соединения, получив сразу некоторое сжатие.


Что лучше?

Я не знаю. И LBX, и dxpc значительно лучше компрессируют, чем ssh. С другой стороны, у ssh все значительно лучше с безопасностью. И, конечно, ничто не мешает использовать и ssh и один из двух первых способов, получив, таким образом, неплохое сжатие и безопасность. Наверно не очень сложно запустить несколько тестов, проверив быстродействие этих трех вариантов, чтобы получить и субъективное, и статистическое измерения. Но я этого не делал и не знаю никого, кто бы это пробовал.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

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

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу