company_banner

VPS на Linux с графическим интерфейсом: запускаем сервер RDP на Ubuntu 18.04


    В предыдущей статье мы разобрали запуск сервера VNC на виртуальной машине любого типа. У этого варианта масса недостатков, основным из которых являются высокие требования к пропускной способности каналов передачи данных. Сегодня мы попробуем подключиться к графическому рабочему столу на Linux по RDP (Remote Desktop Protocol). Система VNC основана на передаче массивов пикселей по протоколу RFB (Remote Framebuffer), а RDP позволяет отправлять более сложные графические примитивы и высокоуровневые команды. Обычно он используется для организации служб удаленных рабочих столов в Windows, но серверы для Linux также доступны.

    Оглавление:


    Установка графического окружения
    Русификация сервера и установка ПО
    Установка и настройка сервера RDP
    Настройка межсетевого экрана
    Подключение к серверу RDP
    Менеджер сессий и сеансы пользователей
    Переключение раскладок клавиатуры

    Установка графического окружения


    Мы возьмем виртуальную машину с Ubuntu Server 18.04 LTS с двумя вычислительными ядрами, четырьмя гигабайтами оперативной памяти и жестким диском (HDD) на двадцать гигабайт. Более слабая конфигурация плохо подходит для графического десктопа, хотя это зависит от решаемых задач. Не забывайте использовать промокод Habrahabr10 для получения скидки в 10% при заказе.


    Установка окружения рабочего стола со всеми зависимостями выполняется следующей командой:

    sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

    Как и в предыдущем случае, мы выбрали XFCE из-за относительно невысоких требований к вычислительным ресурсам.

    Русификация сервера и установка ПО


    Часто виртуальные машины разворачиваются только с английской локализацией. На десктопе может потребоваться русская, настроить которую несложно. Сначала установим переводы для системных программ:

    sudo apt-get install language-pack-ru

    Настроим локализацию:

    sudo update-locale LANG=ru_RU.UTF-8

    Того же эффекта можно достичь, отредактировав вручную файл /etc/default/locale.

    Для локализации GNOME и KDE в репозитории есть пакеты language-pack-gnome-ru и language-pack-kde-ru — они понадобятся, если вы будете использовать программы из этих сред рабочего стола. В XFCE переводы устанавливаются вместе с приложениями. Дальше можно инсталлировать словари:

    # Словари для проверки орфографии
    sudo apt-get install hunspell hunspell-ru
    
    # Тезаурус для LibreOffice
    sudo apt-get install mythes-ru
    
    # Англо-русский словарь в формате DICT
    sudo apt-get install mueller7-dict

    Кроме того, инсталляция переводов может потребоваться для некоторых прикладных программ:

    # Браузер Firefox
    sudo apt-get install firefox firefox-locale-ru
    
    # Почтовый клиент Thunderbird
    sudo apt-get install thunderbird thunderbird-locale-ru
    
    # Офисный пакет LibreOffice
    sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ru

    На этом подготовка окружения рабочего стола завершена, осталось настроить сервер RDP.

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


    В репозиториях Ubuntu есть распространяемый свободно сервер Xrdp, которым мы и воспользуемся:

    sudo apt-get install xrdp

    Если все прошло нормально, сервер должен запуститься автоматически:

    sudo systemctl status xrdp


    Сервер Xrdp запускается с правами пользователя xrdp и по умолчанию берет cертификат /etc/ssl/private/ssl-cert-snakeoil.key, который можно заменить собственным. Для доступа на чтение файла нужно добавить пользователя в группу ssl-cert:

    sudo adduser xrdp ssl-cert

    Настройки по умолчанию можно найти в файле /etc/default/xrdp, а все прочие конфигурационные файлы сервера лежат в каталоге /etc/xrdp. Основные параметры находятся в файле xrdp.ini, который можно не менять. Конфиг хорошо документирован, к тому же в комплекте имеется соответствующие manpages:

    man xrdp.ini
    man xrdp

    Осталось только отредактировать скрипт /etc/xrdp/startwm.sh, который исполняется при инициализации пользовательской сессии. Предварительно сделаем резервную копию скрипта из дистрибутива:

    sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
    sudo nano /etc/xrdp/startwm.sh

    Чтобы запустить окружение рабочего стола XFCE, потребуется сценарий примерно такого содержания:

    #!/bin/sh
    if [ -r /etc/default/locale ]; then
    . /etc/default/locale
    export LANG LANGUAGE
    fi
    exec /usr/bin/startxfce4

    Обратите внимание: в скриптах лучше прописывать полный путь к исполняемым файлам — это хорошая привычка. Сделаем скрипт исполняемым и на этом настройку сервера Xrdp можно считать законченной:

    sudo chmod 755 /etc/xrdp/startwm.sh

    Перезапускаем сервер:

    sudo systemctl restart xrdp

    Настройка межсетевого экрана


    По умолчанию Xrdp слушает TCP-порт 3389 на всех интерфейсах. В зависимости от конфигурации виртуального сервера может потребоваться настройка межсетевого экрана Netfilter. В Linux это обычно делается с помощью утилиты iptables, но в Ubuntu лучше использовать ufw. Если IP-адрес клиента известен, настройка осуществляется следующей командой:

    sudo ufw allow from IP_Address to any port 3389

    Разрешить соединения с любого IP можно так:

    sudo ufw allow 3389

    Протокол RDP поддерживает шифрование, но открывать доступ к серверу Xrdp из сетей общего пользования — плохая идея. Если у клиента нет фиксированного IP, для повышения уровня безопасности сервер должен слушать только localhost. Доступ к нему лучше настроить через туннель SSH, который безопасно перенаправит трафик с клиентского компьютера. Аналогичный подход мы использовали в предыдущей статье для сервера VNC.

    Подключение к серверу RDP


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

    sudo adduser rdpuser


    Добавим пользователя в группу sudo, чтобы он мог решать связанные с администрированием задачи. Если такой потребности нет, этот шаг можно пропустить:

    sudo gpasswd -a rdpuser sudo

    Подключиться к серверу можно с помощью любого клиента RDP, включая встроенный клиент службы удаленных рабочих столов Windows. Если Xrdp слушает внешний интерфейс, никаких дополнительных телодвижений не понадобится. Достаточно указать в настройках соединения IP-адрес VPS, имя пользователя и пароль. После подключения мы увидим примерно такую картину:


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


    Если сервер Xrdp слушает только localhost, на клиентском компьютере трафик придется упаковать в туннель SSH (на VPS должен быть запущен sshd). Под Windows можно использовать графический клиент SSH (например, PuTTY), а в UNIX-системах нужна утилита ssh:

    ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ip

    После инициализации туннеля клиент RDP будет подключаться уже не к удаленному серверу, а к локальному хосту.

    С мобильными устройствами сложнее: способные поднять туннель клиенты SSH придется покупать, к тому же в iOS и iPadOS фоновая работа сторонних приложений затруднена из-за слишком хорошей оптимизации энергопотребления. На iPhone и iPad поднять туннель в отдельном приложении не получится — потребуется приложение-комбайн, которое само умеет устанавливать соединение RDP через SSH. Такое, например, как Remoter Pro.

    Менеджер сессий и сеансы пользователей


    Возможность многопользовательской работы реализована непосредственно в сервере Xrdp и не требует дополнительной настройки. После запуска сервиса через systemd один процесс работает в режиме демона, слушает порт 3389 и взаимодействует через localhost с менеджером сессий.

    ps aux |grep xrdp


    sudo netstat -ap |grep xrdp


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


    Автоматический запуск менеджера сессий прописан в файле /etc/default/xrdp, а конфигурация хранится в /etc/xrdp/sesman.ini. По умолчанию выглядит она примерно так:

    [Globals]
    ListenAddress=127.0.0.1
    ListenPort=3350
    EnableUserWindowManager=true
    UserWindowManager=startwm.sh
    DefaultWindowManager=startwm.sh
    
    [Security]
    AllowRootLogin=true
    MaxLoginRetry=4
    TerminalServerUsers=tsusers
    TerminalServerAdmins=tsadmins
    ; When AlwaysGroupCheck=false access will be permitted
    ; if the group TerminalServerUsers is not defined.
    AlwaysGroupCheck=false
    
    [Sessions]

    Здесь можно ничего не менять, стоит только запретить вход с правами root (AllowRootLogin=false). Для каждого авторизовавшегося в системе пользователя запускается отдельный процесс xrdp: если отсоединиться не завершив сеанс, пользовательские процессы по умолчанию продолжат работать, а к сеансу можно будет подключиться заново. Настройки можно изменить в файле /etc/xrdp/sesman.ini (секция [Sessions]).

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


    С двухсторонним буфером обмена проблем обычно не возникает, а вот с русской раскладкой клавиатуры придется немного пошаманить (русская локаль должна быть уже установлена). Отредактируем клавиатурные настройки сервера Xrdp:

    sudo nano /etc/xrdp/xrdp_keyboard.ini

    В конец конфигурационного файла нужно добавить следующие строки:

    [rdp_keyboard_ru]
    keyboard_type=4
    keyboard_type=7
    keyboard_subtype=1
    model=pc105
    options=grp:alt_shift_toggle
    rdp_layouts=default_rdp_layouts
    layouts_map=layouts_map_ru
    
    [layouts_map_ru]
    rdp_layout_us=us,ru
    rdp_layout_ru=us,ru

    Остается сохранить файл и перезапустить Xrdp:

    sudo systemctl restart xrdp

    Как видите, поднять сервер RDP на линуксовом VPS несложно, а в предыдущей статье мы уже разобрали настройку VNC. Помимо этих технологий, есть еще один интересный вариант: использующая модифицированный протокол NX 3 система X2Go. С ней мы разберемся в следующей публикации.

    RUVDS.com
    RUVDS – хостинг VDS/VPS серверов

    Комментарии 45

      0
      В примерах конфигов, в самом начале "[" пропущены?
        0
        Были, побились при верстке :-)
        0
        Что происходит в случае разрыва соединения?
        Сеанс остается или убивается?
        Могу ли я подключиться к сеансу повторно?
          0
          Да, в конфигурации по умолчанию к сессии можно подключиться заново после разрыва соединения (если пользователь именно разорвал соединение, а не завершил сессию). Это можно изменить в настройках: /etc/xrdp/sesman.ini
          0
          Копи-паст с Win10 работает без проблем?

          Пару лет назад ставил xrdp. Копи-паст переставал работать через какое-то время, перелогин помогал. Но это не решение, конечно.
            0
            У меня работает.
            Глюки с буфером обмена бывают, даже если к винде подключаться из винды :-)
              0
              Даже переключение раскладок иногда глючит на винде)
                0
                В винде постоянно глючило, пока не вылечил это ключом «IgnoreRemoteKeyboardLayout» = 1 на сервере терминалов.
                Взято отсюда, но работает во всех последующих версиях.
            +3

            1.


            Про звук забыли — если сделать всё как в статье то звука не будет !


            2.


            Таки удобнее не через клиенты заходить (которые ещё и устанавливать надо) а поставить tomcat+guacamole и заходить откуда хочешь просто из браузера !

              +2
              1. Радость то какая! (/sarcasm). А то сидишь ночью с включенными колонками, а на тебя из rdp касперский хрюкает…
                +8
                Касперский на убунте, вот и до этого дожили мы.
                0

                В Гуакамоле копипаст не работает

                  0

                  Издеваетесь ?


                  Всё через кнтрл-альт-шифт (по умолчанию) копируется если текст.


                  Если же нужно просто "бросать" файл в окошко rdp то в настройках guacamole добавляем ssh ключ для юзера под которым rdp и тоже всё работает !

                    0

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


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

                  +1
                  Какой я старый, 8 лет назад ещё из сорцов 7.1 собирал, потому что в пакетах кривая версия была.
                    +1
                    С двухсторонним буфером обмена проблем обычно не возникает

                    Сколько не настраивал (ставил и из репозитория и через xRDP installer script) — буфер обмена никогда не работал…

                    Так, у нас же Linux, с чего начать смотреть?

                    UPD: но после вашей статьи заработало (даже на 16.04)!
                      +2
                      в Ubuntu лучше использовать ufw

                      почему?


                      открывать доступ к серверу Xrdp из сетей общего пользования — плохая идея.

                      почему? SSH вон торчит и ничего.


                      способные поднять туннель клиенты SSH придется покупать

                      нет, если взять Termux. Это не ssh-клиент, а просто терминал и юзерспейс линукса (не требующий рута), с пакетным менеджером apt и кучей софта. Ставите туда ssh-клиент и далее как обычно ssh user@host -L3389:localhost:3389
                      А юзеры яблок пусть страдают :)

                        +1

                        А почему страдают? Та же самая команда.

                        0
                        Можно ли с одного сервера гнать разные видео и звук разным клиентам? Есть ли какие-то ограничения по кол-ву?
                          0
                          Можно, всё это программные реализации и лучше стандартизировать всё.
                          0
                          помню пытался настроить на дебиан 9, всё время был после логина просто пустой экран. плюнул и научился работать через терминал по ссх.
                            0

                            Да, на Линуксе все настраивается удобно и просто, работает стабильно и беспроблемно. ;)


                            PS. Это сарказм :)

                              +1
                              Работает стабильно и беспроблемно, но вот настраивается долго и сложно.
                                0

                                Обновления версий ОС часто приносят радость в нашу жизнь и хаос в стабильность...

                                  0

                                  Федора и центос, умвр.

                                    0
                                    10 лет на дебиане, умвр. Насчёт настраивается долго согласен.
                              +2

                              Ох и намучался я с настройкой xrdp с KDE на Manjaro. Такой секас был… Плюнул и настроил на Кубунте 19. Обновил кубунту до 20ки и xrdp успешно здох. Эти решения дохнут при обновлениях и линукс линуксу сам себе режиссер. Когда уже из линукса сделают МакОсь в плане обновлений системы? :))₽₽

                                0

                                И как у него обстоят дела с масштабированием DPI?

                                  0

                                  Лучше не знать

                                  0

                                  Но… Зачем?
                                  Есть же freenx.

                                    0

                                    Last Update: 2014-06-09

                                    0
                                    s/freenx/x2go/
                                    Те же яйца, но посвежей
                                      0

                                      Да и поэффективнее, наверное. Кстати, у x2go (и xpra) есть ещё одна фича — это интеграция удалённых приложений в клиентский рабочий стол.

                                        0
                                        Нет, эффективность та же, просто оно со свободной лицензией.
                                        Как минимум, на узком канале ведёт себя так же.
                                        И интеграция приложений у freenx тоже была, проверял — работало.
                                          0

                                          Вы действительно тестировали xrdp? Когда то давно я проверял, реализация xrdp работала так же как обычный vnc, гнали дифы экрана, когда как оригинальный rdp в windows работает на уровне приложений и в некотором смысле его векторной графики, но думаю это уже не актуально, так как все приложения рисуют окна сами как битмап

                                            0
                                            Читайте внимательнее — речь идёт о freenx и x2go. Это не xrdp, оба этих решения могут быть настроены так, что можно почти нормально работать по хреновому edge, при этом rdp до винды (не xrdp) в некоторых ситуациях типа управления вмварью будет работать так, что невозможно дождаться реакции за приемлемое время — канал забит трафиком.
                                            К сожалению, для x2go пока нет клиента под мобилы.
                                    0

                                    я извиняюсь, всё это поддерживает RDP RemoteFX?

                                      0

                                      Есть кодек, но качество не фонтан. Хотя работает.

                                      0

                                      Какое разрешение видео у экрана и как им управлять? Нет ли проблем если использовать MATE вместе XFCE с русской раскладкой, переключением?

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

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


                                        конфиги все ровно такие же.
                                        xfce4 использую, как в статье
                                        Ubuntu Linux 16.04.1

                                          0
                                          Применяется xrdp для доступа к Ubuntu — не самая стабильная работа, RDP между двумя Windows-компьютерами работает на порядок лучше.
                                          Интересно, когда-нибудь появится аналог RemoteApps под Linux? Чтобы не показывать рабочий стол пользователю, а опубликовать только необходимые приложения и дать доступ в веб-версии рабочего стола?
                                            0
                                            xpra может быть подойдет?
                                            0

                                            chmod 755? А почему не +x?

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое