Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

[Photo of the Author]
автор Guido Socher (homepage)

Об авторе:

Guido любит Линукс не только из-за того, что ему интересно разбираться в том, как работают операционные системы, но так же из-за людей, которые участвуют в его создании



Перевод на Русский:
Вася Леушин <basileus(at)newmail.ru>

Содержание:

 

Запуск удаленных приложений в Х11

[Illustration]

Резюме:

Многие пользователи при знакомстве с Линуксом думают, что его графический рабочий стол это просто еще одна " Windows" в которой можно запускать приложения в отдельных окнах. Некоторые, конечно, замечают, что можно иметь несколько рабочих столов, но все равно им кажется, что это Windows. X Window System (X11) это что-то гораздо большее! Это сетевая оконная система. Мы увидим, какие новые возможности она нам предлагает.



 

Общее понятие дисплея

Каждое графическое приложение X Window при запуске считывает переменную окружения DISPLAY, что бы выяснить на какой компьютерный экран посылать графические данные. Это, вместе с сетевыми возможностями системы X Window делает возможным удаленный запуск графических приложений. То есть вы используете ресурсы процессора одной машины при работе с приложением на другой. Весь GUI (графический интерфейс пользователя) появляется на той машине, с которой вы им управляете. Вы даже не замечаете, что используете два компьютера. Конечно, определенную роль здесь играет скорость передачи данных, но нормальной 10-мегабитной локальной сети вполне достаточно.


[run in an application remote]

Для чего это вам?
Существует множество сетевых графических приложений. Компании используют их для управления оборудованием находящимся может быть за тысячи километров, и вы можете использовать такие же приложения так, как если бы они были на вашем компьютере.
Допустим, у вас есть два компьютера: одна быстрая гигагерцевая машина и еще старенький Pentium-133 - вы вполне сможете оценить скорость вашей новой машины, даже не садясь за нее. Возможно, ваша сестра заняла быстрый компьютер - но вы все равно пользуете его.
[display] Как это работает?
Все приложения X Window (такие как например Gimp, Xterm, Konquerer, Netscape и т. д.) в действительности являются сетевыми клиентами, которые присоединяются к X-серверу. В задачу X-сервера входят: взаимодействие с графическим аппаратным обеспечением, рисование картинок на вашем экране, считывание данных с мышки и клавиатуры. Программы-клиенты (gimp, netscape) посылают серверу указания о том, как рисовать рамки и кнопки. Взамен они принимают от сервера команды с мышки и клавиатуры. Само собой разумеется, что потребуется аутентификация, иначе кто угодно может испортить чей-нибудь экран. Существуют две программы для управления доступом:
- xhost: используя эту программу, вы можете допустить любого пользователя с определенной машины передавать графику на ваш дисплей. Например: Вы работаете на машине с именем philosophus. Что бы дать доступ на ваш дисплей любой программе с хоста movietux вам нужно набрать команду:

xhost +movietux
Это должно быть набрано в оболочке philosophus'а


- xauth: Это более сложная программа, основанная на cookie. С ее помощью вы можете предоставлять доступ определенным пользователям, тем самым эта программа обладает более высоким уровнем безопасности, чем xhost. Аутентификация использует cookie из файла .Xauthority в домашней директории пользователя. Доступ дается только если удаленная машина содержит нужный cookie в этом файле. Что бы скопировать этот cookie с вашей машины (philosophus) на хост с которого вы хотите запускать программу (movietux), вы можете использовать один из следующих методов:

xauth extract - philosophus:0.0 | ssh movietux /usr/X11R6/bin/xauth merge
или
scp ~/.Xauthority movietux:


При запуске программы-клиента происходит следующее:
  1. Клиент проверяет переменную DISPLAY для поиска сервера или пытается подключиться к серверу на локальном хосте.
  2. Сервер проверяет, имеет ли клиент допуск к передаче "картинок" к нему. Если имеет - тогда сервер рисует графику.
Переменная окружения DISPLAY имеет следующий синтаксис:

bash:export DISPLAY=hostname:displaynumber.screennumber
tcsh:setenv DISPLAY hostname:displaynumber.screennumber

Я не буду говорить о displaynumber и screennumber, обычно это 0.0. Вот пример для bash:

export DISPLAY=philosophus:0.0

 

Запуск удаленного приложения

А теперь от теории перейдем к практике и проверим, как это все работает. Вы снова сидите за компьютером philosophus и хотите запустить что-нибудь с movietux
  1. Сообщите вашему X-серверу, что клиенты с movietux имеют допуск к рисованию картинок на вашем экране:
    xhost +movietux
  2. Заходите на удаленный хост movietux:
    slogin -l username movietux
  3. Теперь вы вошли на movietux, и все ваши команды исполняются на нем
  4. export DISPLAY=philosophus:0.0
  5. Запускайте программу напр.
    netscape &
если movietux - мощная машина, вы заметите, что рендеринг html-страниц в netscape проходит гораздо быстрее, чем, если бы вы запустили его локально на вашей машине. В тоже самое время вы даже не замечаете, что netscape работает не локально, потому что вы действуете мышкой и клавиатурой как обычно.
Круто, не так ли?  

Перенос дисплея на удаленный хост

Хотя запускать приложения удаленно это так просто, все же бывает нужно набрать еще кое-какие команды для установки DISPLAY (все это можно автоматизировать).
  • Если вы используете ssh для входа на удаленный хост, тогда переменная DISPLAY устанавливается автоматически. Существуют так же и другие программы поддерживающие DISPLAY, но ssh наиболее распространенная.
  • Если же вы используете slogin или другие команды, тогда на удаленный хост вы можете установить следующие скрипты:
    Для tcsh:

    # перенос дисплея на удаленный логин:
    # поместить его в свой файл ~/.login
    set whoami=`who -ml`
    set remhost=`expr "$whoami" : '.*(\(.*\))'`
    if ( "$remhost" != "" ) then
    setenv DISPLAY "$remhost":0.0
    endif

    этот скрипт получает имя удаленного хоста из команды "who -ml". Команда возвращает что-то вроде

    >who -ml
    movietux!guido pts/3 Oct 26 21:55 (philosophus.tux.org)

    если вы используете bash вам нужен такой скрипт:

    # перенос дисплея на удаленный логин:
    # поместить его в свой файл ~/.bash_profile
    whoami=`who -ml`
    remhost=`expr "$whoami" : '.*(\(.*\))'`
    if [ -n "$remhost" ]; then
    DISPLAY="$remhost":0.0
    export DISPLAY
    fi

     

    OpenGL

    В то время как сетевые возможности X Window System очень хороши, графика работает несколько медленнее из-за того, что вы пересылаете данные через сетевой протокол. Обычно вы не замечаете разницы, но существуют приложения, такие как быстрые игры с насыщенной графикой, для которых скорость очень важна. Эти игры обычно основаны на библиотеках типа OpenGL. Эти библиотеки предоставляют непосредственный доступ к графическому аппаратному обеспечению. Никаких сетей. Это быстрые программы, но вы не сможете запускать их удаленно.  

    Заключение

    С X11 использовать мощность вашей сети очень легко. Вы можете работать с удаленными приложениями так же как с локальными. Единственная разница в том, что вы видите те файлы и домашнюю директорию, которые находятся на удаленном хосте. Однако с установленными NFS и NIS вы сможете скрыть и это небольшое отличие. Вы сможете использовать всю мощность процессора самых быстрых машин в ваших сети, и ни о чем не беспокоиться.  

    Ссылки

    X11 system, x.org
    xfree86.org система X11 используемая с Linux