ZaLinux.ru

Как настроить и использовать сервер TigerVNC в Linux

Как установить TigerVNC

Установка в Debian, Kali Linux, Linux Mint, Ubuntu и их производные:

sudo apt install tigervnc-standalone-server tigervnc-viewer tigervnc-xorg-extension

Для установки в Arch Linux, BlackArch и их производные:

sudo pacman -S tigervnc

Настройка сервера TigerVNC

Для работы сервера TigerVNC требуется файл ~/.vnc/xstartup. Если этот файл не существует, то TigerVNC пытается его создать. В моих тестах на разных дистрибутивах этот файл обычно приходилось создавать вручную.

Содержимое файла ~/.vnc/xstartup зависит от вашего окружения рабочего стола! То есть для Cinnamon, XFCE, GNOME и т. д. файлы будут разные!

Дело в том, что TigerVNC не используют текущую X сессию, а создаёт новую. Благодаря такому подходу можно, например, для пользователей выполнивших вход перед компьютером и пользователей, подключившихся по VNC, запускать различные окружения рабочего стола (при условии, что они установлены). Настройка запуска сеанса рабочего стола для VNC выполняется в файле ~/.vnc/xstartup. Общая минимальная структура файла ~/.vnc/xstartup следующая:

#!/bin/bash

PATH=/usr/bin:/usr/sbin
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec ЗАПУСК &

Вместо слова ЗАПУСК должен быть указан исполнимый файл, запускающий X сессию.

  • Для Cinnamon: cinnamon-session-cinnamon
  • Для XFCE: startxfce4
  • Для GNOME: /usr/bin/gnome-session
  • Для Kodi: kodi-standalone
  • Для Mate: mate-session
  • Для lxqt: startlxqt

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

ls /usr/share/xsessions/

В этой папке вы увидите файлы с расширением .desktop, например:

cinnamon2d.desktop  cinnamon.desktop  gnome.desktop  gnome-xorg.desktop  kodi.desktop

Откройте с именем интересующего вас окружения рабочего стола и найдите там строку, которая начинается на «Exec», например для файла xfce.desktop:

Exec=cinnamon-session-cinnamon

Следовательно, вместо слова «ЗАПУСК» в файле ~/.vnc/xstartup нужно вписать «cinnamon-session-cinnamon». Тогда файл ~/.vnc/xstartup будет иметь следующее содержимое:

#!/bin/bash

PATH=/usr/bin:/usr/sbin
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec cinnamon-session-cinnamon &

Как создать пароль для TigerVNC сервера

Используйте утилиту:

vncpasswd

После неё можно указать файл, в который должен быть сохранён пароль, в противном случае пароль будет сохранён в файл по умолчанию, то есть в $HOME/.vnc/passwd.

После ввода пароля программа спросит:

Would you like to enter a view-only password (y/n)?

То есть хотите ли вы создать пароль для режима «только просмотр» - если хотите, то введите «y», если не хотите, то введите «n».

Запуск сервера TigerVNC

Запуск выполняется любой из следующих команд:

vncserver
tigervncserver

Пароль для аутентификации на сервере будет взят из файла $HOME/.vnc/passwd. Вы можете указать другой файл с паролем, с помощью любой из следующих опций (они все являются псевдонимами друг друга):

  • -PasswordFile ФАЙЛ
  • -passwd ФАЙЛ
  • -rfbauth ФАЙЛ

Будет выведено примерно следующее:

Cleaning stale pidfile '/home/mial/.vnc/HackWare:1.pid'!

New 'HackWare:1 (mial)' desktop at :1 on machine HackWare

Starting applications specified in /home/mial/.vnc/xstartup
Log file is /home/mial/.vnc/HackWare:1.log

Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/mial/.vnc/passwd :1 to connect to the VNC server.

Может показаться, что программа завершила работу — но это не так, процесс переведён в фон. В данном сообщении сказано, что новый рабочий стол создан на дисплее с номером :1, а журнал сохраняется в файл /home/mial/.vnc/HackWare:1.log.

Чтобы убедиться, что сервер действительно работает, проверим, какие порты прослушиваются (смотрите также «Как проверить открытые порты на своём компьютере»):

ss -tulp

Как можно увидеть, прослушивается порт 5901, который также считается стандартным для VNC.

Как сделать так, чтобы TigerVNC прослушивал не только 127.0.0.1

По умолчанию TigerVNC прослушивает только интерфейс с IP адресом 127.0.0.1, это LOOPBACK (петлевой) адрес, то есть к VNC серверу можно подключиться только с этого же самого компьютера, либо через SSH туннель. Как именно использовать SSH туннель для подключения к TigerVNC будет показано чуть ниже.

Кроме этого, имеется опция -localhost, которая может принимать значение «yes» или «no». Если указать -localhost no, то TigerVNC сервер будет прослушивать любые входящие подключения, а не только локальные:

vncserver -localhost no

Как поменять порт TigerVNC сервера

Прослушиваемый TCP порт для RFB протокола можно поменять опцией -rfbport ПОРТ.

Порт для внутреннего HTTP сервера устанавливается опцией -httpPort.

Как настроить выключение TigerVNC после отключения клиента

Для этого есть две опции:

  • -autokill: завершает работу VNC сервера после завершения X сессии
  • -fg: не переводит процесс в статус демона и завершает работу VNC сервера после завершения X сессии

Как использовать SSL сертификаты в TigerVNC для шифрования трафика VNC сессий

Поскольку TLS/SSL шифрование защищает VNC трафик от прослушивания, то нет особого смысла использовать одновременно SSH туннель (который также хорошо зашифрован) и SSL сертификаты. По этой причине при генерации сертификатов в качестве IP адреса указывайте внешний, а не 127.0.0.1.

На сервере сгенерируйте сертификаты (замените оба вхождения «192.168.0.100» на IP-адрес сервера — это может быть как локальный, так и глобальный IP):

openssl req -x509 -newkey rsa -days 365 -nodes -keyout vnc-server-private.pem -out vnc-server.pem -subj '/CN=192.168.0.100' -addext "subjectAltName=IP:192.168.0.100"

Скопируйте файл с сертификатом vnc-server.pem на компьютер с просмотрщиком VNC — то есть клиентам, которые будут подключаться — укажите в клиентском приложении путь до файла сертификата:

На сервере же используйте опцию -X509Key с файлом vnc-server-private.pem и опцию -X509Cert с файлом vnc-server.pem.

По умолчанию в качестве типов безопасности предлагается только VncAuth. С помощью опции -SecurityTypes можно указать любые типы шифрования из списка: None, VncAuth, Plain, TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain.

Для SSL сертификтов (то есть для опций -X509Key и -X509Cert) используются типы безопасности X509None, X509Vnc и X509Plain. Также нужно указать VncAuth, чтобы была возможность выполнять VNC аутентификацию.

Таким образом, собираем все необходимые опции в одну команду:

vncserver -localhost no -X509Key vnc-server-private.pem -X509Cert vnc-server.pem -SecurityTypes X509Vnc,X509Plain,VncAuth

Управление и остановка процессом TigerVNC

Чтобы вывести список запущенных рабочих столов с VNC выполните следующую команду:

vncserver -list

Будет выведено:

Где:

  • X DISPLAY # - номер дисплея
  • RFB PORT # - номер прослушиваемого порта
  • PROCESS ID - идентификатор процесса

Чтобы закрыть дисплей с любым номером, используйте опцию -kill, к примеру, чтобы закрыть дисплей :1:

vncserver -kill :1

Имеется утилита vncconfig, которая с использованием опции [-set] Xvnc-param=value позволяет изменять опции запущенного VNC сервера на лету.

Чтобы вывести список опций VNC сервера укажите флаг -list:

vncconfig -display :1 -list

Обратите внимание, что также нужно использовать опцию -display после которой указывается номер дисплея.

Как настроить автоматический запуск сервера TigerVNC

Создайте файл /etc/systemd/system/vncserver@.service:

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

Скопируйте в этот файл

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

[Service] 
Type=forking
User=mial
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -localhost no :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install] 
WantedBy=multi-user.target

Обратите внимание на строку User=mial — впишите в неё имя вашего пользователя вместо mial.

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

Теперь перезагрузите конфигурацию менеджера systemctl для чтения свежесозданного файла юнита следующим образом:

sudo systemctl daemon-reload

Для запуска службы VNC выполните команду:

sudo systemctl start vncserver@1

Обратите внимание, что вместо 1 вы можете указывать любой номер дисплея.

Для проверки статуса службы:

systemctl status vncserver@1

Для добавления службы в автозагрузку:

sudo systemctl enable vncserver@1

Для остановки службы:

sudo systemctl stop vncserver@1

Для удаления службы из автозагрузки:

sudo systemctl disable vncserver@1

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *