Запуск удалённых приложений, часть 1






Одним из преимуществ систем на базе GNU/Linux является отделение графической подсистемы от операционной системы. В основе Linux-десктопов лежит X Window System — программная архитектура, предоставляющая иерархическую структуру компонент, обеспечивающих графический ввод-вывод. Каждый компонент реализует определённый набор возможностей. В перечень этих возможностей входит смена оконных менеджеров, управление оборудованием, представление окружения рабочего стола и даже удалённый запуск отдельных или всех приложений.


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

В этой статье я рассмотрю различные способы удалённого запуска приложений в Linux таким образом, чтобы отображение их окон выполнялось в локальной системе. Я рассмотрю базовые моменты конфигурирования, преимущества и недостатки, их влияние на безопасность системы, а также причины для использования того или иного способа. Всё программное обеспечение, рассмотренное в рамках данной статьи, должно быть доступно  в большинстве дистрибутивов Linux, хотя названия пакетов могут и различаться. Примеры, приводимые в этой статье, в целом относятся к GNOME, запущенном под Fedora, хотя всё описанное здесь не должно вызвать какие-либо трудности у пользователей KDE и других дистрибутивов. Эта статья не адресована пользователям Mac и Windows, хотя раздел о VNC может оказаться полезным и для них.

Архитектура графической системы ввода-вывода в GNU/Linux

Очень обобщённо графическую систему ввод-вывода в GNU/Linux можно разделить на три части. На самом нижнем уровне находится ядро Linux и графический сервер X.Org и его библиотеки, обычно называемые вместе как X11. Графический сервер совместно с ядром Linux управляют графическим оборудованием, а библиотеки предоставляют программному обеспечению верхнего уровня возможность работать с ним.

Окружение рабочего стола (KDE, GNOME, XFCE) находится посередине. Работу окружения рабочего стола обеспечивают библиотеки, такие как Qt и GTK, которые также используют множество отдельных приложений.

Приложения находятся выше уровня окружения рабочего стола. Собственно, приложения — это и есть то, с чем фактически работает пользователь: смотрит фильмы, слушает музыку, общается с друзьями, бродит в Интернет и тому подобное.

Удалённое отображение окон приложений обеспечивается возможностями, реализованными на уровнях Infrastructure и Desktop. Приложения, которые запускаются в окружении X11 могут отображать свои окна удалённо, переложив подробности реализации этого механизма на плечи нижележащих частей стека.

Существует три метода, при помощи которых пользователи могут удалённо запускать приложения, отображая при этом их окна локально, то есть на том экране, перед которым они непосредственно находятся.

Первый метод задействует X Display Manager Control Protocol (XDMCP). Этот протокол является частью спецификации X11 и в Linux реализован в GNOME Desktop Manager (GDM) или, в случае использования KDE, KDE Display Manager (KDM). Оба этих менеджера являются заменой стандартному X Display Manager (XDM). Использование этого метода ориентировано на запуск отдельных приложений, хотя существуют приложения, представляющие рабочий стол целиком.

Второй метод основан на туннелировании X11 через SSH. Он также ориентирован на запуск отдельных приложений, однако, как правило легче в настройке и использовании.

Последний метод основан на Virtual Network Computing (VNC), является платформо-независимым и отлично подходит для представления рабочего стола целиком.

Использование XDMCP через GDM

В терминах X11 «сервером» называется то, что обслуживает графическое оборудование, а клиентом — приложение, использующее сервер для того, чтобы осуществлять графический ввод-вывод. Такая терминология часто запутывает пользователей, поскольку прямо противоположна традиционному пониманию термина «клиент-сервер». Иными словами, сервер — это тот компьютер, за которым вы находитесь непосредственно, а клиент — это удалённый компьютер, на котором запущено приложение.

Большинство графических приложений под Linux принимают опцию командной строки -display. Использование этой опции эквивалентно установке переменной окружения DISPLAY и сообщает приложениям-клиентам какой X-сервер использовать для осуществления графического ввода-вывода. По умолчанию используется экран локального сервера, обозначаемый как :0.0. Удалённый сервер может быть задан при помощи добавления имени хоста или его IP-адреса, например: galileo:0.0. Естественно, что на указанном хосте должен быть запущен как минимум один X-сервер.

Использование опции -display связано с конфигурацией XDMCP на X-сервере. XDMCP — это старый метод отображения удалённых приложений на экране локального компьютера.

В GNOME XDMCP управляется при помощи GDM. Пользователи GNOME знакомы с GDM со стороны его графической части — экрана входа в систему. Этот экран, на самом деле, лишь часть GDM и к нашему обсуждению отношения не имеет. GDM также контролирует использование X-сессий, иначе известных как графические логины. Графический логин запускает новый X-сервер с набором опций. По умолчанию GDM не разрешает подключения от удалённых клиентов. Чтобы включить такую возможность, вам необходимо отредактировать файл /etc/gdm/custom.conf, чтобы он выглядел примерно так:

Раздел [xdmcp] имеет одну опцию — Enable. Если её установить равной true, то удалённые подключения через XDMCP будут разрешены. Кроме того, GDM необходимо сообщить о том, чтобы были разрешены входящие TCP-подключения для того, чтобы удалённые клиенты могли устанавливать сетевые соединения к X-серверу. Для этого в разделе [security] необходимо установить значение опции DisallowTCP равным false, чтобы отключить блокировку входящих TCP-соединений. Заметьте, что XDMCP является протоколом верхнего уровня, в то время как TCP — нижнего, реализующего сетевой транспорт.

После того, как конфигурационный файл GDM будет изменён, необходимо перезапустить сам GDM. Это можно сделать, последовательно сменив уровень запуска системы с 5-го на 3-й, а затем обратно на 5-й.

Обратите внимание, что после того, как вы переключитесь на 3-й уровень запуска, X-сервер будет выгружен, и команду для перехода 5-й уровень вам придётся давать уже из виртуальной консоли в текстовом режиме.

Теперь X-сервер готов к приёму входящих подключений от удалённых X-клиентов. Дополнительным шагом в конфигурации может быть определение хостов, с которых разрешены подключения. Есть два способа сделать это. Первый — это отредактировать файлы /etc/hosts.allow и/или /etc/hosts.deny. Более простой способ — это использовать команду xhosts после входа в систему:

Первая команда разрешает определённому хосту использование локального X-сервера, а вторая — запрещает. Третья команда разрешает использование сервера любым хостом и может быть использована лишь в сетях, где вы полностью доверяете окружающим вас хостам, например, в домашней сети или если сеть надёжно защищена брэндмауэром. Изменения, вносимые в систему командой xhosts применимы только для текущей X-сессии.

Теперь вы можете открыть терминал, подключиться к удалённой системе при помощи SSH и запустить что-нибудь, указав при помощи опции -display ваш локальный сервер:

Xterm запустится на удалённой системе, а его окно вы увидите на экране локальной системы (той, перед монитором который вы находитесь). Таким же образом вы можете запускать все остальные графические приложения на удалённой системе, получая их окна на локальной. Таким образом, на вашем локальном рабочем столе вы можете получить смесь из локальных и удалённых приложений.

GDM поставляется вместе с GNOME. Если вы используете KDE, то для реализации описанного метода вам лучше использовать KDM. В этой статье, к сожалению, его настройка не освещена.

По мотивам LinuxJournal.Com




Запуск удалённых приложений, часть 1: 2 комментария

Комментарии запрещены.