В этом руководстве будет рассмотрен процесс настройки сервера VNC для осуществления удаленного управления виртуальными серверами под управлением операционной системы Ubuntu 16.04 x64.
Что это такое
VNC — широко распространенный способ удаленного управления рабочим столом компьютера по сети.
Установка VNC Server и рабочего окружения xfce4
Прежде всего следует обновить локальную базу пакетов:
sudo apt-get update
Далее установите пакеты из главного репозитория:
sudo apt-get install xfce4 xfce4-goodies tightvncserver xorg lightdm
Для завершения начальной конфигурации VNC-сервера выполните команду vncserver для установки пароля. Также будет предложено ввести “view-only” пароль для аутентификации только для просмотра. Пользователи, которые будут авторизованы с помощью “view-only” пароля, не смогут контролировать рабочий стол с помощью мыши или клавиатуры.
Настройка VNC Server
Во-первых, мы должны указать VNC серверу какие команды выполнять при запуске. Они находятся в файле ~/.vnc/xstartup. Сценарий запуска был создан на предыдущем шаге, но в нем нужно изменить некоторые команды для рабочего окружения Xfce.
Инициализация VNC сервера по умолчанию происходит на порт 5901, называемый “Порт дисплея” и упоминается как :1. VNC может запускать несколько экземпляров на других портах: :2, :3, и т.д.
Перед тем как приступить к изменениям настройки VNC сервера необходимо остановить экземпляр на порту 5901:
vncserver -kill :1
Создадим резервную копию сценария с помощью команды mv: mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Откройте файл в текстовом редакторе:
nano ~/.vnc/xstartup
Добавьте следующие строки:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
Первая команда скрипта читает файл .Xresources пользователей сервера с настройками графики рабочего стола, вторая команда запускает графическое ПО.
Предоставим необходимое право на исполнение:
sudo chmod +x ~/.vnc/xstartup
Далее откройте файл /etc/init.d/vncserver в текстовом редакторе:
sudo nano /etc/init.d/vncserver
Добавьте следующий код, изменив значение параметра USER="user_name", на необходимое имя пользователя системы:
#!/bin/bash
PATH="$PATH:/usr/bin/"
export USER="user_name"
DISPLAY="1"
DEPTH="16"
GEOMETRY="1024x768"
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost"
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;
stop)
log_action_begin_msg "Stopping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;
restart)
$0 stop
$0 start
;;
esac
exit 0
В первом блоке объявлены общие настройки, такие как имя пользователя, разрешение экрана и т.п.
Второй блок связывает VNC сервер и обратную связь.
Следующий блок позволяет немедленно убить существующий экземпляр сервера VNC.
Последний блок комбинирует предыдущие две команды (start/stop).
Предоставим необходимое право на исполнение скрипта:
sudo chmod +x /etc/init.d/vncserver
Проброс портов для возможности удаленного доступа:
iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
iptables-save
Добавим автоматический запуск при загрузке, перезапустим сервер и убьем запущенный при перезапуске рабочий стол, т. к. он не может быть доступен удаленно, а только локально:
sudo update-rc.d vncserver defaults
sudo service vncserver start
vncserver -kill :1
Запустим дисплейный менеджер:
sudo /etc/init.d/lightdm start
Запустим оконный менеджер:
sudo /etc/init.d/x11-common start
Запустим рабочий стол, который будет доступен удаленно:
vncserver
При каждом новом запуске рабочего стола с номером X необходимо пробрасывать порт для удаленного доступа:
iptables -A INPUT -p tcp --dport 59XX -j ACCEPT
iptables-save
Проверка VNC
Для проверки корректности работы воспользуйтесь клиентом рабочего стола, например Remmina.