Некоторые задачи проще решать с графическим рабочим столом: запустить браузер, графический инструмент или десктопное приложение на удалённой машине. XFCE достаточно лёгкий для небольшого сервера, а TigerVNC позволяет увидеть его на вашем компьютере. В этом руководстве он настраивается на VPS Linux Infrawire так, что порт VNC никогда не открыт в Интернет: подключаться можно только через SSH-туннель.
📋 Требования
- VPS с Ubuntu 24.04 или Debian 12 и доступом по SSH под root (в личном кабинете вы найдёте IP-адрес и пароль root вашего VPS).
- Не менее 2 ГБ ОЗУ для комфортной работы стола.
- SSH-клиент на вашем компьютере и VNC-клиент (RealVNC Viewer или TigerVNC Viewer).
- Обычная учётная запись пользователя: не запускайте рабочий стол от root.
📦 Установка XFCE и TigerVNC
Обновите систему, затем установите рабочий стол и сервер. Пакет dbus-x11 избавляет от частой проблемы серого экрана.
Bashapt update && apt upgrade -y apt install -y xfce4 xfce4-goodies tigervnc-standalone-server tigervnc-common dbus-x11
Создайте отдельного пользователя, если его ещё нет:
Bashadduser USER usermod -aG sudo USER
🔑 Пароль VNC и сессия
Перейдите к этому пользователю и задайте пароль VNC (значимы не более 8 символов):
Bashsu - USER vncpasswd
На вопрос о пароле только для просмотра ответьте n. Затем укажите TigerVNC запускать XFCE:
Bashmkdir -p ~/.vnc cat > ~/.vnc/xstartup <<'EOF' #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4 EOF chmod +x ~/.vnc/xstartup
Проверьте вручную, слушая только localhost:
Bashvncserver :1 -localhost yes -geometry 1920x1080 -depth 24 vncserver -list vncserver -kill :1
⚙️ Автозапуск через systemd
Снова под root создайте юнит, запускающий сессию для вашего пользователя. Дисплей :1 соответствует TCP-порту 5901.
INI1# /etc/systemd/system/vncserver@.service 2[Unit] 3Description=TigerVNC server on display %i 4After=network.target 5 6[Service] 7Type=forking 8User=USER 9Group=USER 10WorkingDirectory=/home/USER 11PIDFile=/home/USER/.vnc/%H:%i.pid 12ExecStartPre=-/usr/bin/vncserver -kill :%i 13ExecStart=/usr/bin/vncserver :%i -localhost yes -geometry 1920x1080 -depth 24 14ExecStop=/usr/bin/vncserver -kill :%i 15 16[Install] 17WantedBy=multi-user.target
Bashsystemctl daemon-reload systemctl enable --now vncserver@1.service systemctl status vncserver@1.service
Для второго пользователя скопируйте юнит под другим именем, с этим пользователем и дисплеем :2 (порт 5902).
🔒 Подключение через SSH-туннель
Опция -localhost yes заставляет VNC слушать только 127.0.0.1, поэтому снаружи ничего недоступно. На своём компьютере откройте туннель:
Bashssh -N -L 5901:localhost:5901 USER@VPS_IP
Оставьте это окно открытым. В VNC-клиенте подключитесь к localhost:5901 и введите пароль VNC. Та же команда работает в Windows PowerShell и в Терминале macOS. Не открывайте порт 5901 ни в одном межсетевом экране.
✅ Проверка
На VPS убедитесь, что VNC слушает только петлевой адрес:
Bashss -tlnp | grep 5901 systemctl is-active vncserver@1.service
Вы должны увидеть 127.0.0.1:5901, а не 0.0.0.0:5901. На вашем компьютере при поднятом туннеле клиент должен показать рабочий стол XFCE.
🛠️ Устранение неполадок
Серый экран или нет рабочего стола. Проверьте, что ~/.vnc/xstartup исполняемый, что установлен dbus-x11, и прочитайте журнал командой cat ~/.vnc/*.log. Самая частая причина — отсутствие строки exec startxfce4.
«A VNC server is already running as :1». Остался устаревший файл блокировки. Выполните vncserver -kill :1, при необходимости удалите /tmp/.X1-lock и /tmp/.X11-unix/X1 и перезапустите службу.
Туннель отклоняет соединение. Вероятно, служба остановлена: проверьте systemctl status vncserver@1.service. Убедитесь также, что локальный порт 5901 на вашем компьютере не занят, или выберите другой, например -L 5999:localhost:5901.
🎉 Теперь ваш VPS предоставляет приватный рабочий стол XFCE, доступный только через ваш SSH-туннель.