← Все статьиНаписать

xrdp на Ubuntu: как я собрал удалённый рабочий стол на сервере

Связь в Сочи часто обрывается, поэтому я поднял сервер в европейском дата-центре и работаю на нём через RDP. Агенты на нём продолжают писать код, даже когда я закрываю ноутбук. Разбираю, как поставить xrdp на Ubuntu, почему XFCE, как закрыть порт от посторонних и чем подключаться с ноутбука и телефона.

Пост, на основе которого написана статья: Сервер для Claude Code: пишу код с LLM прямо с телефона

Зачем мне удалённый рабочий стол на сервере

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

Я взял сервер у российского хостера в европейском дата-центре за 3500 рублей в месяц. Параметры скромные: 6 ГБ памяти, 6 ядер и диск на 50 ГБ, система Ubuntu с оболочкой XFCE. Для работы с LLM этого хватает, потому что тяжёлые вычисления идут на стороне модели, а не на сервере.

Подробнее про то, как устроена вся схема с агентами и телефоном, я писал в посте о сервере для работы с LLM. Здесь — техническая часть.

Почему пинг важнее мощности

RDP передаёт картинку экрана и действия мыши, поэтому задержка чувствуется сразу. На 70 мс работаешь почти как за локальной машиной. Я пробовал вариант в два раза дешевле, но там было 120 мс, и курсор с набором текста уже ощутимо отставали.

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

Установка RDP-сервера на Ubuntu

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

  • Обновить систему: sudo apt update && sudo apt upgrade.
  • Поставить оболочку: sudo apt install xfce4 xfce4-goodies.
  • Поставить сервер: sudo apt install xrdp.
  • Включить автозапуск службы через systemctl enable --now и проверить её статус через systemctl status.
  • Добавить служебного пользователя RDP-сервера в группу ssl-cert, чтобы он мог читать системный сертификат.
  • Создать отдельного пользователя для работы, а не входить под root.

Настройка рабочего стола: XFCE вместо GNOME

Штатная оболочка Ubuntu — GNOME. Для удалённой сессии она тяжёлая: анимации, эффекты и композитинг съедают канал и память. XFCE легче и в удалённой сессии работает стабильнее.

Чтобы при входе запускалась именно XFCE, в домашней папке пользователя создают файл .xsession с одной строкой: xfce4-session. После этого службу перезапускают, и новая сессия открывается уже с нужной оболочкой.

Безопасность: порт 3389 наружу не открываю

RDP по умолчанию слушает порт 3389. Его постоянно сканируют боты, которые перебирают пароли. Открытый в интернет порт удалённого рабочего стола — одна из самых частых причин взлома серверов.

Минимум — файрвол. В Ubuntu для этого есть ufw: разрешить SSH, закрыть всё остальное и открыть 3389 только для своего IP-адреса, если он постоянный. Пароль пользователя — длинный и нигде больше не используемый, вход по SSH — только по ключу.

Подключение через SSH-туннель

Надёжнее совсем не открывать порт RDP, а ходить через SSH. На ноутбуке выполняется команда ssh -L 13389:localhost:3389 user@адрес-сервера. После этого клиент удалённого рабочего стола подключается к localhost:13389, а трафик идёт внутри зашифрованного SSH-соединения.

Порт 13389 взят для примера: локальный 3389 на Windows может быть занят своим сервером RDP. Снаружи на сервере в этой схеме открыт только SSH.

Обновления и резервные копии

Сервер, к которому подключаешься каждый день, легко забыть обновлять. В Ubuntu есть пакет unattended-upgrades: он сам ставит обновления безопасности, и после установки его достаточно один раз включить.

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

Чем подключаться с ноутбука и телефона

Протокол RDP придумала Microsoft, поэтому лучшие клиенты — её же. В Windows встроено «Подключение к удалённому рабочему столу», команда mstsc. Для macOS, iOS и Android у Microsoft есть официальное приложение Windows App, до осени 2024 года оно называлось Microsoft Remote Desktop. В Linux удобен Remmina.

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

Частые проблемы удалённого рабочего стола Ubuntu

  • Чёрный экран после входа — часто пользователь уже залогинен локально в графической сессии. Нужно выйти из неё или заходить другим пользователем.
  • Вход без оболочки — не создан файл .xsession или в нём опечатка.
  • Ошибки доступа к сертификату — служебный пользователь сервера не добавлен в группу ssl-cert.
  • Сильные задержки — далёкий дата-центр или слабый канал. Помогает понизить глубину цвета в клиенте.

Когда хватит SSH и tmux

Графика нужна не всегда. Если работаешь только с агентом в терминале, достаточно SSH и tmux: tmux держит сессию на сервере, и после обрыва связи к ней можно вернуться ровно в то же место. Рабочий стол удобен, когда параллельно нужен браузер, тестовый сайт и несколько окон.

СпособКогда подходитМинусы
RDP-сервер и XFCEНужен браузер и несколько окон, работа с телефонаЧувствителен к пингу, нужен файрвол
VNCНужно видеть ту же сессию, что на мониторе сервераОбычно медленнее RDP на слабом канале
SSH и tmuxРабота только в терминалеНет графики и браузера

Как не потерять сессию агента в терминале

Даже внутри рабочего стола я запускаю агента в tmux. Команда tmux new -s work создаёт сессию, сочетание Ctrl+B и затем D отключается от неё, а tmux attach -t work возвращает обратно. Процесс при этом продолжает работать на сервере.

Так можно начать задачу в графической сессии, а проверить её с телефона по SSH, если RDP под рукой нет. Оба способа смотрят на один и тот же процесс.

Вопросы и ответы

Какой порт использует RDP?

По умолчанию 3389. Я не открываю его в интернет: подключаюсь через SSH-туннель или разрешаю доступ только со своего IP через ufw.

Почему для удалённого входа лучше XFCE, а не GNOME?

GNOME тяжелее и хуже ведёт себя в удалённой сессии. XFCE работает быстрее и стабильнее, особенно на сервере с 6 ГБ памяти.

Какой пинг нужен для комфортной работы через RDP?

У меня на 70 мс работа почти как за локальной машиной, а на 120 мс задержка уже мешала. Пинг стоит проверить до покупки сервера.

Почему после входа чёрный экран?

Чаще всего тот же пользователь уже вошёл в локальную графическую сессию или не настроен файл .xsession с запуском оболочки.