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

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

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 07 Мар 2018 (последние правки 1 месяц)

apt apt-get cv git install postgres ubuntu прокси сервер на базе 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.

Похожие статьи

Как сделать из Windows 10 (или Windows 7) терминальный сервер с поддержкой RemoteAPP

Как сделать из Windows 10 (или Windows 7) терминальный сервер с поддержкой RemoteAPP

Сразу скажу, что я не одобряю пиратство, а все о чем сейчас пойдет речь относится именно к нарушению лицензионного соглашения, но раз вы спрашивали, то я расскажу как сделать из Windows 7 и Windows 10 почти полноценный терминальный сервер с поддержкой RemoteAPP.


Графическое удаленное управление современными версиями Ubuntu Linux (Wayland)

Графическое удаленное управление современными версиями Ubuntu Linux (Wayland)

В современных дистрибутивах Ubuntu изменили старый добрый Xorg на новый модный Wayland и теперь все средства удаленного графического администрирования приказали долго жить, что стоит отметить крайне печально, так как новых не завезли. И это касается как x11vnc, так и разного рода TeamViewer и прочих проприетарных систем, ведь они все работали по одному и тому же принципу, а Wayland как я помню вообще не предполагал удаленного доступа к графической консоли.


Настройка Ubuntu Linux в качестве терминального сервера x2go

Настройка Ubuntu Linux в качестве терминального сервера x2go

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


Отзывы и комментарии