VNC — система удалённого доступа к рабочему столу компьютера, использующая протокол RFB. Управление осуществляется путём передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть. Лично я считаю что этот протокол незаслуженно обходят стороной. Попробуем хоть немного устранить этот недостаток.
Итак, первым делов устанавливаем необходимые зависимости и сам VNC-сервер
# yum -y groupinstall "GNOME Desktop" # yum -y install tigervnc-server
Рассмотрим пример с добавлением трёх пользователей. Собственно создаём их в системе
# useradd user1 # useradd user2 # useradd user3
Следующий шаг — создание сценарием запуска отдельного экземпляра для каждого пользователя
# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service # cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service # cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:3.service
Приводим конфиги к такому виду. Единственное что изменилось — логин пользователя
user1
# cat /etc/systemd/system/vncserver@:1.service | grep -v "#" | grep -v ^$ [Unit] Description=Remote desktop service (VNC) for user1 After=syslog.target network.target [Service] Type=forking ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/sbin/runuser -l user1 -c "/usr/bin/vncserver %i" PIDFile=/home/user1/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
user2
# cat /etc/systemd/system/vncserver@:2.service | grep -v "#" | grep -v ^$ [Unit] Description=Remote desktop service (VNC) for user2 After=syslog.target network.target [Service] Type=forking ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/sbin/runuser -l user2 -c "/usr/bin/vncserver %i" PIDFile=/home/user2/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
user3
# cat /etc/systemd/system/vncserver@:3.service | grep -v "#" | grep -v ^$ [Unit] Description=Remote desktop service (VNC) for user3 After=syslog.target network.target [Service] Type=forking ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/sbin/runuser -l user3 -c "/usr/bin/vncserver %i" PIDFile=/home/user3/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
Теперь для каждого пользователя установим пароль на учетку и пароль для подключения к VNC-серверу
user1
# su - user1 $ passwd Changing password for user user1. Changing password for user1. (current) UNIX password: New password: Retype new password: passwd: all authentication tokens updated successfully. $ vncpasswd Password: Verify: # exit
user2
# su - user2 $ passwd Changing password for user user2. Changing password for user2. (current) UNIX password: New password: Retype new password: $ vncpasswd Password: Verify: # exit
user3
# su - user3 $ passwd Changing password for user user3. Changing password for user3. (current) UNIX password: New password: Retype new password: $ vncpasswd Password: Verify: # exit
Добавляем в автозагрузку
# systemctl enable vncserver@:1.service Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /etc/systemd/system/vncserver@:1.service. # systemctl enable vncserver@:2.service Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:2.service to /etc/systemd/system/vncserver@:2.service. # systemctl enable vncserver@:3.service Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:3.service to /etc/systemd/system/vncserver@:3.service.
и стартуем
# systemctl start vncserver@:1.service # systemctl start vncserver@:2.service # systemctl start vncserver@:3.service
Проверим как это дело запустилось
# netstat -lntpu | grep vnc tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 4394/Xvnc tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 5118/Xvnc tcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN 6033/Xvnc tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 4394/Xvnc tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 5118/Xvnc tcp 0 0 0.0.0.0:6003 0.0.0.0:* LISTEN 6033/Xvnc tcp6 0 0 :::5901 :::* LISTEN 4394/Xvnc tcp6 0 0 :::5902 :::* LISTEN 5118/Xvnc tcp6 0 0 :::5903 :::* LISTEN 6033/Xvnc tcp6 0 0 :::6001 :::* LISTEN 4394/Xvnc tcp6 0 0 :::6002 :::* LISTEN 5118/Xvnc tcp6 0 0 :::6003 :::* LISTEN 6033/Xvnc
Отлично, сервисы запустились и готовы к соединению.
Завершающим шагом будет открытие портов в фаерволе
# firewall-cmd --permanent --zone=public --add-service vnc-server # firewall-cmd --reload
Всё, можно соединяться и работать почти как за терминальным сервером, только с линукс.
На всякий случай скажу, что на Linux есть 1С-Предприятие и софт бесплатный. То есть если хотите что бы всё было прозрачно и честно, то стоит приобрести только ключик и пользоваться. Так, планы на будущее.