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

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

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

Фотография автора

Автор: Антон Черноусов
Опубликовано: 4 месяца, 1 неделя (последние правки: 0 минут назад) - 2 комментария
Категории записи: Linux, Terminal Server, Ubuntu, Популярное, Рабочие станции, Системное администрирование


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

Выше вы прочитали небольшое лирическое отступление на тему: почему все так плохо, а сейчас мы рассмотрим удаленный запуск графических приложений в 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

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

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

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

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

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

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

Сборка 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.

Пожалуйста, оцените мою статью (всего оценок 4, средняя оценка 5.00):

Комментарии к статье:

Александр Кушниренко 2 месяца, 3 недели назад

Антон!
Спасибо за статью!

Мы хотим сделать тонкие клиенты на базе android TV приставок или RPi3.
1. RPi3 работает достаточно прилично, но одно ядро полностью нажирается.
2. Есть ли x2go client для андроид?
3. Имеет ли смотреть в сторону xRDP решений в сравнении с x2go с точки зрения производительности.

С уважением,
Александр Кушниренко

Ссылка | Ответ

Антон Черноусов 2 месяца, 3 недели назад

Есть проект freerdp и у него есть отдельная андройд-версия и я ее даже пробовал использовать, это раз. x2go под андройд нет и видимо не будет, это два. В третьих это конечно мое мнение, но я бы рекомендовал вам строить тонкие клиенты на RPi3 или похожих решения, но без Android, а с использованием xfreerdp под Linux и на приставку ставить именно минимальный линукс.

Ссылка | Ответ

Оставьте комментарий:

обязательно

обязательно (не публикуется)

необязательно

обязательно

обязательно

Последние записи

Архив

2018

Категории

Ленты

RSS / Atom