Быстрая установка и настройка VNC в Ubuntu 20.04

VNC (или Virtual Network Computing) – это система удалённого доступа, которая позволяет использовать клавиатуру и мышь для взаимодействия с графическим интерфейсом рабочего стола на удалённом сервере. При помощи VNC можно управлять файлами, программным обеспечением и настройками удалённого сервера, не обращаясь к командной строке.

Этот мануал поможет вам установить VNC с помощью TightVNC на виртуальный сервер Ubuntu 20.04 и настроить безопасное подключение при помощи SSH-туннеля. Затем мы используем клиент VNC на локальной машине, чтобы проверить взаимодействие с сервером через графический интерфейс рабочего стола.

Требования

  • Сервер Ubuntu 20.04, настроенный по этому мануалу.
  • Локальный компьютер с предустановленным клиентом VNC, который поддерживает VNC-соединения через SSH-туннель. Пользователи Windows могут установить TightVNC, RealVNC или UltraVNC. Пользователи MacOS могут обратиться к встроенному пакету Screen Sharing или использовать кроссплатформенные приложения (например, RealVNC). Пользователи Linux могут выбрать vinagre, krdc, RealVNC, TightVNC и т.п.

1: Установка среды рабочего стола и сервера VNC

Подключившись к серверу по SSH, обновите индекс пакетов:

sudo apt update

Чтобы установить на сервер необходимые пакеты, введите команду:

sudo apt install xfce4 xfce4-goodies

Теперь установите TightVNC:

sudo apt install tightvncserver

Чтобы завершить начальную настройку сервера VNC после его установки и выбрать надёжный пароль, используйте команду vncpasswd.

vncpasswd

Команда предложит выбрать и подтвердить пароль:

You will require a password to access your desktops.
Password:
Verify:

Пароль должен включать от шести до восьми символов. Более длинные пароли будут автоматически сокращены до 8 символов.

Подтвердив свой пароль, вы сможете создать пароль только для просмотра. Он нужен для демонстрации VNC другим пользователям, потому его не обязательно устанавливать.

Если вы в будущем захотите изменить свой пароль или добавить пароль для просмотра, вы можете сделать это с помощью команды vncpasswd.

2: Настройка сервера VNC

Серверу VNC необходимо знать, какие команды выполнять при запуске. Эти команды должны находиться в файле xstartup в каталоге .vnc, который хранится в домашнем каталоге текущего пользователя. Скрипт запуска был создан командой vncserver на этапе установки, но вам нужно создать пользовательский скрипт для взаимодействия с Xfce.

Создайте новый файл xstartup:

nano ~/.vnc/xstartup

Вставьте в него следующие команды:

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

При помощи первой команды, xrdb $HOME/.Xresources (она идет сразу после шебанга), GUI сервера VNC читает файл .Xresources. Вторая команда просто запускает Xfce.

Сохраните и закройте файл.

Теперь нужно сделать файл исполняемым:

chmod +x ~/.vnc/xstartup

Перезапустите VNC:

vncserver -localhost

Обратите внимание, команда включает опцию -localhost, которая связывает VNC-сервер с loopback интерфейсом вашего сервера. Это приведет к тому, что VNC будет разрешать подключения только с сервера, на котором он установлен.

Вы получите такой вывод:

New 'X' desktop is your_hostname:1
Starting applications specified in /home/8host/.vnc/xstartup
Log file is /home/8host/.vnc/your_hostname:1.log

Как видите, по умолчанию VNC запускает экземпляр сервера на порт 5901. Этот порт называется дисплейным портом, VNC ссылается на него как :1.

3: Безопасное подключение к VNC

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

На локальном компьютере создайте соединение SSH, которое перейдет в localhost соединение для VNC. Вы можете сделать это в Linux или macOS через терминал с помощью следующей команды:

ssh -L 59000:localhost:5901 -C -N -l 8host your_server_ip

Локальным портом может быть любой порт, который еще не занят другой программой или процессом, хотя в этом примере мы используем 59000. Обязательно замените 8host именем вашего пользователя Ubuntu и your_server_ip IP-адресом вашего сервера.

Если вы работаете через графический SSH-клиент, например, PuTTY, вы можете создать туннель, кликнув правой кнопкой мыши по верхней панели терминала и выбрав Change Settings…

Найдите ветку Connection в меню в левой части окна Reconfiguration. Разверните ветку SSH и нажмите Tunnels. На экране Options controlling SSH port forwarding укажите 59000 в качестве Source Port и localhost:5901 в качестве Destination.

Затем нажмите кнопку Add, а после этого нажмите Apply, чтобы создать туннель.

После запуска туннеля используйте клиент VNC для подключения к localhost:59000. Вам будет предложено пройти аутентификацию с помощью пароля, который вы установили в разделе 1.

Как только вы подключитесь, вы увидите стандартный рабочий стол Xfce. Вы можете получить доступ к файлам в вашем домашнем каталоге с помощью файлового менеджера или из командной строки.

Нажмите CTRL+C в локальном терминале, чтобы остановить туннель SSH и вернуться в обычную командную строку. Эта комбинация клавиш также завершит сессию VNC.

4: Настройка VNC как сервиса systemd

Теперь нужно настроить VNC как сервис system. Это позволит вам управлять сервером при помощи простых команд, а также добавить его в автозагрузку.

Создайте новый юнит-файл /etc/systemd/system/vncserver@.service:

sudo nano /etc/systemd/system/vncserver@.service

Символ @ в конце имени файла позволит вам передать аргумент, который можно использовать в конфигурации сервиса. С его помощью можно указать порт VNC, который нужно использовать при управлении сервисом.

Добавьте в файл следующие строки. Обязательно измените значение User, Group, WorkingDirectory и имя пользователя в значении PIDFILE.

[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=8host
Group=8host
WorkingDirectory=/home/8host
PIDFile=/home/8host/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target

Сохраните и закройте файл.

Затем сообщите системе про новый юнит-файл.

sudo systemctl daemon-reload

И включите его:

sudo systemctl enable vncserver@1.service

Цифра 1, идущая за @, определяет, какой номер дисплея должен отображаться в сервисе, в этом случае это значение по умолчанию :1.

Остановите текущий экземпляр сервера VNC, если он еще запущен.

vncserver -kill :1

Теперь попробуйте запустить его как любой другой сервис systemd:

sudo systemctl start vncserver@1

Чтобы убедиться, что сервер запущен, проверьте его состояние:

sudo systemctl status vncserver@1

Теперь сервис VNC добавлен в автозагрузку, и вы можете управлять им при помощи стандартных команд systemctl.

Читайте также: Управление сервисами и юнитами Systemd с помощью Systemctl

Снова запустите туннель SSH, чтобы подключиться в серверу:

ssh -L 59000:localhost:5901 -C -N -l 8host your_server_ip

Создайте новое подключение с клиента VNC на localhost:59000, чтобы протестировать настройку.

Заключение

Теперь на сервере Ubuntu 20.04 установлен сервер VNC. С его помощью вы можете управлять файлами, программами и настройками удалённого сервера (например, удаленно запускать веб-браузер).

Tags: , , ,