no-style

Debian + tigervnc + xfce

tigervnc + debian + xfce
Всё началось одним летним вечером. В распоряжении появился слабенький ноут на котором нет картинки. Толи дисплей, толи видяха пришли в негодность. Хозяин девайса уже хотел его выкидывать, но не тут то было. Вдохнули буквально новую жизнь в данный аппарат и теперь он служит верой и правдой выполняя возложенные на него задачи - рассматривать которые в пределах этой статьи мы не будем, зато рассмотрим как поставить VNC сервер на Linux (debian)


Установка Xfce

Тут всё просто. Ставим необходимые пакеты

sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

Установка всех пакетов займет какое то количество времени и напрямую зависит от мощности вашего сервера.







Установка Tigervnc

В дебиановских репах есть как минимум 3 известных мне VNC сервера:

  • x11vnc
  • TightVNC
  • TigerVNC

У каждого из них есть свои плюсы и минусы. Ставим TigerVNC:

sudo apt install tigervnc-standalone-server tigervnc-common lightdm

Если всплывёт сообщение то выбираем lightdm

lightdm


Как только установка будет завершена, необходимо выполнить команду vncserver которая создаст фаил конфигурации. Не используем при этом sudo!

vncserver

Нам предложат ввести и подтвердить пароль. Так же спросят про view-only пароль в котором у пользователя нет возможности управлять через клавиатуру и мышь - ставим по желанию.


vncserver

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

Выполняя команду vncserver создаётся конфигурационный фаил в директории ~/.vnc если что то пойдёт не так - просто удалите эту папку и начните настройку с команды vncserver


Обратите внимание на :1 после хостнейма. Данная информация поможет нам определить порт на котором работает VNC сервер. В данном примере сервер работает на TCP порту 5901 (5900+1). Если создать ещё 1 инстанс VNC сервера то он запуститься на следующем свободном порту. например :2, запуститься на порту 5902 (5900+2).

Перед тем как приступить к следующему шагу - остановим VNC инстанс используя команду vncserver с опцией -kill и номером сервера в качестве аргумента. В нашем случае сервер запущен на порту 5901 (:1), поэтому остановим его командой:

vncserver -kill :1






Конфигурация VNC сервера

После того как мы успешно установили Xfce и TigerVNC нам необходимо их сконфигурировать для правильной работы. Открываем

nano ~/.vnc/xstartup

И приводим к виду:

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4

Сохраняем скрипт и так же даём ему необходимые права для корректной работы

chmod u+x ~/.vnc/xstartup

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

nano ~/.vnc/config

Пример параметров

geometry=1920x1080
dpi=96
rfbport 5901






Конфигурация Systemd

Данный шаг позволит нам иметь возможность легко стартовать, останавливать и перезагружать службу VNC сервера.

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

Приводим к виду

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=simple
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 -geometry 1440x900 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill :%i
Restart=on-failure

[Install]
WantedBy=multi-user.target

В графе User= обязательно впишите своего пользователя от которого будет запускаться процесс VNC сервера.


Теперь нам нужно оповестить Systemd о новой службе для этого выполняем

sudo systemctl daemon-reload

Разрешаем её запуск

sudo systemctl enable vncserver@1.service

Запускаем

sudo systemctl start vncserver@1.service

Смотрим статус

sudo systemctl status vncserver@1.service

vncserver systemd service





Подключаемся к VNC

Из коробки у нас к сожалению отсутствует какое либо шифрование и это может стать предметом для обсуждения mitm атак или сниффинга пакетов.

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


SSH туннель на Linux / BSD / Mac OS:

ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address

После ввода данной команды у нас попросят пароль. Не забудьте вписать имя вашего пользователя и ip адрес сервера. Теперь в VNC клиенте необходимо изменить "удалённый ip адрес сервера:port" на "localhost:port" т.к. мы хотим подключаться по зашифрованному соединению через ssh туннель.


SSH туннель на Windows: PuTTY

Открываем PuTTY, вписываем ip адрес сервера. Переходим в раздел Connection > SSH > Tunnels. Вписываем порт(5901) VNC сервера в поле Source Port. А в поле Destination вписываем server_ip_address:5901 и нажимаем кнопку add


putty ssh port forwarding

Возвращаемся в раздел Session вписываем любое угодное название для этой сессии и сохраняем тем самым освобождаем себя от необходимости вводить каждый раз всё то что мы вводили до этого. Теперь весь процесс сводиться к тому чтобы открыть PuTTY, выбрать нашу сессию и подключиться к ней.


SSH туннель на Windows: Bitvise SSH Client

Открываем настройки подключения секцию C2S (client to server) и делаем как на скрине ниже


Bitvise SSH tunnel

Нам остаётся лишь подключиться к нашему VNC серверу через VNC клиент, я обычно использую VNC Viewer


Вводим как на скрине

VNC Viewer Settings





Статичный порт VNC

Если вы хотите чтобы VNC всегда запускался на одном и том же порту, добавьте значение --rfbport ПОРТ в ~/.vnc/config либо в саму команду запуска в /etc/systemd/system/vncserver@.service например вот так

ExecStart=/usr/bin/vncserver :%i -geometry 1440x900 --rfbport 10000 -alwaysshared -fg






Результат

vnc successful connection







Автологин

Несмотря на то что на работу самого VNC это никак не повлияет - бывает полезно сделать автоматический логин. Чтобы не вводить свой логин и пароль на самом устройстве.

Для этого необходимо отредактировать фаил: /etc/lightdm/lightdm.conf

Внеся изменения в эти строки:

[Seat:*]
autologin-user=$USER
autologin-user-timeout=0

Комментарии