ctrllife.ru/ctrllife

Удалённый рабочий стол на Ubuntu 24.04: xrdp + XFCE или GNOME Remote Login

Удалённый рабочий стол на Ubuntu 24.04: xrdp + XFCE или GNOME Remote Login
Содержание11 разделов

Для VPS без видеокарты обычно рациональнее использовать xrdp с XFCE: окружение расходует меньше ресурсов, а подключение из mstsc и Windows App не требует дополнительных параметров. GNOME Remote Login сохраняет привычный рабочий стол Ubuntu и работает через Wayland, но нуждается в большем объёме памяти и корректной обработке перенаправления RDP.

Оба способа подходят для Ubuntu 24.04 LTS: XFCE проще и легче, GNOME удобнее тем, кто хочет сохранить стандартный интерфейс системы.

Что выбрать: xrdp + XFCE или GNOME Remote Login

Параметр

xrdp + XFCE

GNOME Remote Login

Рабочее окружение

Лёгкое XFCE

Стандартное GNOME

Графическая система

X11 через Xorg

Wayland

Работа без аппаратного ускорения

Обычно отзывчивее

Сильнее зависит от ресурсов процессора и памяти

Ориентир по ресурсам

От 2 vCPU и 4 ГБ памяти

От 4 vCPU и 8 ГБ памяти

Подключение из Windows

Встроенный клиент mstsc

mstsc, желательно с файлом .rdp

Подключение из macOS

Windows App без дополнительных параметров

Windows App с параметром перенаправления в файле .rdp

Порядок входа

Учётная запись Linux

Сначала учётные данные RDP, затем учётная запись Linux

Сеанс после отключения

Обычно сохраняется

Сохраняется после установки актуальных обновлений Ubuntu 24.04

Основные сложности

Запросы polkit, повторный вход с другим разрешением

Перенаправление клиента, первый запуск GNOME, настройка сертификата

В ранних выпусках Ubuntu 24.04 отключение клиента завершало сеанс GNOME. Поддержку сохранения сеанса перенесли в обновление gnome-remote-desktop 46.3-0ubuntu1.2; для её работы необходимы также обновления gdm3. Перед настройкой установите все обновления, а после настройки проверьте повторное подключение на практике. Изменение опубликовано в журнале пакета Ubuntu.

Что влияет на скорость удалённого рабочего стола

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

Фактор

Как снизить влияние

Задержка сети

Выберите центр обработки данных ближе к месту подключения. Ориентировочно до 50 мс работа комфортна, около 100 мс задержка уже заметна

Программная отрисовка

Используйте XFCE, отключите компонование окон и декоративные эффекты

Высокое разрешение

Начните с 1600×900 или 1920×1080. На macOS отключите оптимизацию для Retina

Фоновые процессы

Отключите индексирование файлов и ненужные расширения рабочего окружения

Недостаток памяти

Не запускайте GNOME на минимальной конфигурации VPS и следите за использованием подкачки

Для измерения задержки в macOS или Linux выполните ping -c 20 "<IP>". В Windows используется команда ping -n 20 "<IP>", где <IP> необходимо заменить адресом сервера.

Маршрут до сервера проверяется командой sudo traceroute -I "<IP>" в macOS или tracert "<IP>" в Windows. Скачки задержки и потери пакетов на промежуточных узлах не устраняются настройками XFCE или GNOME.

Как подготовить Ubuntu 24.04

Инструкция рассчитана на чистую установку Ubuntu 24.04 LTS с доступом по SSH. Команды выполняются с правами root; при работе под обычным пользователем сначала выполните sudo -i.

sudo -i

Перед выполнением дальнейших команд замените <username> на имя нового пользователя, а <IP> на нужный адрес. Угловые скобки являются частью обозначения, а не готовым значением.

Обновите систему и установите часовой пояс. В примере используется UTC; доступные значения выводятся командой timedatectl list-timezones.

apt update && apt full-upgrade -y
timedatectl set-timezone UTC

Добавьте отметку о прохождении мастера первого запуска GNOME. Файл в /etc/skel будет скопирован в домашний каталог нового пользователя; для XFCE он не используется.

install -d -m 755 /etc/skel/.config
printf 'yes\n' > /etc/skel/.config/gnome-initial-setup-done

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

U="<username>"
adduser "$U"
usermod -aG sudo "$U"

Разрешите SSH до включения межсетевого экрана. Порт RDP на этом этапе открывать не требуется: способы ограничения доступа описаны отдельно.

ufw allow OpenSSH
ufw enable
apt install -y fail2ban
systemctl enable --now fail2ban
ufw status verbose

Как установить xrdp + XFCE

Установите рабочее окружение, сервер xrdp и компоненты Xorg. Добавление пользователя xrdp в группу ssl-cert позволяет службе прочитать закрытый ключ сертификата.

apt install -y xfce4 xfce4-goodies xfce4-terminal dbus-x11 xorg xauth xrdp xorgxrdp
adduser xrdp ssl-cert

Переведите систему в текстовый режим загрузки и отключите локальный экран входа LightDM. На сервере без монитора он не нужен.

systemctl set-default multi-user.target
systemctl disable --now lightdm 2>/dev/null

Укажите XFCE как окружение для пользователя. Файл /home/<user>/.xsession будет считан при запуске сеанса через xrdp.

U="<username>"
printf 'startxfce4\n' > "/home/$U/.xsession"
chown "$U:$U" "/home/$U/.xsession"

Создайте правило polkit, которое отключает повторные запросы пароля для управления цветовыми профилями и обновления списка пакетов. В Ubuntu 24.04 используются файлы .rules, а не устаревшие правила .pkla.

/etc/polkit-1/rules.d/45-remote-desktop.rules
cat > /etc/polkit-1/rules.d/45-remote-desktop.rules <<'EOF'
polkit.addRule(function(action, subject) {
  if ((action.id.indexOf("org.freedesktop.color-manager.") == 0 ||
       action.id == "org.freedesktop.packagekit.system-sources-refresh") &&
      subject.isInGroup("sudo")) {
    return polkit.Result.YES;
  }
});
EOF

systemctl restart polkit

Запустите xrdp и проверьте состояние службы и прослушиваемый порт.

systemctl enable --now xrdp
systemctl restart xrdp
systemctl is-active xrdp
ss -ltnp | grep 3389

После первого входа откройте терминал внутри XFCE и отключите компонование окон. Это уменьшает нагрузку при программной отрисовке.

xfconf-query -c xfwm4 -p /general/use_compositing -s false

Тот же параметр находится в разделе «Настройки» → «Диспетчер окон (дополнительно)» → «Композитинг».

Как настроить GNOME Remote Login

Установите стандартное окружение Ubuntu и сервер удалённого рабочего стола. После перезагрузки снова получите права root через sudo -i.

apt install -y ubuntu-desktop-minimal gnome-remote-desktop
systemctl set-default graphical.target
reboot

Создайте самоподписанный сертификат от имени служебного пользователя gnome-remote-desktop. Срок действия в примере составляет 3650 дней; после его окончания сертификат потребуется заменить.

D=/var/lib/gnome-remote-desktop/.local/share/gnome-remote-desktop

sudo -u gnome-remote-desktop mkdir -p "$D"
sudo -u gnome-remote-desktop openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 \
  -subj "/CN=$(hostname)" \
  -keyout "$D/tls.key" \
  -out "$D/tls.crt"

Подключите сертификат и задайте отдельные учётные данные RDP. Команда read не выводит вводимый пароль на экран и не помещает его непосредственно в командную строку.

grdctl --system rdp set-tls-key "$D/tls.key"
grdctl --system rdp set-tls-cert "$D/tls.crt"

read -rp 'Имя пользователя RDP: ' RDP_USER
read -rsp 'Пароль RDP: ' RDP_PASS
printf '\n'

grdctl --system rdp set-credentials "$RDP_USER" "$RDP_PASS"
unset RDP_USER RDP_PASS

grdctl --system rdp enable
systemctl enable --now gdm.service
systemctl enable --now gnome-remote-desktop.service
systemctl restart gnome-remote-desktop.service

Проверьте конфигурацию и порт. Параметр --show-credentials выводит учётные данные, поэтому не публикуйте результат этой команды.

grdctl --system status --show-credentials
systemctl is-active gnome-remote-desktop.service
ss -ltnp | grep 3389

В разделе RDP должно быть состояние enabled, пути к сертификату и имя пользователя. Значение Username: (empty) указывает, что учётные данные не сохранены; повторите настройку с помощью set-credentials.

До первого входа пользователя отключите анимации, расширение значков рабочего стола, автоматическую блокировку и индексирование файлов. Команда loginctl terminate-user завершает все процессы пользователя, поэтому не выполняйте её при открытых несохранённых документах.

U="<username>"
H=$(getent passwd "$U" | cut -d: -f6)

loginctl terminate-user "$U" 2>/dev/null || true

sudo -u "$U" -H dbus-run-session -- bash <<'EOF'
gsettings set org.gnome.desktop.interface enable-animations false
gsettings set org.gnome.shell disabled-extensions "['ding@rastersoft.com']"
gsettings set org.gnome.desktop.background picture-uri ''
gsettings set org.gnome.desktop.background picture-uri-dark ''
gsettings set org.gnome.desktop.background primary-color '#2c2c2c'
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.desktop.screensaver lock-enabled false
EOF

sudo -u "$U" mkdir -p "$H/.config/systemd/user"
sudo -u "$U" ln -sf /dev/null "$H/.config/systemd/user/tracker-miner-fs-3.service"

sudo -u "$U" -H dbus-run-session -- \
  gsettings get org.gnome.desktop.interface enable-animations

Последняя команда должна вывести false. Временная шина dbus-run-session необходима потому, что запуск gsettings через sudo -u без пользовательского окружения может завершаться ошибками dconf.

Общий порядок настройки соответствует официальной документации GNOME Remote Desktop.

Как безопасно открыть доступ по RDP

Не оставляйте 3389/tcp доступным всем адресам без необходимости. Если у клиента постоянный публичный адрес, ограничьте подключение межсетевым экраном; при изменяющемся адресе удобнее туннель SSH.

Как разрешить RDP только с одного адреса

В следующей команде <IP> обозначает публичный адрес клиента, а не адрес сервера.

ufw allow from "<IP>" to any port 3389 proto tcp
ufw status numbered

Если ранее было создано общее правило ufw allow 3389/tcp, удалите его после проверки ограниченного доступа. Иначе ограничение по адресу не закроет подключения остальным клиентам.

Как подключиться через SSH-туннель

При использовании туннеля открывать 3389/tcp в межсетевом экране не нужно. Выполните команду на локальном компьютере и оставьте процесс запущенным.

ssh -N -L 13389:127.0.0.1:3389 "<username>@<IP>"

Здесь <IP> — адрес сервера. В RDP-клиенте вместо него укажите 127.0.0.1:13389.

Для проверки самоподписанного сертификата GNOME выведите его отпечаток на сервере и сравните с предупреждением клиента при первом подключении.

openssl x509 \
  -in /var/lib/gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.crt \
  -noout -fingerprint -sha256

Как подключиться из Windows и macOS

В Windows используется встроенная программа «Подключение к удалённому рабочему столу», которая запускается командой mstsc. В macOS установите Windows App из App Store.

Подключение к xrdp + XFCE

В Windows запустите mstsc, укажите <IP> и войдите под пользователем Linux. При подключении через SSH-туннель используйте адрес 127.0.0.1:13389.

В Windows App на macOS создайте подключение через «+» → «Add PC». В поле «PC name» укажите адрес сервера, а в «Credentials» — имя и пароль пользователя Linux.

На экране входа xrdp выберите сеанс Xorg. Если движение окон заметно отстаёт, отключите «Optimize for Retina displays» и установите разрешение не выше 1920×1080.

Подключение к GNOME Remote Login

После первичной проверки учётных данных GNOME перенаправляет клиента в сеанс входа, а затем в пользовательское окружение. Для корректной обработки этого перенаправления клиентам Microsoft рекомендуется передавать параметр use redirection server name:i:1 через файл .rdp. Назначение параметра описано в изменении GNOME Remote Desktop.

Сохраните следующее содержимое в файл server.rdp. В macOS перед сохранением переведите TextEdit в режим простого текста, иначе редактор может изменить кавычки и форматирование.

server.rdp
full address:s:<IP>:3389
use redirection server name:i:1
prompt for credentials on client:i:1
enablecredsspsupport:i:1
authentication level:i:2
screen mode id:i:2
desktopwidth:i:1600
desktopheight:i:900
dynamic resolution:i:0
smart sizing:i:1
use multimon:i:0
session bpp:i:24
redirectclipboard:i:1
redirectprinters:i:0
redirectsmartcards:i:0
audiomode:i:0

При подключении через SSH-туннель замените первую строку на full address:s:127.0.0.1:13389. Откройте сохранённый файл в Windows App или mstsc, а не создавайте отдельное подключение через «Add PC».

Сначала введите учётные данные, заданные через grdctl. Затем на экране GNOME укажите имя и пароль пользователя Linux; после короткого перенаправления откроется рабочий стол.

Для проверки подключения из macOS также можно использовать FreeRDP.

brew install freerdp
sdl-freerdp "/v:<IP>" "/u:<RDP_ЛОГИН>" /cert:tofu /size:1600x900

Как решить проблемы с подключением

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

Симптом

Вероятная причина

Решение

The Credentials Did Not Work со случайным именем пользователя

Клиент не принял перенаправление GNOME

Подключитесь через server.rdp с параметром use redirection server name:i:1

Connection reset by peer в GNOME

Не сохранены учётные данные RDP

Повторите set-credentials, перезапустите службу и проверьте grdctl --system status

Connection refused

Служба не запущена или не прослушивает порт

Проверьте systemctl status xrdp либо systemctl status gnome-remote-desktop

Истекает время ожидания

Порт закрыт межсетевым экраном или недоступен маршрут

Проверьте ufw status verbose, правила сетевого фильтра VPS и адрес подключения

Чёрный экран при первом входе в GNOME

Запустился мастер первоначальной настройки

Проверьте файл /home/<user>/.config/gnome-initial-setup-done

После повторного входа открылся пустой сеанс

Установлены не все обновления или прежний сеанс завершён

Обновите gdm3 и gnome-remote-desktop, затем проверьте журнал

Появляются окна Authentication required в XFCE

polkit запрашивает дополнительные полномочия

Проверьте правило /etc/polkit-1/rules.d/45-remote-desktop.rules

Ошибки dconf-CRITICAL и Permission denied

gsettings запущен без пользовательской шины

Выполните настройку через dbus-run-session

Окна движутся рывками

Высокая задержка, большое разрешение или нехватка ресурсов

Уменьшите разрешение, отключите эффекты и проверьте загрузку процессора

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

journalctl -u xrdp -b --since '-15 min' --no-pager
tail -n 50 /var/log/xrdp-sesman.log
tail -n 50 "/home/<user>/.xsession-errors"

Для GNOME Remote Login основные сообщения находятся в журнале системной службы.

journalctl -u gnome-remote-desktop.service \
  -b --since '-15 min' --no-pager

Если необходимо завершить зависший сеанс, сначала сохраните работу другими способами. Команда loginctl terminate-user "<username>" завершает все процессы указанного пользователя, а не только удалённый рабочий стол.

Какие есть альтернативы

Вариант

Модель распространения

Клиент

Когда подходит

NoMachine Personal Edition

Платная серверная подписка, бесплатный проигрыватель

NoMachine Player

Нужен готовый клиент для нескольких систем и дополнительные функции перенаправления устройств

KasmVNC

Открытый код

Браузер

Требуется доступ без установки отдельного RDP-клиента

X2Go

Открытый код

Собственный клиент

Нужен графический сеанс поверх SSH

KasmVNC удобен для доступа через браузер, но создаёт дополнительную нагрузку при кодировании изображения. X2Go использует SSH и собственный клиент, поэтому его стоит проверять на совместимость с выбранным окружением рабочего стола.

Частые вопросы

Что лучше для VPS без видеокарты?

Начните с xrdp и XFCE. Это окружение проще по составу, потребляет меньше памяти и позволяет отключить компонование окон одной командой.

GNOME Remote Login имеет смысл выбирать, когда важен стандартный интерфейс Ubuntu и сервер располагает достаточным запасом ресурсов.

Сохранится ли сеанс после разрыва соединения?

В xrdp сеанс обычно сохраняется, а повторный вход с тем же разрешением возвращает в открытое окружение. В обновлённой Ubuntu 24.04 сохранение сеанса поддерживает и GNOME Remote Login.

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

Можно ли не открывать порт 3389 в интернет?

Да. Создайте SSH-туннель с локальной пересылкой 13389:127.0.0.1:3389 и подключайтесь к 127.0.0.1:13389.

В этом случае внешний межсетевой экран должен разрешать SSH, а отдельное правило для 3389/tcp не требуется.

Почему GNOME Remote Login запрашивает два пароля?

Первая пара учётных данных принадлежит службе RDP и задаётся через grdctl --system rdp set-credentials. Она защищает начальное подключение к системной службе.

Вторая пара принадлежит пользователю Linux и вводится на экране входа GNOME. Не используйте одинаковые пароли для этих этапов.

Заключение

Для лёгкого VPS практичнее xrdp с XFCE, а для привычного рабочего стола Ubuntu — GNOME Remote Login с актуальными обновлениями и файлом .rdp. В обоих случаях уменьшение разрешения, ограничение доступа к RDP и проверка сохранения сеанса дают больше пользы, чем простая смена протокола.

Оцените запись