Установка TigerVNC на Ubuntu Server 18.04 LTS

30.12.2019

Теги: CLILinuxUbuntuКонфигурацияНастройкаСервер

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

Установка Gnome

Тут есть три варианта — Vanilla Gnome (минимальный), Ubuntu Gnome Minimal Desktop (что-то среднее) и Ubuntu Gnome Desktop (полная установка):

$ sudo apt install gnome-session gnome-terminal
$ sudo apt install tasksel
$ sudo tasksel install ubuntu-desktop-minimal
$ sudo apt install ubuntu-gnome-desktop

Запускаем службу GDM (Gnome Display Manager) и добавляем ее в автозагрузку:

$ sudo systemctl start gdm
$ sudo systemctl enable gdm

Установка TigerVNC

Установим VNC-сервер и VNC-клиент:

$ sudo apt install tigervnc-standalone-server tigervnc-common \
> tigervnc-xorg-extension tigervnc-viewer

Запускаем VNC-сервер:

$ vncserver

You will require a password to access your desktops.

Password: пароль
Verify: пароль
Would you like to enter a view-only password (y/n)? n

New 'ssh-server:1 (evgeniy)' desktop at :1 on machine ssh-server

Starting applications specified in /usr/bin/xterm
Log file is /home/evgeniy/.vnc/ssh-server:1.log

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

При первом запуске vncserver предложит ввести пароль, который можно будет использовать для подключения к компьютеру, а также ввести пароль для подключения в режиме «только просмотр». Обратите внимание, что утилиту необходимо запускать от имени обычного пользователя, а не суперпользователя. Кроме того, будет создана конфигурация в каталоге ~/.vnc.

Чтобы изменить пароль для подключения к серверу — используйте утилиту vncpasswd.

Остановим сервер, потому что первый запуск нужен только для пароля и конфигурации:

$ vncserver -kill :1

Подключение к серверу

Теперь запустим VNC-сервер с рабочем окружением в виде терминала:

$ vncserver -xstartup /usr/bin/xterm

Вариант подключения нам был предложен в сообщении от vncserver (см. выше):

$ vncviewer -SecurityTypes VncAuth -passwd /home/evgeniy/.vnc/passwd :1

Мы указываем тип авторизации и передаем файл с паролем, который создали при первом запуске VNC сервера.

Посмотреть список запущенных серверов можно командой:

$ vncserver -list

TigerVNC server sessions:

X DISPLAY       PROCESS ID
:1              8193

Чтобы завершить запущенный VNC-сервер — используем опцию kill и идентификатор дисплея:

$ vncserver -kill :1

Теперь запустим vncserver с рабочем окружением в виде браузера и с разрешением экрана 1024x768:

$ vncserver -geometry 1024x768 -xstartup /usr/bin/firefox

И подключимся к запущенному серверу:

$ vncviewer -SecurityTypes VncAuth -passwd /home/evgeniy/.vnc/passwd :1

Также можно запустить vncviewer без параметров, тогда утилита откроет окно, где нужно ввести ip-адрес машины (на которой запущен сервер) + номер дисплея или порта + пароль:

Рабочее окружение Gnome

Мы запускали vncserver с рабочем окружением в виде терминала и браузера, но теперь нам нужно полноценное рабочее окружение Gnome. Чтобы его настроить, создаем файл ~/.vnc/xstartup со следующим содержимым:

#!/bin/sh
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
dbus-launch --exit-with-session gnome-session &

Это скрипт, который запускает рабочее окружение Gnome, но можно запускать и другие окружения. Теперь при запуске vncserver опция xstartup не нужна.

$ vncserver

И подключимся к запущенному серверу:

$ vncviewer -SecurityTypes VncAuth -passwd /home/evgeniy/.vnc/passwd :1

Подключение с удаленного хоста

Перед подключением надо открыть несколько портов на той машине, где установлен VNC-сервер, чтобы фаервол не блокировал подключение:

$ sudo ufw allow 5901:5903/tcp
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
----------------------------------------------------
5901:5903/tcp              ALLOW IN    Anywhere
5901:5903/tcp (v6)         ALLOW IN    Anywhere (v6)

А сам VNC-сервер должен быть запущен с опцией -localhost no, иначе он не будет принимать подключения с других хостов, а только с localhost:

$ vncserver -localhost no -geometry 1200x600

На другом компьютере, с которого будем подключаться к VNC-серверу, используем приложение Remmina:

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

При подключении VNC не использует безопасные протоколы. Давайте создадим SSH-туннель для безопасного подключения к серверу (для этого на машине с VNC-сервером должен быть установлен SSH-сервер):

$ ssh -L 5901:127.0.0.1:5901 evgeniy@192.168.110.16
evgeniy@192.168.110.16's password: пароль
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-72-generic x86_64)

Теперь при подключении к VNC-серверу указываем не 192.168.110.16:5901, а localhost:5901. Мы как бы подключаемся к локальной машине, но соединение будет проброшено через ssh-туннель на машину с VNC-сервером.

При этом на машине с установленным VNC-сервером должен быть открыт 22-ой порт:

$ sudo ufw allow ssh
Правило добавлено
Правило добавлено (v6)
$ sudo ufw status verbose
Состояние: активен
Журналирование: on (low)
По умолчанию: deny (входящие), allow (исходящие), disabled (маршрутизированные)
Новые профили: skip

В                          Действие    Из
----------------------------------------------------
22/tcp                     ALLOW IN    Anywhere                  
22/tcp (v6)                ALLOW IN    Anywhere (v6)
5901:5903/tcp              ALLOW IN    Anywhere
5901:5903/tcp (v6)         ALLOW IN    Anywhere (v6) 

Держать открытыми порты 5901:5903 больше не нужно, так что закрываем. А VNC-сервер теперь можно запускать без ключа -localhost no:

$ sudo ufw delete allow 5901:5903/tcp
$ vncserver -geometry 1200x600

Создание файла сервиса

Теперь нужно настроить сервер VNC как сервис Systemd, чтобы он запускался при загрузке системы. Для этого создаем новый unit-файл:

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

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

[Unit]
Description=Start TigerVNC server at startup
After=syslog.target network.target

[Service]
Type = forking
User = evgeniy
Group = evgeniy
WorkingDirectory = /home/evgeniy
PIDFile = /home/evgeniy/.vnc/%H:%i.pid
ExecStartPre = -/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart = /usr/bin/vncserver -geometry 1200x600 :%i
ExecStop = /usr/bin/vncserver -kill :%i

[Install]
WantedBy=default.target

Команда ExecStartPre останавливает VNC, если сервис уже запущен. Команда ExecStart запускает VNC-сервер, а команда ExecStop — останавливает. Давайте сообщим системе про новый unit-файл:

$ sudo systemctl daemon-reload

Добавляем три службы в автозагрузку:

$ sudo systemctl enable vncserver@1.service
$ sudo systemctl enable vncserver@2.service
$ sudo systemctl enable vncserver@3.service

Теперь, после загрузки системы, VNC-сервер будет прослушивать три порта: 5901, 5902 и 5903. И мы можем подключиться на любом из них. Кроме того, мы можем вручную запустить или остановить VNC-сервер, как любую другую службу:

$ sudo systemctl start vncserver@1.service
$ sudo systemctl start vncserver@2.service
$ sudo systemctl start vncserver@3.service
$ sudo systemctl stop vncserver@1.service
$ sudo systemctl stop vncserver@2.service
$ sudo systemctl stop vncserver@3.service

При подключении к VNC-серверу нужно на клиенте создать три ssh-туннеля:

$ ssh -L 5901:127.0.0.1:5901 -L 5902:127.0.0.1:5902 -L 5903:127.0.0.1:5903 evgeniy@192.168.110.16
evgeniy@192.168.110.16's password: пароль
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-37-generic x86_64)

Но такая команда вряд ли будет нужна, потому как три экземпляра VNC-сервера нужны, чтобы можно было одновременно подключиться с трех разных машин. А перед каждым подключением — создать ssh-туннель, чтобы пропускать через него tcp-соединение на порт 5901, 5902, 5903.

Поиск: CLI • Linux • Ubuntu • Настройка • Сервер • VNC • Клиент • TightVNC • Конфигурация

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.