Установка TigerVNC на Ubuntu Server 18.04 LTS
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 • Конфигурация