28
11月
2023
Запускаем VNC сервер x11vnc как сервис
1:20

Запускаем VNC сервер x11vnc как сервис

28 11月 2023 1:20

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

Введение

VNC - удаленный рабочий стол, аналогичный Radmin Server, только для Linux. Также VNC является более альтернативой XRDP.

Установка x11vnc и плагина VNC

sudo apt update && sudo apt install x11vnc remmina-plugin-vnc

Установка клиента для просмотра VNC

sudo apt install remmina 

1) Первый запуск программы - как приложения

1.1) Генерируем пароль

x11vnc -storepasswd

дважды вводим пароль (может отличаться от любого пароля и быть простым) и нажимаем "y"

пароль будет сохранен в файл /home/USERNAME/.vnc/passwd

1.2) Запускаем программу x11vnc как консольное приложение с целью проверки работы

Привожу готовую строку для запуска VNC X11 как приложения.

x11vnc -auth guess -forever -loop -noxdamage \
-repeat -rfbauth /home/USERNAME/.vnc/passwd \ 
-rfbport 5900

где -auth guess нужен для первого запуска без знания расположения Xauth файла
-forever -loop -repeat - для работы программы в бесконечном цикле
-rfbauth /home/USERNAME/.vnc/passwd - файл пароля для VNC
-rfbport 5900 - внешний порт, который программа будет слушать

Команду можно использовать как sh-файл.

#!/bin/sh
x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/vladimir/.vnc/passwd -rfbport 5900

После запуска начнется бесконечный цикл.

В другом окне вначале запускаем netstat с ключами, которые показывают порты в состоянии LISTENING

sudo netstat -plnt

Если порт 5900 присутствует в состоянии LISTENING, запускаем remmina и настраиваем плагин для просмотра VNC:

  • Новое соединение - тип VNC
  • Сервер - 127.0.0.1

Будет предложено ввести пароль VNC - вводим его. Будет показан Рабочий стол.

2) Преобразуем x11vnc в сервис

Нам потребуются знания переменных:

  • путь к файлу для ключа -auth
  • обозначение дисплея для ключа -display
  • путь к файлу пароля VNC нужно сменить на /root/....

2.1) Узнаем значение переменной для ключа -auth

Для этого нужно выполнить команду ps для вывода рабочих процессов с полными путями

sudo ps wwwwaux | grep auth

Ищем строчку, в которой упоминается -auth:

/usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp

Здесь я выделил жирным шрифтом путь для ключа -auth.
Теперь в строке вместо -auth guess можно указать -auth /var/run/lightdm/root/:0

2.2) Узнаем номер дисплея при той же опции -auth guess он будет написан ниже. Для порта 5900 используется дисплей :0 , поэтому в параметр -display :0, либо -display compname:0.

2.3) От пользователя su генерируем пароль в файле passwd, который будет сохранен в папку /root/.vnc:

sudo x11vnc -storepasswd

Enter VNC password:
Verify password:
Write password to /root/.vnc/passwd? [y]/n

На последний вопрос жмём Enter (по умолчанию - y).

3) Создаем в папке /usr/local/bin/ наш Shell-файл x11vnc-lightdm, который будет запускать программу x11vnc при старте x11vnc сервиса:

sudo nano /usr/local/bin/x11vnc-lightdm 

Переносим в текст файла настроенные ранее параметры x11vnc, в строку $OPTS.
Содержимое файла /usr/local/bin/x11vnc-lightdm:

#!/bin/bash
OPTS=
exec /usr/bin/x11vnc \
    $OPTS \
         -rfbauth /root/.vnc/passwd -rfbport 5900 \
         -forever -loop -bg -ncache -auth /var/run/lightdm/root/:0 -display :0

(либо "автомат": вместо -auth /var/run/lightdm/root/:0 можно указать -auth guess).

4) Создаём SystemD юнит файл для запуска сервиса x11vnc:

sudo nano /etc/systemd/system/x11vnc.service

Содержимое его следующее:

[Unit]
Description=VNC Server for X11
Requires=graphical.target
After=graphical.target

[Service]
ExecStart=/usr/local/bin/x11vnc-lightdm

[Install]
WantedBy=graphical.target

5) Включаем и запускаем новую службу x11vnc.service

sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service

6) Диагностика: проверяем состояние x11vnc.service и статус LISTENING на порту VNC 5900

sudo systemctl status x11vnc.service

Если служба работает (active) проверяем прослушивание ею порта 5900/TCP:

sudo netstat -plnt

При правильной настройке будет виден прослушиваемый порт 5900 LISTEN:

Активные соединения с интернетом (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State       PID/Program name    
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      35821/x11vnc

7) Первое подключение при помощи remmina к VNC на localhost

Первое подключение на том же ПК - проверочное.
В remmina создаем подключение типа VNC к locahost, и "Сохранить и подключиться".
Либо дважды щелкаем мышью по подключению VNC которое создали к серверу localhost.

Будет запрошен пароль сервера. Вводим пароль сервера, который задали от root (в пункте 2.3).

8) Открываем наружу порт 5900 (или свой) на персональном брандмауэре ufw

sudo ufw allow 5900/tcp

9) Теперь можно подключаться по VNC удалённо

Из дальнего ПК либо "пробрасываем" порт 5900 с роутера. Либо организуем VPN, тогда соединение remmina будет происходить на адрес ПК внутри локальной сети, например, 192.168.1.100.

Служба x11vnc.service стартует при загрузке ПК и не зависит от того, произведен ли вход пользователя в систему или нет.

На клиенте:
В remmina создал новое подключение.
(Внимание: минимальное разрешение экрана клиента - 1200 x 900 !).

vnc-connect

  • Название - Дом VNC
  • Протокол - Модуль VNC Remmina
  • Сервер - 192.168.99.11 (заменить на свой)
  • Пароль пользователя - пароль сервера VNC, который установили командой sudo x11vnc -storepasswd (пункт 2.3)
  • Глубина цвета - High Color (16 bit)
  • Качество - наилучшее (самое медленное)

Последнее действие: Сохранить и подключиться.



相关出版物