Tutorial

Установка и настройка VNC в Ubuntu 20.04

Published on June 11, 2020
Русский
Установка и настройка VNC в Ubuntu 20.04

Введение

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

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

Предварительные требования

Для завершения данного обучающего модуля вам потребуется:

  • Один сервер Ubuntu 20.04, non-root user с правами администратора и брандмауэр, настроенный с помощью UFW. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 20.04.
  • Локальный компьютер с установленным клиентом VNC. Клиент VNC, который вы используете, должен поддерживать подключение через туннели SSH:
    • В Windows вы можете использовать TightVNC, RealVNC или UltraVNC.
    • В macOS вы можете использовать встроенную программу Screen Sharing или кросс-платформенное приложение, например RealVNC.
    • В Linux вы можете использовать разные решения, в том числе vinagre, krdc, RealVNC или TightVNC.

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

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

У вас существует много вариантов при выборе сервера VNC и среды рабочего стола. В этом обучающем модуле мы установим пакеты новейшей среды рабочего стола Xfce и пакет TightVNC, доступный в официальном репозитории Ubuntu. И Xfce, и TightVNC известны как легкие и быстрые системы. Благодаря этому наше соединение VNC будет стабильным и удобным даже при низкой скорости подключения к Интернету.

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

  1. sudo apt update

Теперь установите Xfce вместе с пакетом xfce4-goodies, который содержит несколько дополнительных возможностей для среды рабочего стола:

  1. sudo apt install xfce4 xfce4-goodies

Во время установки вам может быть предложено выбрать диспетчер отображения для Xfce по умолчанию. Диспетчер отображения — это программа, которая позволяет выбрать и выполнить вход в среду рабочего стола через графический интерфейс. Вы будете использовать Xfce только при подключении к клиенту VNC, и во время этих сеансов Xfce вы уже будете в системе как пользователь Ubuntu без прав root. Поэтому для данного обучающего модуля выбор диспетчера отображения не является принципиальным. Выберите любой и нажмите ENTER.

После завершения установки установите сервер TightVNC:

  1. sudo apt install tightvncserver

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

  1. vncserver

Вам будет предложено ввести и подтвердить пароль для удаленного доступа к системе:

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

Пароль должен иметь длину от 6 до 8 символов. Пароли длиной более 8 символов будут автоматически обрезаны.

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

Затем процесс создает необходимые файлы конфигурации по умолчанию и данные подключения для сервера. Дополнительно он запускает экземпляр сервера по умолчанию на порту 5901. Этот порт называется портом дисплея и учитывается VNC как :1. VNC может запускать несколько экземпляров на других портах дисплея, при этом порт 5902 учитывается как :2, порт 5903 как :3 и т. д.:

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

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

  1. vncpasswd

На этом этапе сервер VNC уже установлен и работает. Давайте настроим его для запуска Xfce и дадим доступ к серверу через графический интерфейс.

Шаг 2 — Настройка сервера VNC

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

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

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

  1. vncserver -kill :1

Результат должен выглядеть следующим образом, хотя вы увидите другой PID:

Output
Killing Xtightvnc process ID 17648

Прежде чем изменять файл xstartup, следует создать резервную копию исходного файла:

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Теперь создайте новый файл xstartup и откройте его в текстовом редакторе, например nano:

  1. nano ~/.vnc/xstartup

Затем добавьте в файл следующие строки:

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

Первая строка называется шебанг. В исполняемых простых текстовых файлах на платформах *nix шебанг указывает системе, какому интерпретатору передавать данный файл для исполнения. В данном случае мы передаем файл интерпретатору Bash. Это позволит выполнять каждую последующую строку в качестве команды.

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

После добавления этих строк сохраните и закройте файл. Если вы используете nano, нажмите CTRL+X, Y, затем ENTER.

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

  1. chmod +x ~/.vnc/xstartup

Затем запустите сервер VNC повторно:

  1. vncserver -localhost

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

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

Вывод будет выглядеть следующим образом:

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

После завершения настройки вы готовы подключаться к серверу VNC с вашего локального компьютера.

Шаг 3 — Безопасное подключение рабочего стола VNC

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

Создайте на локальном компьютере соединение SSH, которое безопасно перенаправляется в соединение localhost для VNC. Для этого можно ввести через терминал в Linux или macOS команду ssh:

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Вот что означают опции команды ssh:

  • -L 59000:localhost:5901: опция -L указывает, что данный порт на локальном компьютере (59000) нужно перенаправить на заданный хост и порт на сервере назначения (localhost:5901, т. е. порт 5901 на сервере назначения, который определяется как your_server_ip). Обратите внимание, что локальный порт, который вы указываете, выбран произвольно. Поскольку порт уже не связан с другой службой, вы можете использовать его в качестве форвардного порта для вашего туннеля.
  • -C: этот флаг активирует сжатие, что минимизирует потребление ресурсов и ускоряет процессы.
  • -N: эта опция указывает ssh, что вы не хотите выполнять какие-либо удаленные команды. Эта настройка полезна в случае, если вы планируете только перенаправлять порты.
  • -l sammy your_server_ip: опция -l позволяет определить пользователя, который должен войти в систему после подключения к серверу. Обязательно замените sammy и your_server_ip на имя вашего пользователя без прав root и IP-адрес вашего сервера.

Примечание. Эта команда создает туннель SSH для перенаправления информации с порта 5901 на вашем сервере VNC в порт 59000 на вашем локальном компьютере через порт 22 на каждом компьютере, порт SSH по умолчанию. Если вы выполнили предварительные требования из руководства по начальной настройке сервера Ubuntu 20.04, у вас добавится правило UFW, позволяющее подключения к вашему серверу через OpenSSH.

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

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

Нажатие правой клавишей мыши на верхнюю панель открывает опцию Change Settings

Найдите ветку Connection​​​ в меню слева окна реконфигурации PuTTY. Раскройте ветку SSH и нажмите на Tunnels. На экране Options controlling SSH port forwarding введите 59000​​​ в поле Source Port​​​ и localhost:5901 в поле Destination:

Пример конфигурации SSH-туннеля PuTTY

Затем нажмите кнопку Add, потом кнопку Apply для активации туннеля.

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

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

Подключение VNC к серверу Ubuntu 20.04 со средой рабочего стола Xfce

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

Менеджер файлов при подключении VNC к Ubuntu 20.04

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

Теперь вы можете настроить сервер VNC как службу systemd.

Шаг 4 — Запуск VNC в качестве системной службы

Настроив сервер VNC как службу systemd, вы можете запустить, остановить или перезапустить его, как и любую другую службу. Также вы можете использовать команды управления systemd, чтобы убедиться, что VNC запускается при загрузке сервера.

Сначала создайте новый файл блока с именем /etc/systemd/system/vncserver@.service:

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

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

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

/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.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

Команда ExecStartPre останавливает сервер VNC, если он уже запущен. Команда ExecStart запускает VNC и устанавливает 24-битную глубину цвета с разрешением 1280x800. Вы можете изменить эти параметры запуска в соответствии со своими потребностями. Также обратите внимание, что команда ExecStart еще раз включает опцию -localhost.

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

Затем сообщите системе о новом файле блока:

  1. sudo systemctl daemon-reload

Активируйте файл блока:

  1. sudo systemctl enable vncserver@1.service

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

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

  1. vncserver -kill :1

Запустите его, как любую другую службу systemd:

  1. sudo systemctl start vncserver@1

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

  1. sudo systemctl status vncserver@1

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

Output
● vncserver@1.service - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Main PID: 39795 (Xtightvnc) ...

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

Но со стороны клиента не будет никаких различий. Для повторного подключения еще раз запустите туннель SSH:

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

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

Заключение

Вы установили и запустили защищенный сервер VNC на своем сервере Ubuntu 20.04. Теперь вы сможете управлять файлами, программным обеспечением и настройками через удобный в использовании графический интерфейс, а также удаленно запускать графические приложения, в том числе браузеры.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean


Default avatar
finid

author


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
1 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

How can i uninstall this program?

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel