Гид по технологиям

Как использовать Apache Guacamole для VNC-подключений на Linux

• 10 min read • DevOps • Обновлено 28 Nov 2025
Guacamole + VNC: настройка на Linux
Guacamole + VNC: настройка на Linux

Кому пригодится это руководство

  • Системным администраторам, которые хотят удалённый доступ к GUI-серверу через Guacamole.
  • Инженерам, которые разворачивают VNC в облаке и хотят безопасный доступ через SSH-тоннелирование.
  • Тем, кому нужно централизованно управлять рабочими столами без установки клиентского ПО.

Основные варианты решения

Primary intent: создать VNC-подключение к Linux через Apache Guacamole Related variants: подключение VNC через SSH-туннель, настройка TigerVNC на systemd, безопасность VNC, настройка Xfce для удалённого доступа


Предварительные требования

  • Сервер с одной из ОС: Rocky Linux, CentOS, AlmaLinux, Ubuntu или Debian.
  • Apache Guacamole должен быть уже установлен на машине, где вы будете открывать подключения (сервер Guacamole). Следуйте соответствующим инструкциям по установке Guacamole.
  • На целевом сервере должен быть доступен непривилегированный пользователь с sudo.
  • Рекомендуемые ресурсы для комфортной работы через VNC: минимум 2 CPU и 4 ГБ ОЗУ на удалённом сервере.
  • Система обновлена.

Для CentOS / Rocky Linux / AlmaLinux выполните:

$ sudo dnf update

Для Ubuntu / Debian выполните:

$ sudo apt update && sudo apt upgrade

Установите базовые утилиты (некоторые из них уже могут быть установлены).

Для CentOS / Rocky Linux / AlmaLinux:

$ sudo dnf install wget curl nano unzip yum-utils -y

Для Ubuntu / Debian:

$ sudo apt install wget curl nano unzip -y

Шаг 1 — Установка графической среды на сервер

В этом руководстве мы используем Xfce как лёгкую и стабильную графическую среду. Можно выбрать другую среду по вкусу.

Для CentOS / Rocky Linux / AlmaLinux выполните:

$ sudo dnf install -y epel-release
$ sudo dnf groupinstall -y "Xfce" "base-x"
$ sudo systemctl set-default graphical
$ sudo reboot

Примечание: если вы уже устанавливали EPEL ранее (например, при установке Guacamole), первый шаг можно пропустить.

Для Ubuntu / Debian выполните:

$ sudo apt install xfce4 xfce4-goodies
$ sudo systemctl set-default graphical
$ sudo reboot

Почему Xfce: компактная, быстрая и хорошо работает в VNC-сессиях; хорошая отправная точка для серверных GUI.


Шаг 2 — Установка TigerVNC

Мы будем использовать TigerVNC — популярную и активно поддерживаемую реализацию VNC.

Для CentOS / Rocky Linux / AlmaLinux:

$ sudo dnf install tigervnc-server

Для Ubuntu / Debian:

$ sudo apt install tigervnc-standalone-server

Альтернативы: TightVNC (легковесный), RealVNC (коммерческий), x11vnc (для существующей сессии X11). Выбор зависит от потребностей по безопасности, производительности и лицензированию.


Шаг 3 — Создание системного пользователя для VNC

Создайте пользователя (в примерах используется vncuser). Используйте безопасный пароль и отдельную учётную запись для удалённых GUI-сессий.

Для CentOS / Rocky Linux / AlmaLinux:

$ sudo adduser vncuser
$ sudo passwd vncuser

Затем переключитесь на пользователя и задайте VNC-пароль:

$ sudo su - vncuser

$ vncpasswd 
Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:

Опция view-only полезна для демонстрации: пользователь видит экран, но не может управлять мышью и клавиатурой.

Выйдите из оболочки пользователя:

$ exit

Для Ubuntu / Debian процесс создания пользователя аналогичен:

$ sudo adduser vncuser
# Следуйте подсказкам для ввода пароля и данных
$ sudo su - vncuser
$ vncpasswd

Настройте стартовый скрипт для сессии Xfce.

Откройте файл ~/.vnc/xstartup:

$ sudo nano ~/.vnc/xstartup

Вставьте:

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4 

Сохраните и закройте. Сделайте файл исполняемым при необходимости:

$ sudo chmod +x ~/.vnc/xstartup

Можно задать дополнительные параметры в ~/.vnc/config:

$ sudo nano ~/.vnc/config
geometry=1024x768
dpi=96
depth=24

Тест запуска VNC:

$ vncserver
/usr/bin/xauth:  file /home/vncuser/.Xauthority does not exist

New 'vncdesktop:1 (vncuser)' desktop at :1 on machine vncdesktop

Starting applications specified in /home/vncuser/.vnc/xstartup
Log file is /home/vncuser/.vnc/vncdesktop:1.log

Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/vncuser/.vnc/passwd :1 to connect to the VNC server.

Просмотреть список сессий:

$ vncserver -list
TigerVNC server sessions:

X DISPLAY #     RFB PORT #      PROCESS ID
:1              5901            1029

При необходимости остановите сессию перед созданием systemd-сервиса:

$ vncserver -kill :1
Killing Xtigervnc process ID 1029... success!

Шаг 4 — Создание systemd unit для VNC

Для CentOS / Rocky Linux / AlmaLinux в системе уже может быть unit-файл в /lib/systemd/system. Скопируйте его в /etc/systemd/system и подгоните под пользователя и дисплей.

$ sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service

Обратите внимание: VNC использует порты от 5900, где :1 соответствует 5901, :2 — 5902 и т.д.

Отредактируйте файл /etc/tigervnc/vncserver.users, чтобы назначить display пользователю:

$ sudo nano /etc/tigervnc/vncserver.users

Добавьте строку:

  :1=vncuser

Для Ubuntu / Debian установщик обычно не создаёт systemd unit автоматически. Создайте файл /etc/systemd/system/[email protected] со следующим содержимым:

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=simple
User=vncuser
PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :%i -geometry 1440x900 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

После создания или изменения unit-файлов перезагрузите демон systemd:

$ sudo systemctl daemon-reload

Советы по кастомизации unit-файла:

  • Задавайте User=<имя> и при необходимости Group=<группа>.
  • Если хочется передавать дополнительные параметры (dpi, глубина цвета), добавьте их в ExecStart.
  • Для устранения проблем логируйте stdout/stderr в отдельный файл через StandardOutput/StandardError или используйте journalctl.

Шаг 5 — Запуск и проверка сервиса VNC

Для CentOS / Rocky Linux / AlmaLinux:

$ sudo systemctl start vncserver@:1
$ sudo systemctl enable vncserver@:1
$ sudo systemctl status vncserver@:1

Для Ubuntu / Debian:

$ sudo systemctl start [email protected]
$ sudo systemctl enable [email protected]
$ sudo systemctl status [email protected]

Проверьте логи при помощи journalctl:

$ sudo journalctl -u vncserver@:1 -f
# или для Ubuntu/Debian
$ sudo journalctl -u [email protected] -f

Если процесс не запускается, проверьте:

  • владельца и права на ~/.vnc и файлы внутри;
  • корректность ~/.vnc/xstartup и её исполняемость;
  • что DISPLAY не конфликтует с другими сессиями;
  • логи в /home/vncuser/.vnc/*.log и через journalctl.

Шаг 6 — Настройка файрвола

Откройте порты VNC или разрешите сервис по имени.

Для CentOS / Rocky Linux / AlmaLinux (firewalld):

$ sudo firewall-cmd --permanent --add-service=vnc-server
$ sudo firewall-cmd --reload

Для Ubuntu / Debian (ufw):

$ sudo ufw allow 5901:5910/tcp
$ sudo ufw reload

Рекомендация по безопасности: по возможности не открывайте порты VNC в публичный интернет. Используйте SSH-тоннель или VPN.


Шаг 7 — Добавление VNC-подключения в Guacamole (локальный или тот же хост)

Откройте веб-интерфейс Guacamole, войдите и перейдите в вкладку настроек Connections.

  1. Нажмите New Connection.
  2. Введите имя подключения.
  3. В поле протокола выберите VNC.
  4. В параметрах укажите hostname — IP вашего сервера (пример 167.172.46.187) и порт 5901.
  5. В разделе Authentication введите системную учётную запись vncuser и пароль VNC (или оставьте пустым и вводите пароль при подключении).
  6. Нажмите Save.

Создание нового подключения в Guacamole

ALT: Интерфейс Guacamole — создание нового подключения

Выбор протокола VNC в Guacamole

ALT: Параметр выбора типа подключения — VNC

После сохранения подключение появится на дашборде Guacamole в разделе All Connections. При клике откроется экран блокировки или окно ввода пароля VNC, введите учётные данные и продолжите.

Список подключений в Guacamole

ALT: Список доступных подключений в Guacamole

Экран блокировки рабочего стола VNC

ALT: Экран блокировки удалённого рабочего стола через VNC

Форма входа в рабочий стол через VNC

ALT: Окно авторизации пользователя VNC

Рабочий стол Rocky Linux в Guacamole

ALT: Настроенный рабочий стол Rocky Linux, доступный через Guacamole


Шаг 8 — Подключение к удалённому Ubuntu/Debian через SSH-тоннель

Если Guacamole и целевой рабочий стол находятся на разных хостах, рекомендуется использовать SSH-тоннель (Local Port Forwarding) для защиты трафика.

В Guacamole:

  1. Создайте новое VNC-подключение.
  2. В качестве хоста укажите localhost и порт 5001 (локальный порт на машине Guacamole).
  3. Оставьте Authentication пустым (или укажите, если хотите), так как доступ будет проксироваться через туннель.

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

ALT: Параметры VNC-подключения в Guacamole для SSH-туннелирования

Создайте SSH-туннель с машины, где запущен Guacamole (выполняется командой на этой машине):

$ ssh -L 5001:localhost:5901 [email protected]

Что здесь происходит:

  • -L указывает локальное перенаправление порта.
  • 5001 — локальный порт на машине Guacamole, куда будет подключаться Guacamole.
  • localhost:5901 — адрес и порт VNC-сервера на удалённой машине (для SSH они видны как localhost с удалённой стороны).
  • [email protected] — SSH-учётная запись и IP/домен удалённого Ubuntu/Debian.

Туннель будет работать, пока открыта SSH-сессия. Чтобы подключение было постоянным, используйте systemd unit или autossh для поддержания туннеля.

Доступ через Guacamole: выберите подключение — Guacamole соединится с localhost:5001, трафик пойдёт через SSH на удалённую машину и попадёт на 5901.

Подключение к VNC через SSH-туннель — prompt пароля

ALT: Окно запроса VNC-пароля в Guacamole при подключении через туннель

Рабочий стол Ubuntu в Guacamole через туннель

ALT: Рабочий стол Ubuntu, доступный через Guacamole и SSH-туннель


Безопасность и жёсткая настройка

Советы по повышению безопасности VNC:

  • Не открывайте порты 5900+ напрямую в интернет. Используйте SSH-туннели или VPN.
  • Ограничьте доступ по IP на уровне брандмауэра (firewalld/ufw).
  • Используйте сложные пароли VNC и отдельных системных аккаунтов для каждой сессии.
  • По возможности включите шифрование транспортного уровня (для некоторых реализаций VNC есть опции TLS); если нет — используйте SSH.
  • Обновляйте TigerVNC и систему безопасности регулярно.
  • Логи: ведите аудит логов доступа (systemd/journalctl и /home//.vnc/.log).

Рекомендации по безопасному хранению паролей:

  • Храните пароли в менеджерах паролей или в Vault.
  • Не сохраняйте пароли в скриншотах или незащищённых конфигурационных файлах.

GDPR/конфиденциальность:

  • При работе с личными данными через удалённый рабочий стол обеспечьте шифрование канала и минимизируйте хранение персональных данных в логах.

Отладка и распространённые ошибки

  1. Проблема: VNC не запускается, ошибка “file /home/user/.Xauthority does not exist”.

    • Решение: запустите vncserver один раз от имени пользователя, чтобы создать файлы, проверьте права на домашнюю директорию.
  2. Проблема: чёрный экран при подключении.

    • Решение: проверьте ~/.vnc/xstartup — убедитесь, что вызывается корректный startxfce4 или другой оконный менеджер. Сделайте xstartup исполняемым.
  3. Проблема: авторизация не проходит в Guacamole.

    • Решение: проверьте, сохраняли ли вы параметры авторизации в подключении Guacamole или вводите ли пароль вручную; проверьте, совпадает ли VNC-пароль в /home/vncuser/.vnc/passwd.
  4. Проблема: конфликт портов DISPLAY.

    • Решение: используйте другой дисплей (:2 — порт 5902) и обновите vncserver.users и systemd unit соответствующим образом.
  5. SSH-туннель не работает.

    • Решение: проверьте, доступен ли SSH с машины Guacamole до удалённого хоста; проверьте нет ли локального процесса, занимающего 5001; используйте netstat/ss для диагностики.

Тесты приёмки и контроль качества

Критерии приёмки

  • Сервис vncserver@:1 запускается и остаётся в активном состоянии после перезагрузки хоста.
  • Guacamole успешно подключается к VNC и отображает рабочий стол Xfce.
  • При подключении через SSH-туннель трафик зашифрован и стабильность соединения выдерживает 10 минут активной работы.
  • Права доступа в домашней директории пользователя настроены корректно; нет ошибок в логах /home/vncuser/.vnc/*.log.

Тестовые сценарии

  • Попытка подключения с корректными учётными данными — ожидаемый результат: рабочий стол доступен.
  • Попытка подключения с неверным паролем — ожидаемый результат: отказ в подключении, логирование события.
  • Прерывание SSH-тоннеля — ожидаемый результат: VNC-сессия разрывается.

Рекомендации по эксплуатации и масштабированию

Развёртывание для нескольких пользователей

  • Для каждого пользователя создавайте отдельный системный аккаунт vncuserN и назначайте дисплей :N.
  • Автоматизируйте создание unit-файлов с шаблоном [email protected] и записью в /etc/tigervnc/vncserver.users.
  • При увеличении числа пользователей наблюдайте за CPU/памятью; рассмотрите горизонтальное масштабирование рабочих столов (несколько хостов с Guacamole-connector).

Использование autossh для постоянного SSH-туннеля

  • Для устойчивых туннелей используйте autossh или systemd unit, который поддерживает рестарт SSH при обрыве.

Частые альтернативы и когда они уместны

  • TightVNC — прост для лёгких задач, но может уступать в производительности на современных рабочих столах.
  • x11vnc — когда нужно подключиться к уже существующей локальной X-сессии (полезно для удалённого администрирования текущей пользовательской сессии).
  • RealVNC — коммерческое решение с дополнительными возможностями по безопасности и управлению.

Когда VNC НЕ подходит

  • Если нужны приложения с высокой частотой обновления графики (видео/3D), VNC может работать плохо; лучше использовать RDP или протоколы с аппаратным ускорением.

Минитехники и чек-листы по ролям

Администратор — быстрый чек-лист перед включением в прод:

  • Обновлена ОС и пакеты TigerVNC.
  • Создана отдельная учётная запись для каждой VNC-сессии.
  • systemd unit настроен и включён.
  • Открыты минимально необходимые порты или настроен SSH-туннель.
  • Логи собираются и мониторятся.

Пользователь — что проверить перед подключением:

  • Наличие пароля VNC.
  • Наличие доступа к Guacamole и правильное подключение к нужному соединению.
  • Если используется SSH-туннель — SSH-сессия активна.

Короткий плейбук развёртывания (SOP)

  1. Обновите систему и установите утилиты.
  2. Установите Xfce и перезагрузите.
  3. Установите TigerVNC.
  4. Создайте пользователя vncuserN и задайте vncpasswd.
  5. Настройте ~/.vnc/xstartup и ~/.vnc/config.
  6. Создайте/адаптируйте systemd unit и назначьте дисплей в /etc/tigervnc/vncserver.users.
  7. systemctl daemon-reload && systemctl enable –now vncserver@:N
  8. Настройте файрвол и проверьте подключение через Guacamole.
  9. Настройте мониторинг и резервирование конфигурации.

Мини-совет по производительности

  • Используйте меньшую глубину цвета (depth=16) и более низкое разрешение для экономии пропускной способности.
  • Отключайте ненужные визуальные эффекты в Xfce.
  • Для медленных соединений установите более высокое значение компрессии на клиенте VNC (если доступно).

Набор часто используемых команд (cheat sheet)

  • Запустить VNC: vncserver
  • Остановить сессию: vncserver -kill :1
  • Список сессий: vncserver -list
  • Просмотр логов systemd: sudo journalctl -u vncserver@:1 -f
  • Проверка портов: ss -tln | grep 590

Часто задаваемые вопросы

Можно ли подключиться к VNC без Guacamole?

Да. Вы можете использовать любой VNC-клиент (TigerVNC viewer, RealVNC, Remmina) и напрямую подключиться к порту 5901, если он открыт в файрволе. Guacamole предоставляет преимущество в виде доступа через браузер и центрального управления.

Нужно ли ставить GUI на сервер, если я хочу только запускать сервисы?

Нет. Графическая среда нужна только если вы хотите удалённый доступ к рабочему столу. Для командного управления достаточно SSH.

Как сделать туннель постоянным?

Используйте autossh или systemd unit, который перезапускает SSH при падении и поддерживает опцию -N -f для фоновой работы.


Краткое резюме

  • Установите Xfce и TigerVNC на нужном дистрибутиве.
  • Создайте пользователя и задайте VNC-пароль.
  • Настройте systemd unit и назначьте дисплей через /etc/tigervnc/vncserver.users.
  • Используйте SSH-туннели или VPN для безопасного доступа.
  • Добавьте подключение в Guacamole и проверьте доступность рабочего стола.

Если остались вопросы — опишите шаг, на котором возникла проблема, и приложите вывод systemctl или логи из /home/vncuser/.vnc/*.log.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро