Как настроить и использовать сервер TigerVNC в Linux
Как установить TigerVNC
Установка в Debian, Kali Linux, Linux Mint, Ubuntu и их производные:
Для установки в Arch Linux, BlackArch и их производные:
Настройка сервера TigerVNC
Для работы сервера TigerVNC требуется файл
/.vnc/xstartup. Если этот файл не существует, то TigerVNC пытается его создать. В моих тестах на разных дистрибутивах этот файл обычно приходилось создавать вручную.
/.vnc/xstartup зависит от вашего окружения рабочего стола! То есть для Cinnamon, XFCE, GNOME и т. д. файлы будут разные!
Дело в том, что TigerVNC не используют текущую X сессию, а создаёт новую. Благодаря такому подходу можно, например, для пользователей выполнивших вход перед компьютером и пользователей, подключившихся по VNC, запускать различные окружения рабочего стола (при условии, что они установлены). Настройка запуска сеанса рабочего стола для VNC выполняется в файле
/.vnc/xstartup. Общая минимальная структура файла
Вместо слова ЗАПУСК должен быть указан исполнимый файл, запускающий X сессию.
- Для Cinnamon: cinnamon-session-cinnamon
- Для XFCE: startxfce4
- Для GNOME: /usr/bin/gnome-session
- Для Kodi: kodi-standalone
- Для Mate: mate-session
- Для lxqt: startlxqt
Вы можете самостоятельно узнать исполнимый файл для любого окружения рабочего стола, установленного в вашей системе, выполнив
В этой папке вы увидите файлы с расширением .desktop, например:
Откройте с именем интересующего вас окружения рабочего стола и найдите там строку, которая начинается на «Exec», например для файла xfce.desktop:
Следовательно, вместо слова «ЗАПУСК» в файле
/.vnc/xstartup нужно вписать «cinnamon-session-cinnamon». Тогда файл
/.vnc/xstartup будет иметь следующее содержимое:
Как создать пароль для TigerVNC сервера
После неё можно указать файл, в который должен быть сохранён пароль, в противном случае пароль будет сохранён в файл по умолчанию, то есть в $HOME/.vnc/passwd.
После ввода пароля программа спросит:
То есть хотите ли вы создать пароль для режима «только просмотр» — если хотите, то введите «y», если не хотите, то введите «n».
Запуск сервера TigerVNC
Запуск выполняется любой из следующих команд:
Пароль для аутентификации на сервере будет взят из файла $HOME/.vnc/passwd. Вы можете указать другой файл с паролем, с помощью любой из следующих опций (они все являются псевдонимами друг друга):
- -PasswordFile ФАЙЛ
- -passwd ФАЙЛ
- -rfbauth ФАЙЛ
Будет выведено примерно следующее:
Может показаться, что программа завершила работу — но это не так, процесс переведён в фон. В данном сообщении сказано, что новый рабочий стол создан на дисплее с номером :1, а журнал сохраняется в файл /home/mial/.vnc/HackWare:1.log.
Чтобы убедиться, что сервер действительно работает, проверим, какие порты прослушиваются (смотрите также «Как проверить открытые порты на своём компьютере»):
Как можно увидеть, прослушивается порт 5901, который также считается стандартным для VNC.
Как сделать так, чтобы TigerVNC прослушивал не только 127.0.0.1
По умолчанию TigerVNC прослушивает только интерфейс с IP адресом 127.0.0.1, это LOOPBACK (петлевой) адрес, то есть к VNC серверу можно подключиться только с этого же самого компьютера, либо через SSH туннель. Как именно использовать SSH туннель для подключения к TigerVNC будет показано чуть ниже.
Кроме этого, имеется опция -localhost, которая может принимать значение «yes» или «no». Если указать -localhost no, то TigerVNC сервер будет прослушивать любые входящие подключения, а не только локальные:
Как поменять порт 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):
Скопируйте файл с сертификатом 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 аутентификацию.
Таким образом, собираем все необходимые опции в одну команду:
Управление и остановка процессом TigerVNC
Чтобы вывести список запущенных рабочих столов с VNC выполните следующую команду:
- X DISPLAY # — номер дисплея
- RFB PORT # — номер прослушиваемого порта
- PROCESS ID — идентификатор процесса
Чтобы закрыть дисплей с любым номером, используйте опцию -kill, к примеру, чтобы закрыть дисплей :1:
Имеется утилита vncconfig, которая с использованием опции [-set] Xvnc-param=value позволяет изменять опции запущенного VNC сервера на лету.
Чтобы вывести список опций VNC сервера укажите флаг -list:
Обратите внимание, что также нужно использовать опцию -display после которой указывается номер дисплея.
Как настроить автоматический запуск сервера TigerVNC
Создайте файл /etc/systemd/system/vncserver@.service:
Скопируйте в этот файл
Обратите внимание на строку User=mial — впишите в неё имя вашего пользователя вместо mial.
Сохраните и закройте этот файл.
Теперь перезагрузите конфигурацию менеджера systemctl для чтения свежесозданного файла юнита следующим образом:
Для запуска службы VNC выполните команду:
Обратите внимание, что вместо 1 вы можете указывать любой номер дисплея.
Источник
VNC CentOS
Введение
Virtual Network Computing (VNC) — система удалённого доступа к рабочему столу компьютера, использующая протокол RFB (англ. Remote FrameBuffer, удалённый кадровый буфер).
Управление осуществляется путём передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть.
Система VNC платформонезависима: VNC-клиент, называемый VNC viewer, запущенный на одной операционной системе, может подключаться к VNC-серверу, работающему на любой другой ОС.
Существуют реализации клиентской и серверной части практически для всех операционных систем, в том числе и для Java (включая мобильную платформу J2ME).
К одному VNC-серверу одновременно могут подключаться множественные клиенты.
Наиболее популярные способы использования VNC — удалённая техническая поддержка и доступ к рабочему компьютеру из дома.
Установка tigervnc-server
sudo yum install tigervnc-server
Залогиньтесь под пользователем, которому вы хотите дать доступ по vnc
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
view-only password это пароль для доступа только с правами на просмотр. Действия мыши и клавиатуры во время такого доступа ограничены.
sudo vi /lib/systemd/system/vncserver@.service
# The vncserver service unit file # # Quick HowTo: # 1. Copy this file to /etc/systemd/system/vncserver@.service # 2. Replace with the actual user name and edit vncserver # parameters in the wrapper script located in /usr/bin/vncserver_wrapper # 3. Run `systemctl daemon-reload` # 4. Run `systemctl enable vncserver@: .service` # # DO NOT RUN THIS SERVICE if your local area network is # untrusted! For a secure way of using VNC, you should # limit connections to the local host and then tunnel from # the machine you want to view VNC on (host A) to the machine # whose VNC output you want to view (host B) # # [user@hostA
]$ ssh -v -C -L 590N:localhost:590M hostB # # this will open a connection on port 590N of your hostA to hostB’s port 590M # (in fact, it ssh-connects to hostB and then connects to localhost (on hostB). # See the ssh man page for details on port forwarding) # # You can then point a VNC client on hostA at vncdisplay N of localhost and with # the help of ssh, you end up seeing what hostB makes available on port 590M # # Use «-nolisten tcp» to prevent X connections to your VNC server via TCP. # # Use «-localhost» to prevent remote VNC clients connecting except when # doing so through a secure tunnel. See the «-via» option in the # `man vncviewer’ manual page. [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple # Clean any existing files in /tmp/.X11-unix environment ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’ ExecStart=/usr/bin/vncserver_wrapper %i ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’ [Install] WantedBy=multi-user.target
Выполните первый и второй шаги из Quick HowTo
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@: 1 .service
Обратите внимание на 1 — таким образом указывается номер дисплея для данной версии сервера. Можно было выбрать другое число, главное запомнить этот выбор.
sudo vi /etc/systemd/system/vncserver@\: 1 .service
Замените на имя вашего пользователя. (моего зовут andrei)
Можно вручную через vi а можно с помощью sed
sudo sed -i ‘s / wrapper\ / wrapper\ andrei / ‘ /etc/systemd/system/vncserver@\: 1 .service
Если вашего пользователя зовут vncuser команда будет выглядеть так:
sudo sed -i ‘s / wrapper\ / wrapper\ vncuser / ‘ /etc/systemd/system/vncserver@\: 1 .service
Запуск VNC сервера
Чтобы VNC sever запускался при загрузке системы выполните
systemctl enable vncserver@:1
Запустить VNC sever вручную
sudo systemctl daemon-reload
sudo systemctl start vncserver@:1
Проверить статус VNC сервера
systemctl status vncserver@:1
● vncserver@:1.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-03-16 13:49:55 EET; 3min 56s ago Process: 23138 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 23145 (vncserver_wrapp) CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service ├─23145 /bin/sh /usr/bin/vncserver_wrapper andrei :1 └─24097 /bin/sh /usr/bin/vncserver_wrapper andrei :1 Oct 10 14:39:00 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[23145]: New ‘localhost.localdomain:1 (andrei)’ desktop is localhost.localdomain:1 Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[23145]: Creating default startup script /home/andrei/.vnc/xstartup Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[23145]: Creating default config /home/andrei/.vnc/config Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[23145]: Starting applications specified in /home/andrei/.vnc/xstartup Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[23145]: Log file is /home/andrei/.vnc/localhost.localdomain:1.log
Проверить, что vnc server слушает на порту 5901 можно командой
ss -tulpn| grep vnc
tcp LISTEN 0 5 *:5901 *:* users:((«X vnc «,pid=1330,fd=9)) tcp LISTEN 0 128 *:6001 *:* users:((«X vnc «,pid=1330,fd=6)) tcp LISTEN 0 5 [::]:5901 [::]:* users:((«X vnc «,pid=1330,fd=10)) tcp LISTEN 0 128 [::]:6001 [::]:* users:((«X vnc «,pid=1330,fd=5))
Открыть порт в Firewall
Теперь порт 5901 нужно открыть в firewall
sudo firewall-cmd —add-port=5901/tcp —permanent
sudo firewall-cmd —reload
sudo firewall-cmd —list-ports
Как вы можете убедиться — порт 5901 успешно добавлен в список открытых
Если вам вдруг стало интересно — что за порт 19999 — его использует Locust
Подключение к VNC серверу
Теперь можно установить VNC клиент, например, Remmina
sudo yum install remmina
И зайти на VNC сервер введя нужный IP адрес и порт :5901
Подключение к Centos по VNC через Remmina
Введите пароль пользователя для которого вы создали vncpasswd
Подключение к Centos по VNC через Remmina
Подключение к Centos по VNC через Remmina
Остановить VNC сервер
systemctl stop vncserver@:1
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or units. Authenticating as: andrei Password: ==== AUTHENTICATION COMPLETE ===
Изменить порт и дисплей
Если скопировать существующий файл /etc/systemd/system/vncserver@: 1 .service
cp /etc/systemd/system/vncserver@: 1 .service /etc/systemd/system/vncserver@: 0 .service
systemctl daemon-reload
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon === Authentication is required to reload the systemd state. Authenticating as: andrei Password: ==== AUTHENTICATION COMPLETE === [andrei@localhost system]$ systemctl start vncserver@:0 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or units. Authenticating as: andrei Password: ==== AUTHENTICATION COMPLETE === [andrei@localhost system]$ systemctl status vncserver@:0 ● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2021-10-10 16:55:56 EET; 11s ago Process: 8426 ExecStart=/usr/bin/vncserver_wrapper andrei %i (code=exited, status=2) Process: 8424 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 8426 (code=exited, status=2) Oct 10 14:39:00 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[8426]: Warning: localhost.localdomain:0 is taken because of /tmp/.X0-lock Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[8426]: Remove this file if there is no X server localhost.localdomain:0 Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[8426]: A VNC server is already running as :0 Oct 10 14:39:00 localhost.localdomain systemd[1]: vncserver@:0.service: main process exited, code=exited, status=2/INVALIDARGUMENT Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[8426]: FATAL: ‘runuser -l andrei’ failed! Oct 10 14:39:00 localhost.localdomain systemd[1]: Unit vncserver@:0.service entered failed state. Oct 10 14:39:00 localhost.localdomain systemd[1]: vncserver@:0.service failed.
Обратите внимание на предупреждение Warning: localhost.localdomain:0 is taken because of /tmp/.X0-lock
Файл .X0-lock нужно удалить
rm /tmp/.X0-lock
systemctl start vncserver@:0
systemctl status vncserver@:0
● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2021-10-10 00:01:00 EET; 13s ago Process: 9358 ExecStart=/usr/bin/vncserver_wrapper andrei %i (code=exited, status=2) Process: 9356 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 9358 (code=exited, status=2) Oct 10 14:39:00 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9358]: Warning: localhost.localdomain:0 is taken because of /tmp/.X11-unix/X0 Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9358]: Remove this file if there is no X server localhost.localdomain:0 Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9358]: A VNC server is already running as :0 Oct 10 14:39:00 localhost.localdomain systemd[1]: vncserver@:0.service: main process exited, code=exited, status=2/INVALIDARGUMENT Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9358]: FATAL: ‘runuser -l andrei’ failed! Oct 10 14:39:00 localhost.localdomain systemd[1]: Unit vncserver@:0.service entered failed state. Oct 10 14:39:00 localhost.localdomain systemd[1]: vncserver@:0.service failed.
Теперь нужно удалить файл .X11-unix/X0k нужно удалить
rm /tmp/.X11-unix/X0k
systemctl daemon-reload
systemctl start vncserver@:0
systemctl status vncserver@:0
● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2021-10-10 17:16:39 EET; 4s ago Process: 9513 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 9516 (vncserver_wrapp) CGroup: /system.slice/system-vncserver.slice/vncserver@:0.service └─9516 /bin/sh /usr/bin/vncserver_wrapper andrei :0 Oct 10 14:39:00 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9516]: WARNING: The first attempt to start Xvnc failed, possibly because the font Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9516]: catalog is not properly configured. Attempting to determine an appropriate Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[9516]: font path for this system and restart Xvnc using that font path .
Дисплей 0
Если вы пытаетесь запустить сервер на дисплее 0 и получаете ошибку
● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: Active: failed (Result: exit-code) since Thu 2021-03-18 15:50:32 EET; 2min 8s ago Process: 4260 ExecStart=/usr/bin/vncserver_wrapper andrei %i (code=exited, status= Process: 4255 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 Main PID: 4260 (code=exited, status=2) Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[4260]: (EE) Cannot establish Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[4260]: _XSERVTransSocketUNIX Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[4260]: _XSERVTransMakeAllCOT Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[4260]: (EE) Oct 10 14:39:00 localhost.localdomain vncserver_wrapper[4260]: Fatal server error:
Убедитесь, что у вас не запущена X Window System обычно она занимает дисплей 0.
Источник