VNC: различия между версиями

Материал из ALT Linux Wiki
(Доработана настройка многопользовательского режима)
(Многопользовательский режим -> updated)
Строка 36: Строка 36:


== Многопользовательский режим (tigervnc-server) ==
== Многопользовательский режим (tigervnc-server) ==
 
{{note|К имеющемуся дисплею :0 подключиться этим способом не получится. VNC-сервер запускает новые дисплеи.}}
1. Устанавливаем пакет {{pkg|tigervnc-server}}:
Устанавливаем пакет {{pkg|tigervnc-server}}:
  apt-get install tigervnc-server
  apt-get install tigervnc-server
Есть две реализации разворачивания дополнительных X-серверов:
* централизованный сервис ''vncserver'', отвечающий за работу всех виртуальных дисплеев;
* несколько сервисов ''vncserver@:<номер дисплея>''
Рассмотрим оба этих способа, у каждого есть свои плюсы и недостатки


2. Добавьте сервис в автозапуск:
=== "Всё в одном сервисе" ===
1. Добавьте в автозагрузку:
  chkconfig vncserver on
  chkconfig vncserver on


3. Далее необходимо настроить виртуальные дисплеи, их количество и параметры запуска. Для это необходимо отредактировать файл /etc/sysconfig/vncservers. Пример содержимого файла:
2. Далее необходимо настроить виртуальные дисплеи, их количество и параметры запуска. Для это необходимо отредактировать файл /etc/sysconfig/vncservers. Пример содержимого файла:
  VNCSERVERS="1:user1 2:user2"
  VNCSERVERS="1:user1 2:user2"
  VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp"
  VNCSERVERARGS[1]="-geometry 800x600 -depth 16"
  VNCSERVERARGS[2]="-geometry 800x600 -depth 16"
  VNCSERVERARGS[2]="-geometry 800x600 -localhost"
<div style="border-left:4px solid #2590B7;padding:3mm;padding-left:7px;margin-top: 3px;margin-bottom: 3px;background-color:#f0faff">'''TODO:'''
{{{1|Параметр ''VNCSERVERARGS'' должен изменять настройки по умолчанию для определенного дисплея (в квадратных скобках). Однако, описанные настройки при запуске сервиса не применяются...}}}</div>


user1 и user2 - данные пользователи должны существовать в системе (/etc/passwd). Также для успешного старта VNC-сервера необходимо задать пароли (ничего общего с системными они не имеют) для этих пользователей (запишутся в ~/.vnc/passwd):
Переменные ''VNCSERVERARGS'' изменяет параметры по умолчанию для определенного дисплея (в квадратных скобках).
Заданные пользователи - user1 и user2 - должны существовать в системе. Также для успешного старта VNC-сервера необходимо обязательно задать пароли (ничего общего с системными они не имеют) для этих пользователей (запишутся в ~/.vnc/passwd):
  # su - user1
  # su - user1
  $ vncpasswd
  $ vncpasswd


4. Запускаем сервис:
3. Запускаем сервис:
  service vncserver start
  service vncserver start
После этого можете проверить прослушиваемые порты:
# netstat -ntlp | grep vnc
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                  LISTEN      12414/Xvnc         
tcp        0      0 127.0.0.1:5902              0.0.0.0:*                  LISTEN      12522/Xvnc         
tcp        0      0 :::5901                    :::*                        LISTEN      12414/Xvnc         
tcp        0      0 ::1:5902                    :::*                        LISTEN      12522/Xvnc 


5. При подключении указываем номер дисплея (или номер порта), который соответствует необходимому пользователю:
4. При подключении указываем номер дисплея (или номер порта), который соответствует необходимому пользователю:
  vncviewer localhost:1
  vncviewer localhost:1
  vncviewer localhost:5901
  vncviewer localhost:5901
{{note|Недостатком данного способа является то, что если у какого-либо пользователя зависнет сеанс или возникнет любая другая проблема, то починить это вы сможете только рестартом всего сервиса (в этом случае все сеансы завершаться, данные могут быть утеряны), перезапустить отдельный дисплей не получится.
Плюсом же является удобство администрирования с помощью единого файла настройки /etc/sysconfig/vncservers
Для небольшого количества (до 3-5) пользователей данный вариант является вполне "конкурентоспособным". Если же пользователей планируется большое количество, либо просто нужна возможность перезапуска отдельного дисплея, то воспользуйтесь вторым способом}}
=== "Каждый дисплей - отдельный сервис" ===
1. Скопируйте необходимое количество (= кол-во юзеров VNC) юнитов vncserver@.service (после @ подставьте требуемый номер дисплея):
cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service
cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:2.service
2. Приведите их к следующему виду (укажите имя пользователя и его домашнюю папку):
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User='''user1'''
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i
PIDFile=/home/'''user1'''/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target
3. Обновите конфигурацию сервисов и добавьте в автозагрузку необходимые из созданных:
systemctl daemon-reload
chkconfig vncserver@:1 on
chkconfig vncserver@:2 on
4. Задайте пароль для всех пользователей (см. [[VNC#.22.D0.92.D1.81.D1.91_.D0.B2_.D0.BE.D0.B4.D0.BD.D0.BE.D0.BC_.D1.81.D0.B5.D1.80.D0.B2.D0.B8.D1.81.D0.B5.22|1.3.1.2]])
5. Теперь каждым пользовательским сеансом/дисплеем можно управлять отдельно:
<!-- <div style="border-left:4px solid #2590B7;padding:3mm;padding-left:7px;margin-top: 3px;margin-bottom: 3px;background-color:#f0faff">'''TODO:'''
{{{1|Параметр ''VNCSERVERARGS'' должен изменять настройки по умолчанию для определенного дисплея (в квадратных скобках). Однако, описанные настройки при запуске сервиса не применяются...}}}</div> -->


[[Категория:HOWTO]]
[[Категория:HOWTO]]

Версия от 21:49, 27 января 2017

Работа с дистрибутивами Альт Линукс по протоколу VNC

С помощью xorg-extension-vnc

1. Установите пакет xorg-extension-vnc:

apt-get install xorg-extension-vnc

2. Раскомментируйте строки в файле /etc/X11/xorg.conf.d/vnc.conf:

subst 's/^#//' /etc/X11/xorg.conf.d/vnc.conf

3. Укажите пароль для доступа к экрану:

# vncpasswd 
Password:
Verify:

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

  • Доустановите tigervnc-common, если будет ругаться на отсутствие команды vncpasswd (Bug: #32898)
  • По умолчанию, необходимо записать пароль в файл /root/.vnc/passwd

4. Выйдите из сеанса и запустите его снова

С помощью x11vnc

1. Установите пакет x11vnc-service:

apt-get install x11vnc-service

2. Добавьте сервис в автозапуск и запустите его:

chkconfig x11vnc on
service x11vnc start

3. Укажите пароль для удаленного доступа (необходимо записать его в /root/.vnc/passwd):

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

PS: Для внесения изменений в параметры подключения к серверу x11vnc (запрос подтверждения, качество и пр.) необходимо отредактировать команду (ExecStart=) в файле /lib/systemd/system/x11vnc.service

Многопользовательский режим (tigervnc-server)

Примечание: К имеющемуся дисплею :0 подключиться этим способом не получится. VNC-сервер запускает новые дисплеи.

Устанавливаем пакет tigervnc-server:

apt-get install tigervnc-server

Есть две реализации разворачивания дополнительных X-серверов:

  • централизованный сервис vncserver, отвечающий за работу всех виртуальных дисплеев;
  • несколько сервисов vncserver@:<номер дисплея>

Рассмотрим оба этих способа, у каждого есть свои плюсы и недостатки

"Всё в одном сервисе"

1. Добавьте в автозагрузку:

chkconfig vncserver on

2. Далее необходимо настроить виртуальные дисплеи, их количество и параметры запуска. Для это необходимо отредактировать файл /etc/sysconfig/vncservers. Пример содержимого файла:

VNCSERVERS="1:user1 2:user2"
VNCSERVERARGS[1]="-geometry 800x600 -depth 16"
VNCSERVERARGS[2]="-geometry 800x600 -localhost"

Переменные VNCSERVERARGS изменяет параметры по умолчанию для определенного дисплея (в квадратных скобках). Заданные пользователи - user1 и user2 - должны существовать в системе. Также для успешного старта VNC-сервера необходимо обязательно задать пароли (ничего общего с системными они не имеют) для этих пользователей (запишутся в ~/.vnc/passwd):

# su - user1
$ vncpasswd

3. Запускаем сервис:

service vncserver start

После этого можете проверить прослушиваемые порты:

# netstat -ntlp | grep vnc
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                   LISTEN      12414/Xvnc          
tcp        0      0 127.0.0.1:5902              0.0.0.0:*                   LISTEN      12522/Xvnc          
tcp        0      0 :::5901                     :::*                        LISTEN      12414/Xvnc          
tcp        0      0 ::1:5902                    :::*                        LISTEN      12522/Xvnc  

4. При подключении указываем номер дисплея (или номер порта), который соответствует необходимому пользователю:

vncviewer localhost:1
vncviewer localhost:5901
Примечание: Недостатком данного способа является то, что если у какого-либо пользователя зависнет сеанс или возникнет любая другая проблема, то починить это вы сможете только рестартом всего сервиса (в этом случае все сеансы завершаться, данные могут быть утеряны), перезапустить отдельный дисплей не получится.

Плюсом же является удобство администрирования с помощью единого файла настройки /etc/sysconfig/vncservers

Для небольшого количества (до 3-5) пользователей данный вариант является вполне "конкурентоспособным". Если же пользователей планируется большое количество, либо просто нужна возможность перезапуска отдельного дисплея, то воспользуйтесь вторым способом

"Каждый дисплей - отдельный сервис"

1. Скопируйте необходимое количество (= кол-во юзеров VNC) юнитов vncserver@.service (после @ подставьте требуемый номер дисплея):

cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service
cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:2.service

2. Приведите их к следующему виду (укажите имя пользователя и его домашнюю папку):

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

[Service]
Type=forking
User=user1

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i
PIDFile=/home/user1/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target

3. Обновите конфигурацию сервисов и добавьте в автозагрузку необходимые из созданных:

systemctl daemon-reload
chkconfig vncserver@:1 on
chkconfig vncserver@:2 on

4. Задайте пароль для всех пользователей (см. 1.3.1.2)

5. Теперь каждым пользовательским сеансом/дисплеем можно управлять отдельно: