В руководстве будут рассмотрены шаги установки и настройки VNC сервера на систему Ubuntu 18.04. Также будет дан способ надежного подключения к серверу VNC через SSH туннель.
Virtual Network Computing (VNC) системой удаленного доступа, что позволяет управлять компьютером, расположенном на расстоянии. Это открытая альтернатива протоколу удаленного рабочего стола Microsoft (RDP).
Подготовка к установке VNC
Прежде чем продолжить чтение, убедитесь, что вы вошли в систему как пользователь с привилегиями sudo т.е. root пользователь.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Установка рабочего стола VNC на Ubuntu
На большинстве серверов не установлена среда рабочего стола, поэтому мы начнем с установки ее облегченной версии.
В репозиториях Ubuntu есть несколько видов сред рабочего стола (DE). В данном руководстве мы будем устанавливать Xfce. Это быстрая, стабильная и легкая среда рабочего стола, что делает ее идеальной для использования на удаленном сервере.
Для начала обновите систему через:
1 2 |
sudo apt update sudo apt upgrade |
Затем выполните следующую команду для установки Xfce на ваш сервер:
1 |
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils |
Время, что уходит на установку пакетов Xfce, зависит от особенностей вашего оборудования и системы.
Создание VNC пользователя
Для сохранения надежности и производительности нужно создать отдельную связь пользователя vnc_user
. Здесь можно использовать уже существующего пользователя.
Если вы запустите рабочий стол от пользователя root, тогда возникнут проблемы с Google Chrome и другим софтом который откажется работать с root правами. Запускайте VNC сервер НЕ НА ROOT пользователе! Создайте другого пользователя и использует его.
Создадим пользователя vnc_user
при помощи следующей команды. Можете сохранить свое имя пользователя, выбор за вами. Вас попросят ввести новый пароль и указать детали пользователя. Введите новый пароль для пользователя (пароль для подключения к VNC укажите ниже, тут отдельная часть пользователя). Указание других деталей можете пропустить, нажав ENTER.
1 |
adduser vnc_user |
Установите sudo
, используя следующую команду. Пользователя vnc_user
потребуется добавить в группу sudo
.
1 |
apt-get install sudo |
Теперь добавьте пользователя vnc_user
в группу sudo
. Таким образом, у пользователя vnc_user
будет разрешение действовать от имени пользователя root
, а также выполнять команды root
.
1 2 |
$ gpasswd -a vnc_user sudo Adding user vnc_user to group sudo |
Переключитесь на пользователя vnc для дальнейших операций.
1 |
su - vnc_user |
Установка VNC сервера
В репозиториях Ubuntu также есть несколько серверов VNC: TightVNC, TigerVNC и x11vnc. У каждого VNC сервера есть свои сильные и слабые стороны с точки зрения скорости и безопасности.
Мы будем устанавливать TigerVNC, который предоставляет высокопроизводительный VNC сервер.
Введите следующую команду для установки TigerVNC на ваш сервер Ubuntu:
1 |
sudo apt install tigervnc-standalone-server tigervnc-common |
Следующим шагом после установки сервера VNC является запуск команды vncserver
. Она создаст начальную конфигурацию и попросит установит новый пароль. При выполнении следующей команды не используйте sudo:
1 |
vncserver -localhost no |
Почему добавлен флаг -localhost no?
Это личное наблюдение автора. Я ознакомился с самыми популярными статьями на тему установки и настройки VNC, но нигде не упомянут данный флаг. Если его не указать, то вы не сможете подключится к вашему VPS иди выделенному серверу.
Вы будете получать такие ошибки:
- vnc connection closed;
- vnc connection refused.
Это из соображений безопасности. Выходит, что подключаться к другому серверу можно только по локальной сети. В случае если вы хотите подключится к выделенному серверу, то ставьте
-localhost no
и хороший пароль т.к. ВАШ СЕРВЕР БУДЕТ АТАКОВАН ИЗ ВНЕ. Мы не ошиблись в утверждении «БУДЕТ«, ваш IP и порт5901
будут видны на весь мир и бот-нет уже начнет подбирать пароль к вашему VNC. В своих паролях используйся символы, буквы разных регистров и цифры. Держите эту информацию в голове. Можете воспользоваться онлайн генерацией пароля по данной ссылке указал длину 8 и кликнув на все галочки.
Вам будет предложено ввести и подтвердить пароль (максимум 8 символов должен содержать пароль), а также указать, следует ли установить его в качестве пароля только для просмотра. Если вы решите установить пароль только для просмотра, пользователь не сможет работать с VNC при помощи мыши и клавиатуры.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n /usr/bin/xauth: file /home/vnc_user/.Xauthority does not exist New 'server2.linuxize.com:1 (linuxize)' desktop at :1 on machine server2.linuxize.com Starting applications specified in /etc/X11/Xvnc-session Log file is /home/vnc_user/.vnc/server2.linuxize.com:1.log Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/vnc_user/.vnc/passwd :1 to connect to the VNC server. |
При первом запуске команды
vncserver
она создаст и сохранит файл пароля в директории ~/.vnc
. Если такой директории нет, она будет создана.
Обратите внимание на :1
после имени хоста в выводе выше. Знак указывает на номер порта дисплея, на котором запущен сервер vnc. В нашем случае сервер запущен на TCP порту 5901
(5900 + 1). Если вы создадите второй экземпляр при помощи vncserver
, он будет работать на следующем свободном порту, то есть :2
. Это означает, что сервер запущен на порту 5902
(5900 + 2).
При работе с серверами VNC не забывайте, что
:X
— это порт дисплея, который отсылается к5900+X
.
Перед переходом к следующему шагу остановите все VNC сессии, используя команду vncserver
с параметром -kill
и номером сервера в качестве аргумента. В нашем случае сервер запущен на порту 5901 (:1
), поэтому мы остановим его следующим образом:
1 |
vncserver -kill :1 |
1 |
Killing Xtigervnc process ID 7264... success! |
Настройка VNC сервера
Теперь на сервере установлены Xfce и TigerVNC, и нам нужно настроить TigerVNC для работы с Xfce. Далее требуется создать следующий файл:
1 |
nano ~/.vnc/xstartup |
1 2 3 4 |
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4 |
Сохраните и закройте файл. Команды выше будут автоматически выполняться при запуске или перезапуске сервера TigerVNC.
У файла ~/.vnc/xstartup
также должно быть разрешение на выполнение. Запустите следующую chmod команду, чтобы убедиться, что разрешения верны:
1 |
chmod u+x ~/.vnc/xstartup |
Если нужно передать дополнительные параметры на сервер VNC, можно создать файл config
и добавить по одному параметру в строку. Вот пример:
1 2 |
geometry=1920x1084 dpi=96 |
Создание Systemd unit файла
Сейчас мы создадим Systemd unit файл, который позволит легко запускать, останавливать или вновь запускать сервис VNC по мере необходимости, как и другие сервисы systemd.
Откройте текстовый редактор, скопируйте и вставьте туда следующую конфигурацию. Не забудьте поменять имя пользователя в строке 7 на ваше.
1 |
sudo nano /etc/systemd/system/vncserver@.service |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple User=vnc_user PAMName=login PIDFile=/home/%u/.vnc/%H%i.pid ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :' ExecStart=/usr/bin/vncserver :%i -localhost no -geometry 1440x900 -alwaysshared -fg ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target |
Сохраните и закройте файл.
Сообщите systemd, что вы создали новый unit файл:
1 |
sudo systemctl daemon-reload |
На следующем шаге делаем unit файл доступным с помощью следующей команды:
1 |
sudo systemctl enable vncserver@1.service |
Число 1
после знака @
определяет порт дисплея, на котором будет работать сервис VNC. Это означает, что сервер VNC будет действовать на порту 5901
, как и говорилось в предыдущем разделе.
Запустите сервис VNC, выполнив:
1 |
sudo systemctl start vncserver@1.service |
Проверьте, что сервис успешно запущен:
1 |
sudo systemctl status vncserver@1.service |
1 2 3 4 5 6 7 8 |
● vncserver@1.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@.service; indirect; vendor preset: enabled) Active: active (running) since Thu 2018-08-16 19:05:54 UTC; 4s ago Process: 9893 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 9900 (vncserver) Tasks: 0 (limit: 507) CGroup: /system.slice/system-vncserver.slice/vncserver@1.service ‣ 9900 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1440x900 -alwaysshared -fg |
Подключение к серверу VNC
VNC не является зашифрованным протоколом, его пакеты могут быть перехвачены. Оптимальнее всего создать туннель SSH, который будет безопасно перенаправлять трафик с вашего локального компьютера и порт 5901 на сервер на том же порту.
Установка SSH туннеля на Linux и macOS
Если вы используете Linux, macOS или любую другую операционную систему на основе Unix, вы можете легко создать SSH туннель при помощи следующей команды:
1 |
ssh -L 5901:IP-Вашего-Сервера:5901 -N -f -l username server_ip_address |
Вам предложат ввести пароль пользователя.
Не забудьте поменять username
и IP-Вашего-Сервера
на свое имя пользователя и IP адрес сервера.
Установка SSH туннеля на Windows
Пользователи Windows могут установить SSH-туннель при помощи клиента PuTTY SSH.
Откройте Putty и введите свой IP адрес в поле Host name or IP address
.
Под меню Connection
откроется SSH
, где нужно выбрать Tunnels
. Введите порт (5901
) VNC сервера в поле Source Port
, а также введите server_ip_address:5901
в поле Destination
, после чего нажмите кнопку Add
, как показано на изображении ниже:
Вернитесь назад на страницу Session
и сохраните настройки, чтобы их не нужно было заново вводить каждый раз. Теперь все, что вам нужно сделать, так это выбрать сохраненную сессию и залогиниться на удаленный сервер, нажав кнопку Open
.
Подключение при использовании Vncviewer
После настройки SSH-туннеля можно открыть Vncviewer и подключиться к VNC серверу по адресу localhost: 5901
. Вы можете использовать любую программу просмотра VNC: TigerVNC, TightVNC, RealVNC, UltraVNC Vinagre или VNC Viewer для Google Chrome. В данном примере мы будем использовать TigerVNC. Откройте программу просмотра VNC, введите localhost:5901
и нажмите кнопку Connect
. Вместо localhost
введите IP вашего сервера.
Введите ваш пароль (тот из 8 символов) который вы ввели при первом запуске VNC сервера. После этого откроется рабочий стол Xfce по умолчанию. Он будет выглядеть примерно следующим образом:
Теперь вы можете действовать на удаленном рабочем столе XFce, используя клавиатуру и мышь.
Заключение
Теперь у вас есть запущенный сервер VNC. Вы можете легко управлять сервером с локального настольного компьютера, используя простой графический интерфейс.
Чтобы настроить VNC сервер на запуск отображения для нескольких пользователей, создайте начальную конфигурацию и задайте пароль через команду vncserver
. Вам также нужно создать новый файл сервиса, используя другой порт.
Если у вас есть какие-либо вопросы, оставляйте комментарии.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»