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

Материал из ALT Linux Wiki
(Многопользовательский режим -> updated)
(не показано 19 промежуточных версий 7 участников)
Строка 1: Строка 1:
= Работа с дистрибутивами Альт Линукс по протоколу [https://ru.wikipedia.org/wiki/Virtual_Network_Computing VNC] =
= Работа с дистрибутивами Альт Линукс по протоколу [https://ru.wikipedia.org/wiki/Virtual_Network_Computing VNC] =
Данная инструкция проверена на 8-й версии дистрибутивов ALT.
См. тж. [[Установка по vnc]].
== С помощью xorg-extension-vnc ==
== С помощью xorg-extension-vnc ==


Строка 12: Строка 17:
Password:
Password:
Verify:</source>
Verify:</source>
и укажите пароль дважды. Пароль должен быть длиной не менее 6 символов и, по соображениям безопасности, при наборе не показывается.
и укажите пароль дважды. Пароль должен быть длиной не менее 6 символов и, по соображениям безопасности, при наборе не показывается.  
* Доустановите {{pkg|tigervnc-common}}, если будет ругаться на отсутствие команды vncpasswd (Bug: [https://bugzilla.altlinux.org/32898 #32898])
 
* По умолчанию, необходимо записать пароль в файл /root/.vnc/passwd
По умолчанию, необходимо записать пароль в файл /root/.vnc/passwd


4. Выйдите из сеанса и запустите его снова
4. Выйдите из сеанса и запустите его снова
{{note|Данный вариант настройки доступа к машине по VNC предпочтительный, так как по умолчанию есть возможность подключения не только к дефолтному :0, но и к другим экранам - например при переключении пользователя окно авторизации будет на :1, при входе под другой УЗ - его десктоп будет :2 и так далее.}}
== С помощью Vino ==
Данный способ протестирован на [[Workstation|Рабочей станции 8 и 9]] и в [[Starterkits]]/[[Regular]] на основе MATE. Пакет включен в Альт Рабочая станция.
1. Установите пакет {{pkg|vino-mate}}:
apt-get install vino-mate
2. В главном меню откройте ''Параметры -> Общий доступ к рабочему столу'' или запустите от обычного пользователя:
vino-preferences
3. Настройте необходимые Вам параметры подключения:
[[Файл:Vino-preferences.png]]
4. Для первичного применения параметров необходимо перезапустить сеанс (в дальнейшем изменение настроек будет происходить мгновенно). Если пакет включен в дистрибутив - данное действие не требуется.
PS: По умолчанию включено шифрование, если оно не нужно, либо Ваш VNC-клиент не поддерживает его, отключается он следующей командой:
gsettings set org.gnome.Vino require-encryption false
{{note|Пакет {{pkg|vino-mate}} представляет собой "форк" пакета {{pkg|vino}}, на данный момент в p8 и Sisyphus актуальная версия которого - 3.22.0, однако в ней нет удобной пользовательской настройки доступа (vino-preferences). Данный функционал был убран разработчиками, подробнее об этом [https://bugzilla.gnome.org/700070 тут]. Поэтому для DE MATE было решено вернуть последнюю версию с GUI, а именно 3.8.1 (например в Ubuntu, с ее Unity, во всех репозиториях также эта версия).}}


== С помощью x11vnc ==
== С помощью x11vnc ==
1. Установите пакет {{pkg|x11vnc-service}}:
1. Установите пакет {{pkg|x11vnc-service}} (предназначен для популярных дистрибутивов с SystemD):
  apt-get install x11vnc-service
  apt-get install x11vnc-service


Строка 27: Строка 53:


3. Укажите пароль для удаленного доступа (необходимо записать его в /root/.vnc/passwd):
3. Укажите пароль для удаленного доступа (необходимо записать его в /root/.vnc/passwd):
<source lang="text"># x11vnc --storepasswd  
# x11vnc --storepasswd  
Enter VNC password:  
Enter VNC password:  
Verify password:     
Verify password:     
Write password to /root/.vnc/passwd?  [y]/n </source>
Write password to /root/.vnc/passwd?  [y]/n
 
4. Параметры запускаемого сервисом сервера {{pkg|x11vnc}} указаны в скрипте запуска: {{path|/usr/sbin/x11vnc-start-daemon}} ({{pkg|x11vnc-service}} >= 0.2). Для внесения изменений - просто отредактируйте в нем последнюю строчку.
{{todo|Данный файл не является ''%config(noreplace)'', поэтому будет перезаписан при обновлении пакета!
В планах (когда потребуется внести какое-либо изменение в пакет) переместить параметры в отдельный конфигурационный файл.}}
 
5. Примеры настройки файла {{path|/lib/systemd/system/x11vnc.service}} для запуска {{pkg|x11vnc}} при старте дисплей менеджера (до авторизации пользователей):


PS: Для внесения изменений в параметры подключения к серверу x11vnc (запрос подтверждения, качество и пр.)
Для дисплей менеджера {{pkg|lightdm}}:
необходимо отредактировать команду (ExecStart=) в файле /lib/systemd/system/x11vnc.service
 
[Unit]
Description=X11VNC Server
After=prefdm.service
[Service]
User=root
Restart=on-failure
ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg /var/log/x11.log -rfbauth /root/.vnc/passwd
[Install]
WantedBy=graphical.target
 
Для дисплей менеджера {{pkg|sddm}}:
[unit]
Description=X11VNC Server
After=graphical.target
[Service]
Restart=always
RestartSec=30
Type=simple
ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
-auth $(ls /var/run/sddm/{*}) -rfbauth /root/.vnc/passwd -o /var/log/x11.log"
[Install]
WantedBy=graphical.target


== Многопользовательский режим (tigervnc-server) ==
== Многопользовательский режим (tigervnc-server) ==
Строка 97: Строка 155:
  [Install]
  [Install]
  WantedBy=multi-user.target
  WantedBy=multi-user.target
Для изменения дефолтных параметров подключения допишите необходимые в команде ExecStart.


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


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


<!-- <div style="border-left:4px solid #2590B7;padding:3mm;padding-left:7px;margin-top: 3px;margin-bottom: 3px;background-color:#f0faff">'''TODO:'''
{{note|Используйте SSH-туннель для шифрации трафика:
{{{1|Параметр ''VNCSERVERARGS'' должен изменять настройки по умолчанию для определенного дисплея (в квадратных скобках). Однако, описанные настройки при запуске сервиса не применяются...}}}</div> -->
* добавьте в параметры запуска VNC-сервера ключ -localhost (запрещает подключение удаленным пользователям, не используя SSH туннель)
* запустите на сервере сервис sshd
* на клиентской машине создайте туннель: {{cmd|ssh <server's IP-address> -p <SSH-port> -L 5902:localhost:5902}}
* подключайтесь с клиентской машины (в другой консоли): {{cmd|vncviewer localhost:5902}}}}


[[Категория:HOWTO]]
[[Категория:HOWTO]]
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Версия от 09:10, 4 июня 2020

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

Данная инструкция проверена на 8-й версии дистрибутивов ALT.

См. тж. Установка по 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 символов и, по соображениям безопасности, при наборе не показывается.

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

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

Примечание: Данный вариант настройки доступа к машине по VNC предпочтительный, так как по умолчанию есть возможность подключения не только к дефолтному :0, но и к другим экранам - например при переключении пользователя окно авторизации будет на :1, при входе под другой УЗ - его десктоп будет :2 и так далее.


С помощью Vino

Данный способ протестирован на Рабочей станции 8 и 9 и в Starterkits/Regular на основе MATE. Пакет включен в Альт Рабочая станция.

1. Установите пакет vino-mate:

apt-get install vino-mate

2. В главном меню откройте Параметры -> Общий доступ к рабочему столу или запустите от обычного пользователя:

vino-preferences

3. Настройте необходимые Вам параметры подключения:

Vino-preferences.png

4. Для первичного применения параметров необходимо перезапустить сеанс (в дальнейшем изменение настроек будет происходить мгновенно). Если пакет включен в дистрибутив - данное действие не требуется.

PS: По умолчанию включено шифрование, если оно не нужно, либо Ваш VNC-клиент не поддерживает его, отключается он следующей командой:

gsettings set org.gnome.Vino require-encryption false
Примечание: Пакет vino-mate представляет собой "форк" пакета vino, на данный момент в p8 и Sisyphus актуальная версия которого - 3.22.0, однако в ней нет удобной пользовательской настройки доступа (vino-preferences). Данный функционал был убран разработчиками, подробнее об этом тут. Поэтому для DE MATE было решено вернуть последнюю версию с GUI, а именно 3.8.1 (например в Ubuntu, с ее Unity, во всех репозиториях также эта версия).


С помощью x11vnc

1. Установите пакет x11vnc-service (предназначен для популярных дистрибутивов с SystemD):

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

4. Параметры запускаемого сервисом сервера x11vnc указаны в скрипте запуска: /usr/sbin/x11vnc-start-daemon (x11vnc-service >= 0.2). Для внесения изменений - просто отредактируйте в нем последнюю строчку.

TODO:

Данный файл не является %config(noreplace), поэтому будет перезаписан при обновлении пакета!

В планах (когда потребуется внести какое-либо изменение в пакет) переместить параметры в отдельный конфигурационный файл.


5. Примеры настройки файла /lib/systemd/system/x11vnc.service для запуска x11vnc при старте дисплей менеджера (до авторизации пользователей):

Для дисплей менеджера lightdm:

[Unit]
Description=X11VNC Server
After=prefdm.service

[Service]
User=root
Restart=on-failure
ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg /var/log/x11.log -rfbauth /root/.vnc/passwd

[Install]
WantedBy=graphical.target

Для дисплей менеджера sddm:

[unit]
Description=X11VNC Server
After=graphical.target

[Service]
Restart=always
RestartSec=30
Type=simple
ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
-auth $(ls /var/run/sddm/{*}) -rfbauth /root/.vnc/passwd -o /var/log/x11.log"

[Install]
WantedBy=graphical.target

Многопользовательский режим (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

Для изменения дефолтных параметров подключения допишите необходимые в команде ExecStart.

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

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

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

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

service vncserver@:2 restart
Примечание: Используйте SSH-туннель для шифрации трафика:
  • добавьте в параметры запуска VNC-сервера ключ -localhost (запрещает подключение удаленным пользователям, не используя SSH туннель)
  • запустите на сервере сервис sshd
  • на клиентской машине создайте туннель: ssh <server's IP-address> -p <SSH-port> -L 5902:localhost:5902
  • подключайтесь с клиентской машины (в другой консоли): vncviewer localhost:5902