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


  1. dmitrye1
    01.06.2023 14:53
    +3

    Был опыт, одновременно на Astra Linux подняли X2GO и RDP для сравнения. Победил RDP: качественнее картинка, надежнее, соответствует опыту пользователя. Вариант с RDP довольно серьезно использовали, нареканий от пользователей не было.


    1. anuphriev
      01.06.2023 14:53

      Тут все упирается в то, что x2go может паралельные сессии. По дефолту а debian локальный скрин :0 , каждая последующая сессия открывает :50 и выше. Из минусов - некоторое ПО из коробки не умеет в несколько скринов, допустим Thunderbird


      1. a1eksei Автор
        01.06.2023 14:53

        Можно кстати и к той же сессии подключаться. Но придётся на каждый комп поставить и клиент и сервер. И настроить профили сессий. Есть утилита x2gobroker для настройки профилей


    1. a1eksei Автор
      01.06.2023 14:53

      RDP отличный вариант, особенно если клиент на Windows. Но что-то стабильное стало только последнее время появляться


    1. Johan_Palych
      01.06.2023 14:53

      Критерии отбора в условном проде(Терминальный сервер 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


  1. websnow
    01.06.2023 14:53

    В Linux для работы с графическими интерфейсами (GUI) используется X-сервер

    Gnome на Wayland перешел, полагаю там X2GO не заведется судя по названию (либо сессию под иксами запускать)


    1. a1eksei Автор
      01.06.2023 14:53

      Там есть XWayland вроде, но не уверен как это работает


    1. 13werwolf13
      01.06.2023 14:53
      +1

      vglconnect и vglrun в помошь, не x2go конечно, но как альтернатива X over SSH должно работать


    1. qark
      01.06.2023 14:53

      Много где не заведётся https://wiki.x2go.org/doku.php/doc:de-compat


    1. vlad196
      01.06.2023 14:53

      Ну, по идее, это всё таки отдельная сессия, а с учётом того, что сегодня вместе wayland обычно ещё и x11 в системе есть, то это вообще не должно никак сказываться на работе с wayland. Cидит Ваня по порту 6000 на x11 и сидит, а ты -- Петька спокойно продолжаешь на wayland работать(Если, конечно видеокарты вообще поддерживают одновременную работу с 2-мя графическими сессиями)


  1. IRS
    01.06.2023 14:53

    А как у этой штуковины дела обстоят с буфером обмена? Как можно копировать хотя бы текст из этой штуки и в нее?


    1. 13werwolf13
      01.06.2023 14:53

      всё отлично, причём буфер обмена можно включить, выключить либо сделать односторонним по желанию. мы применяли x2go на одном проекте несколько лет назад, и там возможность сделать буфер обмена односторонним была решающей


      1. IRS
        01.06.2023 14:53

        а вот это уже интересная история. Я гоняю qemu через lima vm на маке. Посмотрю попозже как можно подружить c этой игрушкой


        1. 13werwolf13
          01.06.2023 14:53

          Всё зависит от целей, возможно вам будет проще и быстрее переехать на виртуалбокс, он имеет режим интегрированного рабочего стола. Ну или использовать X over SSH, ну либо vglconnect+vglrun. Ну либо как вар ант поставить линукс на макбук без лишней прослойки.

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


    1. anuphriev
      01.06.2023 14:53

      Условно да. Иногда их коробки плохо работает на 0 скрин, с новыми скринами проблем не наблюдал


  1. 2044907
    01.06.2023 14:53

    Переключение клавиатуры победили?

    После закрытие x2go клиента , раскладка перестала пропадать ?


    1. a1eksei Автор
      01.06.2023 14:53

      Не замечал проблем с клавиатурой. Для какой оси клиент? Дефолтный или PyHoca?


  1. theurus
    01.06.2023 14:53

    https://imgur.com/MraMQPX.png

    установил на оракловский арм сервер

    тормозит так будто нет графических драйверов на реальном железе

    клиент на арче. копирование файлов не работает. в остальном вроде норм. явно лучше чем vnc. если бы не тормоза то даже до rdp бы дотягивало


  1. ufm
    01.06.2023 14:53

    А чем сама по себе NoMachine не устроила?


    1. a1eksei Автор
      01.06.2023 14:53

      Она к сожалению не бесплатна


      1. ufm
        01.06.2023 14:53

        Для простого доступа к экрану - бесплатна. Для организации терминального сервера требуется лицензия (впрочем, если они не исправили одну ошибку...)