Установка и настройка x11vnc на Ubuntu 20.04 для удалённого рабочего стола

Зачем нужен VNC сервер
VNC сервер предоставляет графический удалённый доступ к рабочему столу удалённой машины. В отличие от SSH, который даёт терминальный доступ, VNC показывает существующий X11-дисплей вашей системы — то есть вы видите тот же GUI, что и при локальном входе. x11vnc подключается к текущему X11-сеансу (KDE, GNOME, Xfce и т. п.) и транслирует его по сети.
Краткое определение: VNC сервер — это сетевой сервис, который пересылает изображение рабочего стола и события клавиатуры/мыши между двумя компьютерами.
Ключевые свойства x11vnc:
- Отображает реальный X11-дисплей, не создавая отдельного виртуального экрана.
- Поддерживает встроенное SSL/TLS и 2048-bit RSA (VeNCrypt) и авторизацию по UNIX-аккаунту.
- Совместим с большинством VNC-клиентов.
Важное замечание: x11vnc работает только с X11. Если ваша сессия использует Wayland, x11vnc не сможет получить изображение. На Ubuntu 20.04 чаще используется Xorg по умолчанию, но проверьте ваш дисплейный менеджер и сеанс перед настройкой.
Подход 1: Обзор последовательности действий
- Установить альтернативный дисплейный менеджер lightdm (рекомендуется для совместимости с x11vnc).
- Установить пакет x11vnc.
- Создать systemd-сервис для автоматического запуска x11vnc с нужными опциями и паролем.
- Открыть порт в ufw или настроить SSH-туннель для безопасного доступа.
- Подключиться с помощью VNC-клиента и проверить поведение экрана (блокировка и спящий режим).
Установка совместимого дисплейного менеджера
На Ubuntu по умолчанию используется gdm3. gdm3 иногда конфликтует с x11vnc, поэтому рекомендуется установить lightdm.
Откройте терминал сочетанием клавиш Ctrl + Alt + T и обновите списки пакетов:
sudo apt updateУстановите lightdm:
sudo apt install lightdmВо время установки вы увидите экран выбора дисплейного менеджера. Нажмите Enter, затем выберите lightdm и подтвердите.


После установки перезагрузите систему:
sudo rebootПосле перезагрузки вы заметите другой экран входа, поскольку теперь используется lightdm.
Важно: если вы используете удалённый сервер без графического окружения, установка дисплейного менеджера не требуется. x11vnc полезен для систем с уже запущенным GUI.
Установка x11vnc
Откройте терминал и выполните:
sudo apt install x11vncСоздание systemd-сервиса для автоматизации
Мы создадим unit-файл, который запустит x11vnc при загрузке и перезапустит при сбое.
Откройте файл (можно использовать vim или nano):
sudo vim /lib/systemd/system/x11vnc.serviceВставьте следующий контент. Обратите внимание на параметр -passwd: замените randompassword на ваш надёжный пароль.
[Unit]
Description=x11vnc service
After=display-manager.service network.target syslog.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -forever -display :0 -auth guess -passwd randompassword
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
[Install]
WantedBy=multi-user.targetПояснения к полям:
- After=display-manager.service гарантирует, что x11vnc стартует после дисплейного менеджера.
- -forever говорит x11vnc не завершать работу после первого клиента.
- -display :0 указывает на главный X-дисплей.
- -auth guess пытается автоматически найти файл авторизации X-сессии.
Сохраните файл и выйдите из редактора. В vim это Esc, затем :wq и Enter.
Перезагрузите конфигурацию systemd и включите сервис:
systemctl daemon-reload
systemctl enable x11vnc.service
sudo systemctl start x11vnc.serviceПроверьте статус:
systemctl status x11vnc.serviceОжидаемый вывод покажет, что сервис активен и запущен.

Обратите внимание на порт в выводе: обычно x11vnc использует TCP-порт 5900 для дисплея :0.
Открытие порта в ufw
По умолчанию Ubuntu использует ufw. Разрешите входящие TCP-соединения на порт 5900:
sudo ufw allow 5900/tcpПроверьте статус ufw и правила:
sudo ufw status verboseВажно: открытие порта 5900 напрямую в интернете — риск для безопасности. Рекомендуется использовать SSH-туннель или VPN.
Рекомендации по безопасности и альтернативы
Security hardening
- Используйте SSH-туннель вместо прямого открытия порта. Пример перенаправления локального порта 5900 на удалённую машину:
ssh -L 5900:localhost:5900 user@your-remote-ipПосле этого подключайтесь к localhost:5900 на локальной машине, и трафик будет идти через зашифрованный SSH.
Если хотите зашифровать соединение на уровне VNC, изучите возможность включения VeNCrypt/SSL в x11vnc или обёртывание через stunnel. x11vnc поддерживает VeNCrypt и 2048-bit RSA ключи.
Используйте сложный пароль для VNC. В unit-файле параметр -passwd хранит пароль в открытом виде, что не идеально. Альтернатива: создать файл пароля с помощью x11vnc -storepasswd и ссылаться на него через -rfbauth /path/to/passfile.
Пример создания защищённого файла пароля:
mkdir -p ~/.vnc
x11vnc -storepasswd
# следуйте подсказкам, затем в сервисе укажите -rfbauth /home/youruser/.vnc/passwd- Ограничьте доступ на уровне ufw по IP, если известны адреса клиентов:
sudo ufw allow from 203.0.113.5 to any port 5900 proto tcpАльтернативные подходы
- TigerVNC или TightVNC если вам нужен отдельный виртуальный дисплей (например, :1), а не отображение реального экрана.
- Использование RDP (xrdp) как более интегрированного решения для подключения с Windows-клиентов.
- Для безопасного корпоративного доступа — VPN + VNC или специализированные решения удалённого управления.
Когда x11vnc не подойдёт
- Если на системе запущена сессия Wayland, x11vnc не сможет транслировать экран.
- На headless-серверах без GUI предпочтительнее виртуальные VNC-сессии или доступ по SSH.
Подключение с другого компьютера
Установите VNC Viewer. Например, VNC Viewer от RealVNC доступен для macOS, Windows, Linux, iOS и Android.
Скачайте и установите клиента, затем укажите адрес в формате ip:порт, например 198.51.100.23:5900 или используйте туннель и подключайтесь к localhost:5900.

Получить IP-адрес на Ubuntu можно командой:
ip addrВажно: по умолчанию VNC не шифрует весь трафик. Клиент предупредит о незашифрованном соединении — подтвердите только если вы понимаете риск или используете туннель.

Введите пароль, который вы задали в конфигурации x11vnc (или файл passwd), и продолжите.

Если всё в порядке, вы увидите рабочий стол удалённого Linux.

Решение проблем и отладка
- Сервис не запускается
- Проверьте логи systemd:
sudo journalctl -u x11vnc.service -b- Убедитесь, что display-manager запущен и X11 доступен.
- Клиент видит пустой экран или черный экран
- Частая причина — использование Wayland. Переключитесь на Xorg при входе в GNOME или используйте дисплейный менеджер, который стартует с X11.
- Проверьте права доступа к файлу авторизации X (обычно /var/run/lightdm/:0 или /home/user/.Xauthority). Параметр -auth guess помогает, но иногда нужно явно указать путь.
- Пароль не принимается
- Проверьте, что вы используете тот самый пароль, что записан в сервисе, или путь к файлу пароля через -rfbauth.
- Порт закрыт
- Проверьте ufw и настройки сети роутера/NAT. Для локальных подключений убедитесь, что вы используете корректный IP-адрес.
Настройки экрана и блокировки
Если экран блокируется и вы не видите удалённые действия, отключите автоматическую блокировку:
Откройте «Настройки > Конфиденциальность > Блокировка экрана» и выключите Automatic Screen Lock и Lock Screen on Suspend.
Важно: это снижает безопасность. По возможности включайте блокировку снова после завершения удалённой сессии или используйте временное правило для неё.
Чек-лист для разных ролей
Администратор
- Проверить, что на машине выделен X11-сеанс.
- Установить и протестировать lightdm и x11vnc.
- Настроить systemd-сервис и защиту паролем/файлом пароля.
- Закрыть доступ извне или ограничить по IP/SSH-туннелям.
Разработчик/удалённый работник
- Убедиться, что клиент VNC установлен и обновлён.
- Проверить возможности SSH-туннелирования.
- Тестировать подключение перед важной сессией.
Пользователь поддержки
- Иметь инструкции по перезапуску сервиса и проверке логов.
- Быть готовым переключить дисплейный менеджер при необходимости.
Критерии приёмки
- x11vnc.service запущен и находится в состоянии active (running).
- Подключение через VNC Viewer успешно отображает рабочий стол :0.
- Пароль работает, а доступ по сети ограничён или защищён туннелем.
- Проблемы с блокировкой экрана решены для целевых сеансов.
Краткая методология развёртывания
- Обновить систему.
- Установить lightdm и выбрать его при установке.
- Установить x11vnc.
- Создать systemd unit с безопасным паролем или с -rfbauth.
- Включить и запустить сервис.
- Обеспечить безопасность (SSH/VPN/ufw).
- Протестировать подключение с клиента.
Глоссарий в одну строку
- X11: классическая система окон в Linux для графических сессий.
- Wayland: современная альтернатива X11, несовместимая с x11vnc.
- lightdm: лёгкий дисплейный менеджер для входа в GUI.
- ufw: простой интерфейс для iptables в Ubuntu.
Резюме
x11vnc — удобный инструмент для трансляции реального X11-рабочего стола на удалённые машины. На Ubuntu 20.04 процесс включает установку lightdm, пакет x11vnc, создание systemd-сервиса и настройку правил ufw. Обязательно позаботьтесь о безопасности: используйте SSH-туннели, файлы паролей и ограничение доступа по IP. Если система использует Wayland, рассмотрите альтернативы.
Важно: всегда сравнивайте риски и выбирайте подходящую модель доступа для вашей среды.