Полноценный терминальный сервер на базе Ubuntu Linux

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 1106]


    Я не понимаю почему, но факт остается фактом и вопросам создания терминального сервера для удаленного запуска графических приложений в Linux уделяется очень мало внимания.

    Могу предположить, что это скорее всего связано с отсутствием тяжеловесных приложений наподобие 1С которые требуется запускать локально на сервере с предоставлением удаленного доступа (хотя сейчас уже есть нативная Linux-реализация платформы 1С предприятие), но скорее всего причина более банальная, а именно, в Windows удаленный доступ к графической консоли используется для администрирования серверов и рабочих станций, а в Linux и Unix для этих же целей используется удаленный консольный доступ при помощи SSH.

    Terninal server transparent ICO

    Сейчас, в администрировании Windows, только набирает обороты использование PowerShell, да и честно говоря я видел не так много администраторов которые ознакомились с основами PowerShell, а полноценно использующих и разрабатывающих скрипты автоматизации вообще единицы.

    Power shell for windows administrator 

    Сейчас вы прослушали небольшое лирическое отступление на тему почему все так плохо, а сейчас мы рассмотрим удаленный запуск графических приложений в Linux и проверим реально ли вообще создать из Ubuntu Linux терминальный сервер.

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

    Проще всего это сделать добавив к команде подключения по ssh параметр -X:

    $ ssh -X chernousov@192.168.3.160

    Теперь вы можете запустить удаленное приложение и в качестве X-сервера для отрисовки графики будет использоваться ваш локальный X-сервер. Вот казалось бы на этом можно и закончить, но такая техника работала очень давно и последнее время Xorg получил возможности 3D и 2D ускорения и работа X-сервера теперь уже не сводится к банальному рисованию графических примитивов.

    Если у вас и получится запустить полноценное графическое приложение наподобие интернет-браузера с запущенным на нем YouTube , то для полноценной передачи данных для отрисовки графики вам понадобится как минимум гигабитный канал, да и обычное приложение наподобие OpenOffice Writer удивит вас требовательностью к сетевой подсистеме, так как текст теперь передается не в виде параметров отрисовки шрифта, а в виде растра.

    Нагрузка на сетевую подсистему при ssh -x

    Как вы видите из представленного ниже видео, бессмысленно даже пытаться запустить браузер в режиме ssh -X если у вас сетевая карта 100 Мбит, так как минимальная нагрузка на сетевую подсистему 120 мегабит (в холостом режиме).

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

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

    Если вы поинтересуетесь современной модификацией RDP протокола, а точнее надстройкой RemoteFX позволяющей передавать по сети потоковое видео, то наверное удивитесь тому, что имеется некоторое сходство с технологией рисования примитивов при помощи удаленного Xorg-сервера.

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

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

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

    Сайт проекта: http://wiki.x2go.org/doku.php

    GIT проекта: https://code.x2go.org/gitweb

    Сборка x2go клиента или сервера это большое приключение у меня например ушло около месяца что бы его собрать и запустить.

    В Ubuntu Linux имеется репозиторий содержащий уже собранные пакеты и вы можете просто выполнить несколько команд для установки клиента или сервера. Они не очень свежие и судя по активности в GIT проект довольно активно дорабатывается.

    Установка серверной части:

    # apt-add-repository ppa:x2go/stable
    # apt-get update
    # apt-get install x2goserver x2goserver-xsession

    Установка клиентской части:

    # apt-add-repository ppa:x2go/stable
    # apt-get update
    # apt-get install x2goclient

    После установки соответствующих пакетов вы сразу можете использоваться x2go клиентом и сервером.Серверная часть не требует каких либо настроек, так же нет и какого либо графического интерфейса управления подключенными клиентами, хотя есть возможность интегрировать серверную часть терминального сервера x2go и базу данных PostgreSQL, что в дальнейшем позволит сделать web-интерфейс для полноценного управления авторизованными пользователями.

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

    Создать новое подключение проблем не составляет, к вашим услугам удобное графическое приложение:

    И как я и обещал демонстрация нагрузки на сетевую подсистему при просмотре видео на YouTube аналогично первоначальному примеру.

    Как вы видите нагрузка на канал гораздо меньше, но имеются артефакты и рывки при прокрутке. Версия из GIT-репозитария ведет себя гораздо лучше, но так же не лишена ряда недостатков.

    В дальнейшем мы обязательно рассмотрим вопросы построения терминального сервера Linux подробнее, но на сегодня мы закончим и вернемся к этому вопросу когда будем работать над проектом по внедрению x2go.

     

     

     


    Обсуждение статьи

    Ваш комментарий: