26.10.2020

Установка и настройка VNC-сервера на CentOS 7

В этом руководстве мы рассмотрим, как установить и настроить VNC-сервер на операционной системе CentOS 7.x, чтобы разрешить удаленные подключения с любых VNC-клиентов, таких как TightVNC, RealVNC и других. В частности, мы сделаем это с помощью программного обеспечения TigerVNC Server — бесплатного инструмента, который позволяет пользоваться автономным виртуальным рабочим столом.

Введение

VNC (Virtual Network Computing) представляет собой клиент-серверный протокол, который позволяет клиентскому компьютеру (под управлением клиента VNC) подключаться и управлять удаленным компьютером (работающим на сервере VNC). Программное обеспечение было разработано исследовательской лабораторией Olivetti & Oracle в Кембридже, Великобритания, и его исходный код по-прежнему актуален и доступен под лицензией General Public License (GNU).

В зависимости от программного обеспечения сервера, VNC клиент будет подключаться к активному рабочему столу (например, как программы TeamViewer или AnyDesk) или к автономному виртуальному рабочему столу (как протокол удаленного рабочего стола Windows RDP). Последний, возможно, более мощный и безопасный, особенно если вам необходимо управлять серверным компьютером, потому что каждый сеанс будет уникальной средой, настроенной с разрешениями и правами подключаемого пользователя. Вот почему мы выбираем TigerVNC, который выполняет запуск параллельных сеансов среды рабочего стола компьютера (GNOME, KDE или другой GUI): это значит, что виртуальный рабочий стол будет создан для каждого отдельного подключения — это именно то, чего мы хотим.

Установка TigerVNC

Теперь давайте разберемся, как мы можем установить и настроить TigerVNC в CentOS. Первое, что нужно сделать, это установить программу TigerVNC Server, открыв сеанс терминала и введя следующую команду с правами root:

$ sudo yum install tigervnc-server

Сразу после этого вам необходимо создать отдельного пользователя VNC, с которого и будет осуществляться подключение (с выделенным паролем). Для этого введите следующее:

$ sudo adduser vncuser
$ sudo passwd vncuser

Важно: никогда не делайте этого от имени root-пользователя — это создаст серьезную угрозу безопасности вашей системы. Лучшим решением будет оставить пользователя root без доступа к VNC и настроить выделенную учетную запись с ограниченными правами.

После того как вы создали vncuser и задали пароль для входа в систему, вам также необходимо установить уникальный пароль VNC для этого пользователя. Это можно сделать с помощью следующей команды:

$ su - vncuser
$ vncpasswd

(первая строка может быть опущена, если мы уже вошли под пользователем vncuser заранее).

Следующее, что нужно сделать, это создать файл конфигурации VNC для vncuser. Самый быстрый способ сделать это — скопировать файл общего шаблона VNC, расположенный в папке /lib/systemd/system/, — и затем изменить его:

$ cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

Цифра «1», которую мы добавили в новое имя файла, — это номер дисплея, который будет использоваться для этого конкретного экземпляра службы. Это важно знать, потому что он также определит порт TCP, который будет использоваться нашим VNC-сервером, равным 5900 + номер дисплея. Первый будет 5901, затем 5902 и так далее.

Сразу после копирования вам нужно отредактировать новый файл с помощью Vi, Nano или другого текстового редактора, и заменить [USER] на имя пользователя, созданного недавно (в нашем случае vncuser). Вот как файл должен выглядеть после обновления (за исключением длинной закомментированной части в начале):

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l vncuser -c "/usr/bin/vncserver %i -geometry 1280x720"
PIDFile=/home/vncuser/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target

Как только вы это сделаете, можете перезагрузить демон VNC и запустить vncserver@1 с помощью следующих команд:

$ systemctl daemon-reload
$ systemctl start vncserver@:1

Прежде чем продолжить, проверьте, запущена ли служба, введя команду systemctl status:

$ systemctl status vncserver@:1

и создайте символическую ссылку, чтобы она всегда выполнялась при запуске системы, с помощью следующей команды:

$ systemctl enable vncserver@:1

Еще одна проверка, которую вы можете выполнить, прежде чем пытаться подключиться к серверу, — это посмотреть на активные сетевые сокеты с помощью команды ss: если все работает правильно, вы должны увидеть, что VNC-сервер работает и использует порт TCP 5901. Выполните команду:

$ ss -tulpn| grep vnc

Результат должен быть следующим:

tcp LISTEN 0 5 *:5901 *:* users:(("Xvnc",pid=38344,fd=9))
tcp LISTEN 0 128 *:6001 *:* users:(("Xvnc",pid=38344,fd=6))
tcp LISTEN 0 5 :::5901 :::* users:(("Xvnc",pid=38344,fd=10))
tcp LISTEN 0 128 :::6001 :::* users:(("Xvnc",pid=38344,fd=5))

Если вы видите это, значит все настроено правильно.

Настройка файрвола

Поскольку наша служба VNC прослушивает порт TCP 5901, вы должны быть уверены, что такой порт открыт и доступен внешним клиентам. Поэтому если у вас установлен брандмауэр, вы должны создать соответствующее правило, позволяющее подключаться клиентам VNC.

Сколько открыть портов, будет зависеть от того, сколько экземпляров VNC-серверов вам понадобится. В нашем сценарии мы сделали только 1, поэтому вам нужно открыть только первый выделенный порт VNC: TCP 5901, как мы уже и говорили. Команда, чтобы открыть этот порт на Firewalld:

# firewall-cmd --add-port = 5901 / tcp
# firewall-cmd --add-port = 5901 / tcp --permanent

Не будет лишним упомянуть, что вы также можете ограничить этот порт для определенных групп, IP-адресов, сетевых карт или других простых или сложных правил брандмауэра.

Установка графического интерфейса (GUI)

Если у вас уже есть GNOME, KDE или другие установленные среды рабочего стола, вы можете пропустить этот шаг. В противном случае вам необходимо установить один из них: сервер TigerVNC будет запускать параллельный экземпляр данной среды рабочего стола для каждого сеанса входа в систему, что означает, что у нас должен быть хотя бы один GUI.

GNOME

Если вы хотите действительно отличный, но тяжеловесный интерфейс GNOME, введите следующее:

$ sudo yum groupinstall "GNOME Desktop"

Xfce

Если вам нужна легкая альтернатива, мы можем предложить Xfce — бесплатную среду с открытым исходным кодом для Unix-подобных платформ, которая прекрасно работает с TigerVNC. GNOME также отлично работает, но он довольно ресурсоемкий: если вы хотите сэкономить ресурсы на своей серверной машине, Xfce, возможно, будет лучшим выбором. Чтобы установить его, введите следующее:

$ yum install epel-release
$ yum groupinstall xfce

Дополнительные настройки для Xfce

Если вы решили использовать Xfce, вам также потребуется изменить файл, который выполнялся при запуске сеанса VNC. Для этого отредактируйте файл:
/home/<user>/.vnc/xstartup
и измените запись exec (обычно строка 4) с etc/X11/xinit/xinitrc на startxfce4, как показано ниже:

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
vncserver -kill $DISPLAY

Соединение с клиентом VNC

Теперь, когда все настроено, мы можем попытаться подключиться к нашей службе VNC с помощью клиента VNC, такого как TightVNC, UltraVNC или RealVNC, и посмотреть, что произойдет. Не забудьте указать порт TCP 5901 (если вы следовали нашему руководству).

Возможные проблемы

Если ваш клиент не может установить работающее соединение VNC, вам необходимо проверить следующее:

1. Проблемы с соединением — Конфигурация брандмауэра: если вы видите всплывающие ошибки о том, что клиент не может подключиться к удаленному хосту, вам необходимо проверить конфигурацию вашей сети и брандмауэра, чтобы убедиться, что нет проблем с блокировкой, которые могут помешать клиенту подключиться к порту сервера TCP 5901.

2. Черный экран с мышью — обновление YUM или переустановка графического интерфейса: если вы видите черный экран с работающим указателем мыши, это, вероятно, означает, что ваше VNC-соединение работает нормально, но есть что-то, что мешает правильному запуску графического интерфейса рабочего стола. Для исправления: