- Установка графического интерфейса (GUI) GNOME на Ubuntu и xRDP для подключения к удалённому рабочему столу
- Установка xRDP
- Установка русского языка для графического интерфейса GNOME в Ubuntu
- Безопасность
- Не только VNC и RDP. Удаленный рабочий стол Linux с X2Go
- Что такое NX?
- Преимущества X2Go
- Как установить X2Go
- Установка сервера на примере Ubuntu
- Установка клиента
Установка графического интерфейса (GUI) GNOME на Ubuntu и xRDP для подключения к удалённому рабочему столу
Подключаемся к терминалу нашего сервера по протоколу SSH.
Обновляем репозитории и пакеты операционной системы:
apt update && apt upgrade -y
Добавляем пользователя, под которым будем подключаться к рабочему столу, и сразу включаем его в группу sudo — это будет наш «Администратор»:
# Замените firstvds на имя пользователя, которое вы хотите использовать.
# New password: — придумываем пароль.
# Retype new password: — подтверждаем ранее установленный пароль.
# Далее можно заполнить для пользователя дополнительную информацию или пропустить эти поля кнопкой «Enter» , оставив их пустыми.
# Is the information correct? [Y/n] — подтверждаем правильность данных.
# Не забудьте изменить firstvds на имя пользователя, которого вы добавили.
Проверим, что права применились для нашего пользователя:
su firstvds sudo ls -la /root/
# Вводим пароль нашего пользователя, который был установлен ранее.
Если всё правильно, то вы увидите содержимое директории, которая принадлежит пользователю root, в ином случае будет ошибка — доступ запрещён.
Вернёмся к пользователю root , чтобы было более комфортно продолжать установку (для root нет необходимости использовать перед каждой командой sudo ):
exit или сочетание клавиш Ctrl+D .
Подготовка сервера завершена, приступим к установке графического интерфейса, после чего перезагрузим сервер:
apt install ubuntu-desktop -y && reboot
Перейдём в панель VMmanager. Из консоли VNC можно убедиться, что графический интерфейс запущен и работает. Если всё сделано правильно, то на экране нашего сервера мы увидим окно авторизации:
Продолжим настройку и установим русскую локаль:
apt install language-pack-ru -y
Ищем локаль ru_RU.UTF-8 UTF-8 , отмечаем её кнопкой «Пробел» и нажимаем «Enter» :
Установим её как локализацию по умолчанию, нажимаем «Enter» :
После завершения операции вы увидите сообщение: «Generation complete».
Установка xRDP
Для подключения к серверу через стандартное «Подключение к удалённому рабочему столу» в Windows установим службу xRDP и добавим её в автозагрузку:
apt install xrdp -y && systemctl enable xrdp
Утилита xRDP использует SSL-сертификат, поэтому, чтобы иметь доступ к ним на сервере, добавим одноимённого пользователя в группу ssl-cert:
Добавим необходимые правила в брандмауэр и активируем его:
ufw allow ssh #Правило для подключения к серверу по SSH
ufw allow 3389 #Открываем порт для подключения по RDP
ufw enable #Включаем брандмауэр
Достаточно часто при первом подключении возникает ошибка из-за отсутствия цветового профиля, предварительно добавим его самостоятельно:
cat /etc/polkit-1/localauthority/50-local.d/45-allow.colord.pkla [Allow Colord all Users] Identity=unix-user:* Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile ResultAny=no ResultInactive=no ResultActive=yes E0F
В работе xRDP есть некоторые особенности, при подключении к удалённому рабочему столу нужно использовать английскую раскладку, чтобы иметь возможность ввести пароль. Закройте RDP клиент, смените раскладку на английский и запустите подключение к удалённому рабочему столу повторно.
Если при подключении на Ubuntu 18/20 вы видите чёрный экран, то запустите команду:
sed -i '31a\unset DBUS_SESSION_BUS_ADDRESS\nunset XDG_RUNTIME_DIR' /etc/xrdp/startwm.sh && systemctl restart xrdp
Эти изменения в конфигурационном файле xRDP будут обнулять системные переменные, созданные предыдущими сеансами.
Установка русского языка для графического интерфейса GNOME в Ubuntu
Русифицировать операционную систему достаточно просто, для этого перейдём в настройки:
Далее выбираем пункт «Region & Language» и нажимаем кнопку «Manage Installed Languages» :
Операционная система предложит установить пакеты, которых не хватает для русификации, нажимаем кнопку «Установить» :
Затем перемещаем русский язык в начало списка, нажимаем «Применить для всей системы» и перезагружаем сервер. Готово, операционная система русифицирована.
Безопасность
После завершения установки рекомендую отключить возможность авторизации по паролю под пользователем root, оставим возможность подключения для этого пользователя только по ключу авторизации. Для этого необходимо изменить значение PermitRootLogin yes на PermitRootLogin prohibit-password в конфигурационном файле /etc/ssh/sshd_config .
Более подробно о том, как повысить безопасность SSH, рассказываем в нашей статье. По умолчанию в операционной системе, установленной из наших шаблонов, уже добавлен ключ технической поддержки, чтобы при возникновении трудностей наши специалисты могли оперативно помочь в их решении.
Пользователь root есть во всех Linux системах и по этой причине он является первой целью для атаки перебором паролей. Лучше не использовать стандартные логины вида «admin», «user» и прочие имена из «словарей», устанавливайте сложные пароли с использованием цифр, спецсимволов (!@#$%^&*()_+) и букв разного регистра. Все эти казалось бы простые правила помогут сохранить ваши данные в целости и безопасности.
Не только VNC и RDP. Удаленный рабочий стол Linux с X2Go
Однажды мне потребовалось организовать удаленный доступ к графическому интерфейсу 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.
Таким образом я решил свою задачу. Благодарю сообщество и всех, кто работает над этой темой. Буду рад, если мой опыт кому-то поможет.