VNC CentOS

Содержание
Введение
Установка tigervnc-server
Запустить VNC сервер
Проверить состояние
Открыть порт в Firewall
Подключение к VNC серверу
Остановить VNC сервер
Изменить порт
Дисплей 0
Изменить пароль
Скрипты для быстрой установки
Похожие статьи

Введение

Virtual Network Computing (VNC) — система удалённого доступа к рабочему столу компьютера, использующая протокол RFB (англ. Remote FrameBuffer, удалённый кадровый буфер).

Управление осуществляется путём передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть.

Система VNC платформонезависима: VNC-клиент, называемый VNC viewer, запущенный на одной операционной системе, может подключаться к VNC-серверу, работающему на любой другой ОС.

Существуют реализации клиентской и серверной части практически для всех операционных систем, в том числе и для Java (включая мобильную платформу J2ME).

К одному VNC-серверу одновременно могут подключаться множественные клиенты.

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

Установка tigervnc-server

Перед установкой VNC сервера убедитесь, что установлен X сервер

Выполните

sudo yum -y install tigervnc-server

Залогиньтесь под пользователем, которому вы хотите дать доступ по vnc

vncpasswd

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 <USER> 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@:<display>.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 <USER> %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

В строке

ExecStart=/usr/bin/vncserver_wrapper <USER> %i

Замените <USER> на имя вашего пользователя. (моего зовут andrei)

Можно вручную через vi а можно с помощью sed

sudo sed -i 's/wrapper\ <USER>/wrapper\ andrei/' /etc/systemd/system/vncserver@\:1.service

Если вашего пользователя зовут vncuser команда будет выглядеть так:

sudo sed -i 's/wrapper\ <USER>/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 Mar 28 11:54:04 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)... Mar 28 11:54:04 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[23145]: New 'localhost.localdomain:1 (andrei)' desktop is localhost.localdomain:1 Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[23145]: Creating default startup script /home/andrei/.vnc/xstartup Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[23145]: Creating default config /home/andrei/.vnc/config Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[23145]: Starting applications specified in /home/andrei/.vnc/xstartup Mar 28 11:54:04 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:(("Xvnc",pid=1330,fd=9)) tcp LISTEN 0 128 *:6001 *:* users:(("Xvnc",pid=1330,fd=6)) tcp LISTEN 0 5 [::]:5901 [::]:* users:(("Xvnc",pid=1330,fd=10)) tcp LISTEN 0 128 [::]:6001 [::]:* users:(("Xvnc",pid=1330,fd=5))

Открыть порт в Firewall

Теперь порт 5901 нужно открыть в firewall

Выполните

sudo firewall-cmd --add-port=5901/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

19999/tcp 5901/tcp

Как вы можете убедиться - порт 5901 успешно добавлен в список открытых

Если вам вдруг стало интересно - что за порт 19999 - его использует Locust

Подключение к VNC серверу

Теперь можно установить VNC клиент, например, Remmina

sudo yum install remmina

И зайти на VNC сервер введя нужный IP адрес и порт :5901

Подключение к Centos по VNC изображение с сайта www.andreyolegovich.ru
Подключение к Centos по VNC через Remmina
www.andreyolegovich.ru

Введите пароль пользователя для которого вы создали vncpasswd

Подключение к Centos по VNC изображение с сайта www.andreyolegovich.ru
Подключение к Centos по VNC через Remmina
www.andreyolegovich.ru
Подключение к Centos по VNC изображение с сайта www.andreyolegovich.ru
Подключение к Centos по VNC через Remmina
www.andreyolegovich.ru

Остановить 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 2024-03-28 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) Mar 28 11:54:04 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)... Mar 28 11:54:04 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[8426]: Warning: localhost.localdomain:0 is taken because of /tmp/.X0-lock Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[8426]: Remove this file if there is no X server localhost.localdomain:0 Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[8426]: A VNC server is already running as :0 Mar 28 11:54:04 localhost.localdomain systemd[1]: vncserver@:0.service: main process exited, code=exited, status=2/INVALIDARGUMENT Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[8426]: FATAL: 'runuser -l andrei' failed! Mar 28 11:54:04 localhost.localdomain systemd[1]: Unit vncserver@:0.service entered failed state. Mar 28 11:54:04 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 2024-03-28 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) Mar 28 11:54:04 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)... Mar 28 11:54:04 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9358]: Warning: localhost.localdomain:0 is taken because of /tmp/.X11-unix/X0 Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9358]: Remove this file if there is no X server localhost.localdomain:0 Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9358]: A VNC server is already running as :0 Mar 28 11:54:04 localhost.localdomain systemd[1]: vncserver@:0.service: main process exited, code=exited, status=2/INVALIDARGUMENT Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9358]: FATAL: 'runuser -l andrei' failed! Mar 28 11:54:04 localhost.localdomain systemd[1]: Unit vncserver@:0.service entered failed state. Mar 28 11:54:04 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 2024-03-28 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 Mar 28 11:54:04 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)... Mar 28 11:54:04 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9516]: WARNING: The first attempt to start Xvnc failed, possibly because the font Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9516]: catalog is not properly configured. Attempting to determine an appropriate Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[9516]: font path for this system and restart Xvnc using that font path ...

Изменить пароль

Для смены пароля выполните

vncpasswd

Дисплей 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) Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[4260]: (EE) Cannot establish Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[4260]: _XSERVTransSocketUNIX Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[4260]: _XSERVTransMakeAllCOT Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[4260]: (EE) Mar 28 11:54:04 localhost.localdomain vncserver_wrapper[4260]: Fatal server error:

Убедитесь, что у вас не запущена X Window System обычно она занимает дисплей 0.

Если запущена - закройте иксы

Скрипты для быстрой установки

Если вам нужно часто устанавливать VNC на разные хосты - воспользуйтесь make или простым bash скриптом

GNUmakefile

# USERNAME замените на свой USERNAME=ndr .PHONY: install-vnc install-vnc: @sudo yum -y update @sudo yum -y install epel-release @sudo yum -y install tigervnc-server @vncpasswd @sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service @sudo sed -i 's/wrapper\ <USER>/wrapper\ $(USERNAME)/' /etc/systemd/system/vncserver@\:1.service @systemctl enable vncserver@:1 @systemctl daemon-reload @sudo systemctl start vncserver@:1

Bash скрипт

#!/bin/bash USERNAME=andrei sudo yum -y update sudo yum -y install epel-release sudo yum -y install tigervnc-server vncpasswd sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service sudo sed -i "s/wrapper\ <USER>/wrapper\ $USERNAME/" /etc/systemd/system/vncserver@\:1.service sudo systemctl enable vncserver@:1 sudo systemctl daemon-reload sudo systemctl start vncserver@:1

Кавычки в sed команде должны быть двойными. Иначе переменная USERNAME будет воспринята как просто текст.