Однажды мне потребовалось организовать удаленный доступ к графическому интерфейсу Ubuntu. При этом необходимо было найти решение on-premise, поскольку использовать его предполагалось в корпоративной сети, где доступ к чувствительной информации исключал облачные решения вроде TeamViewer. Кроме того, канал связи с удаленной машиной обладал низкой пропускной способностью.
Сначала я перебрал несколько вариантов знакомых мне решений:
VNC (Virtual Network Computing) — старый протокол, который основан на передаче массивов пикселей по протоколу RFB (Remote Framebuffer) для организации удаленного соединения. Он оказался слишком медленным и требовательным к пропускной способности каналов передачи данных. Особенно это критично для корпоративных сетей, подключенных через VPN, которые хостятся в другой части света;
RDP (Remote Desktop Protocol) — протокол, который позволяет отправлять более сложные графические примитивы и высокоуровневые команды. Обычно используется для организации служб удаленных рабочих столов в Windows, но серверы для Linux также доступны, например xRDP. К минусам можно отнести сложность настройки/конфигурации на стороне хоста.
Я продолжил поиски и открыл для себя еще один способ организации удаленного рабочего стола — протокол NX.
Что такое NX?
В Linux для работы с графическими интерфейсами (GUI) используется X-сервер. Обычно окружения рабочего стола вроде GNOME, KDE или LXDE запускаются поверх Х-сервера, что позволяет запускать другие программы.
Компания NoMachine решила оптимизировать подключение к X-серверу по сети. Так появился протокол NX, который значительно снизил нагрузку на сеть.
NX — это не просто протокол доставки картинки, а, по сути, терминальный сервер для Linux. Он позволяет в удаленной операционной системе авторизовать пользователя, организовать для него полноценный сеанс и запустить в нем графическое окружение. Тот же VNC так не умеет.
На протяжении нескольких лет NoMachine развивала протокол как одноименный коммерческий продукт — NoMachine — и как community-проект FreeNX. Выпуская четвертую версию продукта, NoMachine решила больше не развивать FreeNX. Но сообщество осталось, и от основного репозитория отделилось много форков. Многие были уверены, что лучше знают, как надо. И некоторые из них оказались правы. Так, кроме FreeNX появились X2Go, QVD, RX, Neatx (от Google). Все эти протоколы друг с другом несовместимы, а некоторые уже “умерли”. Я выбрал X2Go.
Преимущества X2Go
Главные преимущества open-source реализации протокола NX X2Go перед аналогами — это:
Высокая скорость в условиях низкой пропускной способности канала передачи данных;
Простота настройки на стороне хоста. Т.к. X2Go работает через SSH, то все, что нужно сделать, — это убедиться, что SSH работает и порт 22 открыт в настройках файервола;
Безопасность — протокол работает поверх SSH (пользователю доступны безопасные механизмы аутентификации, в том числе с ключами). Нет необходимости открывать дополнительный порт в настройках файервола.
Кроме того, X2Go позволяет запускать отдельное приложение на удаленном компьютере, например среду разработки; дает возможность подключаться к запущенной сессии пользователя; имеет свой брокер соединений (полезно для автоматизации рабочих мест).
Также доступны трансляция клиенту звука и видео с сервера, печать на локальном принтере и общие каталоги.
Как установить X2Go
Установка сервера на примере Ubuntu
Стабильные версии сервера и клиента X2Go можно установить из штатных репозиториев актуальных релизов Ubuntu. Необходимо инсталлировать два пакета:
sudo apt-get install x2goserver x2goserver-xsession
Проверяем, что сервер запущен:
sudo systemctl status x2goserver
Если вы используете не Xfce, возможно, потребуется установить дополнительные пакеты для графических оболочек. Например, при использовании Lubuntu подключаем поддержку LFCE:
sudo apt-get install x2golxdebindings
Также может потребоваться создать нового пользователя, если нужен доступ с нескольких рабочих мест.
Установка клиента
Клиентское ПО X2Go для Windows, Linux и OS X можно скачать на сайте проекта. Большой минус - нет поддержки мобильных клиентов, при том что NoMachine поддерживает и Android и iOS. Но клиенты NoMachine с сервером X2Go несовместимы.
Если на локальном компьютере установлена Ubuntu, достаточно добавить пакет x2goclient:
sudo apt-get install x2goclient
А так выглядит клиент X2Go для Windows:
В случае если возникли проблемы с основным клиентом, написанным на Qt, можно использовать альтернативный клиент, написанный на wxPython.
Таким образом я решил свою задачу. Благодарю сообщество и всех, кто работает над этой темой. Буду рад, если мой опыт кому-то поможет.
Комментарии (21)
websnow
01.06.2023 14:53В Linux для работы с графическими интерфейсами (GUI) используется X-сервер
Gnome на Wayland перешел, полагаю там X2GO не заведется судя по названию (либо сессию под иксами запускать)
13werwolf13
01.06.2023 14:53+1vglconnect и vglrun в помошь, не x2go конечно, но как альтернатива X over SSH должно работать
vlad196
01.06.2023 14:53Ну, по идее, это всё таки отдельная сессия, а с учётом того, что сегодня вместе wayland обычно ещё и x11 в системе есть, то это вообще не должно никак сказываться на работе с wayland. Cидит Ваня по порту 6000 на x11 и сидит, а ты -- Петька спокойно продолжаешь на wayland работать(Если, конечно видеокарты вообще поддерживают одновременную работу с 2-мя графическими сессиями)
IRS
01.06.2023 14:53А как у этой штуковины дела обстоят с буфером обмена? Как можно копировать хотя бы текст из этой штуки и в нее?
13werwolf13
01.06.2023 14:53всё отлично, причём буфер обмена можно включить, выключить либо сделать односторонним по желанию. мы применяли x2go на одном проекте несколько лет назад, и там возможность сделать буфер обмена односторонним была решающей
IRS
01.06.2023 14:53а вот это уже интересная история. Я гоняю qemu через lima vm на маке. Посмотрю попозже как можно подружить c этой игрушкой
13werwolf13
01.06.2023 14:53Всё зависит от целей, возможно вам будет проще и быстрее переехать на виртуалбокс, он имеет режим интегрированного рабочего стола. Ну или использовать X over SSH, ну либо vglconnect+vglrun. Ну либо как вар ант поставить линукс на макбук без лишней прослойки.
Проблема в том что x2go не развивается давно, последние два апдейта были мелкие фиксы, реальные изменения кончились где-то в 2016 емнип году.. Говорят оно уже не так хорошо работает на своременных системах.
anuphriev
01.06.2023 14:53Условно да. Иногда их коробки плохо работает на 0 скрин, с новыми скринами проблем не наблюдал
theurus
01.06.2023 14:53установил на оракловский арм сервер
тормозит так будто нет графических драйверов на реальном железе
клиент на арче. копирование файлов не работает. в остальном вроде норм. явно лучше чем vnc. если бы не тормоза то даже до rdp бы дотягивало
dmitrye1
Был опыт, одновременно на Astra Linux подняли X2GO и RDP для сравнения. Победил RDP: качественнее картинка, надежнее, соответствует опыту пользователя. Вариант с RDP довольно серьезно использовали, нареканий от пользователей не было.
anuphriev
Тут все упирается в то, что x2go может паралельные сессии. По дефолту а debian локальный скрин :0 , каждая последующая сессия открывает :50 и выше. Из минусов - некоторое ПО из коробки не умеет в несколько скринов, допустим Thunderbird
a1eksei Автор
Можно кстати и к той же сессии подключаться. Но придётся на каждый комп поставить и клиент и сервер. И настроить профили сессий. Есть утилита x2gobroker для настройки профилей
a1eksei Автор
RDP отличный вариант, особенно если клиент на Windows. Но что-то стабильное стало только последнее время появляться
Johan_Palych
Критерии отбора в условном проде(Терминальный сервер Linux: tigervnc-server, XRDP Server, x2goserver):
Локальная сеть предприятия, AD(канал связи с узкой полосой пропускания не критичен);
Клиенты: Windows, Linux, Android, MacOs, iOS;
client-side: mass storage mounting, printing, audio, authentication by smartcard and USB stick;
Год уже используем XRDP Server-а в проде. Для бухов, фиников и закупцов(неттопы) - x2goserver-а.
Не рекламирую, но годная лицензия:
Starterkits/builder
Стартовые наборы(starterkits): Cinnamon, KDE5, MATE, Xfce, GNOME, Enlightenment, LXDE, LXQt, IceWM
Лицензионный договор на Starterkits