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

Материал из ALT Linux Wiki
Нет описания правки
 
(не показаны 23 промежуточные версии 11 участников)
Строка 2: Строка 2:


Данная инструкция проверена на 8-й версии дистрибутивов ALT.
Данная инструкция проверена на 8-й версии дистрибутивов ALT.
 
В 10-й версии метод "С помощью xorg-extension-vnc" убивает графическую оболочку на локальной машине.
См. тж. [[Установка по vnc]].
См. тж. [[Установка по vnc]].


== С помощью xorg-extension-vnc ==
== С помощью xorg-extension-vnc ==
P.S. В Starterkits P10 на основе MATE этот способ не работает. Работает следующий способ (С помощью Vino).


1. Установите пакет {{pkg|xorg-extension-vnc}}:
1. Установите пакет {{pkg|xorg-extension-vnc}}:
Строка 12: Строка 14:
2. Раскомментируйте строки в файле {{path|/etc/X11/xorg.conf.d/vnc.conf}}:
2. Раскомментируйте строки в файле {{path|/etc/X11/xorg.conf.d/vnc.conf}}:
  subst 's/^#//' /etc/X11/xorg.conf.d/vnc.conf
  subst 's/^#//' /etc/X11/xorg.conf.d/vnc.conf
{{note|При использовании SSH-туннеля для шифрования трафика (как описано для многопользовательского режима ниже) в файле конфигурации {{path|/etc/X11/xorg.conf.d/vnc.conf}} в секцию "Screen" необходимо добавить строку
<source lang="text">
Option "rfbport" "5902"
</source>}}


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


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


== С помощью Vino ==
== С помощью Vino ==
Данный способ протестирован на [[Workstation|Рабочей станции 8.x]] и в [[Starterkits]]/[[Regular]] на основе MATE. Пакет включен в ALT Workstation 8.2.
Данный способ протестирован на [[Workstation|Рабочей станции 8 и 9]] и в [[Starterkits]]/[[Regular]] на основе MATE. Пакет включен в Альт Рабочая станция.


1. Установите пакет {{pkg|vino-mate}}:
1. Установите пакет {{pkg|vino-mate}}:
Строка 43: Строка 49:


{{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, во всех репозиториях также эта версия).}}
{{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, во всех репозиториях также эта версия).}}
== С помощью Krfb ==
Krfb — vnc-сервер среды KDE для совместного доступа к рабочему столу. Пакет включен в [[Workstation K|Альт Рабочая Станция К]].
1. Установить пакет {{pkgL|kde5-krfb}}:
# apt-get install kde5-krfb
2. В главном меню выбрать {{nav|«Сеть»|«Krfb (Совместный доступ к рабочему столу (VNC))»}} или запустить от обычного пользователя:
  $ krfb
3. Настроить совместный доступ к рабочему столу:
[[Файл:Krfb-01.png|Настройки krfb]]
При подключении клиента будет появляться уведомление о попытке соединения:
[[Файл:Krfb-02.png|krfb. Подтверждение доступа]]
Если запретить удалённому пользователю управлять мышью и клавиатурой он сможет только наблюдать за вашими действиями.
{{Note|Можно разрешить удалённому пользователю подключаться без подтверждения. Для этого в окне настройки совместного доступа к рабочему столу следует отметить пункт «Разрешить доступ без подтверждения» и установить пароль доступа без подтверждения, нажав кнопку «Сменить пароль доступа».}}
{{Attention|
krfb использует два пароля: для доступа с подтверждением и для доступа без подтверждения.
А [[#KRDC|KRDC]] по умолчанию сохраняет пароли подключения в бумажник (KWallet). Поэтому если пользователь подключался к удалённому рабочему столу, используя пароль для доступа с подтверждением, то именно этот пароль будет сохранён в бумажник и в дальнейшем при подключении к этому рабочему столу запрашиваться не будет (будет подставляться из бумажника).
В этом случае, для того чтобы использовать пароль доступа без подтверждения (или наоборот), необходимо предварительно удалить сохранённый пароль (см. [[Связка_ключей#Управление_бумажниками_(KWalletManager)]]).}}
По умолчанию используется порт 5900, изменить его можно в окне {{nav|Настройка|Настроить совместный доступ к рабочему столу}} на вкладке «Сеть»:
[[Файл:Krfb-03.png|Krfb. Прослушиваемый порт]]
Krfb может использоваться совместно с [[#KRDC|KRDC]].


== С помощью x11vnc ==
== С помощью x11vnc ==
VNC сервер x11vnc в первую очередь предназначен для работы в качестве службы или демона, но программа имеет и графический интерфейс.
=== x11vnc ===
Установить пакет {{pkg|x11vnc}}:
<source lang="text" highlight="1"># apt-get install x11vnc</source>
Запуск VNC сервера выполняется командой:
<source lang="text" highlight="1">$ x11vnc</source>
{{Attention|Запуск x11vnc без предварительной настройки небезопасен, настоятельно рекомендуется установить пароль.}}
Пример запуска сервера x11vnc из командной строки:
# Указать пароль для удаленного доступа (пароль будет записан в {{path|~/.vnc/passwd}}):
#:<source lang="text" highlight="1">$ x11vnc --storepasswd
Enter VNC password:
Verify password:   
Write password to /home/user/.vnc/passwd?  [y]/n y
Password written to: /home/user/.vnc/passwd  </source>
# Запуск сервера x11vnc (порт указан в последнем параметре):
#:<source lang="text" highlight="1"> $ x11vnc  -rfbauth .vnc/passwd -display :0 -ncache 1 -rfbport 5905</source>
Поддержка файла конфигурации: если файл {{path|~/.x11vncrc}} существует, то каждая строка в нем обрабатывается как один параметр командной строки:
<source lang="text" highlight="1">$ vim  ~/.x11vncrc
rfbport 5905
rfbauth /home/user/vnc/passwd
</source>
Отключить использование файла конфигурации можно опцией -norc.
Если запустить x11vnc из «Меню запуска приложений» («Интернет» → «X11VNC Server») или из командной строки:
<source lang="text" highlight="1"> $ x11vnc -gui tray=setpass -rfbport PROMPT</source>
будет запущен графический интерфейс x11vnc.
{{Note|Для возможности запуска графического интерфейса x11vnc Должен быть установлен пакет {{pkg|tk}}:
<source lang="text" highlight="1"># apt-get install tk</source> }}
[[Файл:X11vnc-01.png|Графический интерфейс x11vnc]]
Необходимо указать номер порта и нажать кнопку «OK». В системном трее появится значок x11vnc, а на экране откроется окно с его свойствами:
[[Файл:X11vnc-02.png|Свойства x11vnc]]
В окне свойств следует поставить отметку в пункте «Accept Connections» («Принимать подключения»), указать пароль в поле «Password» («Пароль») — здесь указывается пароль для возможности управления рабочим столом, можно также указать и другие опции, если они вам необходимы, например «ViewOnly Password» («Пароль только для просмотра») — зная данный пароль можно просматривать удаленный рабочий стол, без возможности управления им. Эти пароли будут использоваться только для данной сессии.
=== x11vnc-service ===
1. Установите пакет {{pkg|x11vnc-service}} (предназначен для популярных дистрибутивов с SystemD):
1. Установите пакет {{pkg|x11vnc-service}} (предназначен для популярных дистрибутивов с SystemD):
  apt-get install x11vnc-service
  apt-get install x11vnc-service
Строка 73: Строка 159:
  User=root
  User=root
  Restart=on-failure
  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
  ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -oa /var/log/x11vnc.log -rfbauth /root/.vnc/passwd
   
   
  [Install]
  [Install]
Строка 79: Строка 165:


Для дисплей менеджера {{pkg|sddm}}:
Для дисплей менеджера {{pkg|sddm}}:
  [unit]
  [Unit]
  Description=X11VNC Server
  Description=X11VNC Server
  After=graphical.target
  After=graphical.target
Строка 88: Строка 174:
  Type=simple
  Type=simple
  ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
  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"
  -auth $(ls /var/run/sddm/{*}) -rfbauth /root/.vnc/passwd -oa /var/log/x11vnc.log"
   
   
  [Install]
  [Install]
  WantedBy=graphical.target
  WantedBy=graphical.target


== Многопользовательский режим (tigervnc-server) ==
После исправления запустите:
systemctl daemon-reload
systemctl restart x11vnc
 
Журнал запуска находится в файле {{path|/var/log/x11vnc.log}}.
 
{{note|Black Screen
Если при подключении вы наблюдаете только черный экран с курсором — перезагрузите DM, например lightDM:
<source lang="text">
# systemctl restart lightdm
</source>}}
 
== TigerVNC ==
TigerVNC — клиент-сервер VNC.
 
Устанавливаем пакет {{pkg|tigervnc-server}}:
<source lang="text" highlight="1"># apt-get install tigervnc-server</source>
 
=== Многопользовательский режим ===
{{note|К имеющемуся дисплею :0 подключиться этим способом не получится. VNC-сервер запускает новые дисплеи.}}
{{note|К имеющемуся дисплею :0 подключиться этим способом не получится. VNC-сервер запускает новые дисплеи.}}
Устанавливаем пакет {{pkg|tigervnc-server}}:
 
apt-get install tigervnc-server
Есть две реализации разворачивания дополнительных X-серверов:
Есть две реализации разворачивания дополнительных X-серверов:
* централизованный сервис ''vncserver'', отвечающий за работу всех виртуальных дисплеев;
* централизованный сервис ''vncserver'', отвечающий за работу всех виртуальных дисплеев;
* несколько сервисов ''vncserver@:<номер дисплея>''
* несколько сервисов ''vncserver@:<номер дисплея>''
Рассмотрим оба этих способа, у каждого есть свои плюсы и недостатки
Рассмотрим оба этих способа, у каждого есть свои плюсы и недостатки.


=== "Всё в одном сервисе" ===
==== "Всё в одном сервисе" ====
1. Добавьте в автозагрузку:
1. Добавьте в автозагрузку:
chkconfig vncserver on
<source lang="text" highlight="1"># chkconfig vncserver on</source>


2. Далее необходимо настроить виртуальные дисплеи, их количество и параметры запуска. Для это необходимо отредактировать файл /etc/sysconfig/vncservers. Пример содержимого файла:
2. Далее необходимо настроить виртуальные дисплеи, их количество и параметры запуска. Для это необходимо отредактировать файл {{path|/etc/sysconfig/vncservers}}. Пример содержимого файла:
  VNCSERVERS="1:user1 2:user2"
  VNCSERVERS="1:user1 2:user2"
  VNCSERVERARGS[1]="-geometry 800x600 -depth 16"
  VNCSERVERARGS[1]="-geometry 800x600 -depth 16"
Строка 112: Строка 215:


Переменные ''VNCSERVERARGS'' изменяет параметры по умолчанию для определенного дисплея (в квадратных скобках).
Переменные ''VNCSERVERARGS'' изменяет параметры по умолчанию для определенного дисплея (в квадратных скобках).
Заданные пользователи - user1 и user2 - должны существовать в системе. Также для успешного старта VNC-сервера необходимо обязательно задать пароли (ничего общего с системными они не имеют) для этих пользователей (запишутся в ~/.vnc/passwd):
Заданные пользователи user1 и user2 должны существовать в системе. Также для успешного старта VNC-сервера необходимо обязательно задать пароли (ничего общего с системными они не имеют) для этих пользователей (запишутся в {{path|~/.vnc/passwd}}):
# su - user1
<source lang="text" highlight="1,2"># su - user1
$ vncpasswd
$ vncpasswd</source>


3. Запускаем сервис:
3. Запускаем сервис:
service vncserver start
<source lang="text" highlight="1"># service vncserver start</source>
После этого можете проверить прослушиваемые порты:
После этого можете проверить прослушиваемые порты:
# netstat -ntlp | grep vnc
<source lang="text" highlight="1"># netstat -ntlp | grep vnc
  tcp        0      0 0.0.0.0:5901                0.0.0.0:*                  LISTEN      12414/Xvnc           
  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 127.0.0.1:5902              0.0.0.0:*                  LISTEN      12522/Xvnc           
  tcp        0      0 :::5901                    :::*                        LISTEN      12414/Xvnc           
  tcp        0      0 :::5901                    :::*                        LISTEN      12414/Xvnc           
  tcp        0      0 ::1:5902                    :::*                        LISTEN      12522/Xvnc   
  tcp        0      0 ::1:5902                    :::*                        LISTEN      12522/Xvnc   
 
</source>
4. При подключении указываем номер дисплея (или номер порта), который соответствует необходимому пользователю:
4. При подключении указываем номер дисплея (или номер порта), который соответствует необходимому пользователю:
vncviewer localhost:1
<source lang="text" highlight="1,2">$ vncviewer localhost:1
vncviewer localhost:5901
$ vncviewer localhost:5901</source>


{{note|Недостатком данного способа является то, что если у какого-либо пользователя зависнет сеанс или возникнет любая другая проблема, то починить это вы сможете только рестартом всего сервиса (в этом случае все сеансы завершаться, данные могут быть утеряны), перезапустить отдельный дисплей не получится.
{{note|Недостатком данного способа является то, что если у какого-либо пользователя зависнет сеанс или возникнет любая другая проблема, то починить это вы сможете только рестартом всего сервиса (в этом случае все сеансы завершаться, данные могут быть утеряны), перезапустить отдельный дисплей не получится.
Плюсом же является удобство администрирования с помощью единого файла настройки /etc/sysconfig/vncservers
Плюсом же является удобство администрирования с помощью единого файла настройки {{path|/etc/sysconfig/vncservers}}.
Для небольшого количества (до 3-5) пользователей данный вариант является вполне "конкурентоспособным". Если же пользователей планируется большое количество, либо просто нужна возможность перезапуска отдельного дисплея, то воспользуйтесь вторым способом}}
Для небольшого количества (до 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
1. Скопируйте необходимое количество (= кол-во пользователей VNC) юнитов vncserver@.service (после @ подставьте требуемый номер дисплея):
<source lang="text" highlight="1-3"># cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service
# cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:2.service</source>


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


3. Обновите конфигурацию сервисов и добавьте в автозагрузку необходимые из созданных:
3. Обновите конфигурацию сервисов и добавьте в автозагрузку необходимые из созданных:
systemctl daemon-reload
<source lang="text" highlight="1-3"># systemctl daemon-reload
chkconfig vncserver@:1 on
# chkconfig vncserver@:1 on
chkconfig vncserver@:2 on
# chkconfig vncserver@:2 on</source>


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]])
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]]):
<source lang="text" highlight="1,2"># su - user1
$ vncpasswd</source>


5. Теперь каждым пользовательским сеансом/дисплеем можно управлять отдельно:
5. Теперь каждым пользовательским сеансом/дисплеем можно управлять отдельно:
service vncserver@:2 restart
<source lang="text" highlight="1"># service vncserver@:2 restart</source>


{{note|Используйте SSH-туннель для шифрации трафика:
{{note|Используйте SSH-туннель для шифрации трафика:
Строка 173: Строка 279:
* подключайтесь с клиентской машины (в другой консоли): {{cmd|vncviewer localhost:5902}}}}
* подключайтесь с клиентской машины (в другой консоли): {{cmd|vncviewer localhost:5902}}}}


[[Категория:HOWTO]]
=== x0vncserver ===
 
x0vncserver — это сервер TigerVNC, который не создает виртуальный дисплей, а использует существующий X-сервер (обычно тот, который подключен к физическому экрану).
 
Старт сервера (предварительно следует определить пароль сеанса с помощью инструмента {{cmd|vncpasswd}}):
 
<source lang="text" highlight="1">$ x0vncserver -rfbauth ~/.vnc /passwd</source>
 
= VNC-клиенты =
 
== Remmina ==
 
[[Remmina]] — многопротокольный клиент с графическим интерфейсом.
 
== KRDC ==
 
KRDC — клиент VNC для среды KDE ({{nav|Сеть|KRDC (Удалённый доступ к рабочему столу)}}):
 
[[Файл:KRDC-VNC-01.png|KRDC — клиент VNC для среды KDE]]
 
== TigerVNC (vncviewer) ==
 
TigerVNC — клиент-сервер VNC.
 
Установить VNC-клиент (пакет {{pkg|tigervnc}}):
<source lang="text" highlight="1"># apt-get install tigervnc</source>
 
Подключение к серверу:
vncviewer [host][::port]
vncviewer [host][:display#]
 
Если запустить vncviewer без аргументов, будет запущено окно VNC Viewer:
 
[[Файл:TigerVNC-01.png|TigerVNC — клиент VNC]]
 
Следующая команда заставляет vncviewer прослушивать данный порт (по умолчанию 5500) для обратных подключений с сервера VNC:
vncviewer --listen [port]
 
{{Note| x11vnc поддерживает обратные соединения, инициированные с помощью  параметра командной строки '-connect', например:
<source lang="text" highlight="1">$ x11vnc -connect 192.168.0.137:5678</source>
 
Порт по умолчанию 5500.}}
 
== noVNC ==
 
noVNC — клиент VNC, использующий HTML5. noVNC позволяет подключиться к удалённому компьютеру без установки какого-либо клиента — используется лишь браузер.
 
#:[[Файл:NoVNC-02.png|Доступ к удаленным рабочим столам через VNC с помощью websockify]]
 
Настройка удалённого доступа с помощью noVNC (в примере VNC-сервер и websockify запускаются на одном узле):
# Установить пакет {{pkgL|novnc}}:
#:<syntaxhighlight lang="bash"># apt-get install novnc</syntaxhighlight>
# Запустить VNC-сервер (например, [[VNC#x11vnc|x11vnc]]).
# На машине с noVNC запустить websockify:
#:<syntaxhighlight lang="bash">$ websockify  6080 127.0.0.1:5900 --web /usr/share/novnc
 
WebSocket server settings:
  - Listen on :6080
  - Web server. Web root: /usr/share/novnc
  - No SSL/TLS support (no cert file)
  - proxying from :6080 to 127.0.0.1:5900
</syntaxhighlight>
#: Первый параметр в данной команде — порт на котором noVNC будет слушать. Второй параметр — IP и порт, где стоит VNC сервер: 127.0.0.1:5900. Третий параметр --web инструктирует noVNC, чтобы он отдавал содержимое директории /usr/share/novnc по HTTP(s).
 
Для подключения к удаленному рабочему столу:
# Запустить браузер.
# В адресной строке ввести адрес удалённого компьютера и порт, на котором слушает noVNC сервер.
# Если удаленный сервер VNC требует аутентификации по паролю, в открывшемся окне ввести VNC пароль и нажать кнопку «Connect» («Подключиться»):
#:[[Файл:NoVNC-01.png|noVNC. Параметры подключения]]
 
Чтобы зашифровать трафик с помощью схемы WebSocket 'wss://' URI, необходимо сгенерировать сертификат и ключ для загрузки Websockify. По умолчанию Websockify загружает сертификата из файла self.pem, но имя файла можно переопределить в параметрах --cert=CERT и --key=KEY.
 
Можно сгенерировать самоподписанный сертификат с помощью OpenSSL (при запросе «Common Name» следует указать имя хоста, на котором будет работать прокси-сервер):
 
<syntaxhighlight lang="bash">$ openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
 
Generating a RSA private key
.......+++++
............+++++
writing new private key to 'self.pem'
-----
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (e.g., your name or your server's hostname) []:host-15.test.alt
Email Address []:
</syntaxhighlight>
 
При наличии файла self.pem (с ключом и сертификатом) Websockify автоматически загрузит сертификат:
<syntaxhighlight lang="bash">$ websockify  6080 127.0.0.1:5900 --web /usr/share/novnc
 
WebSocket server settings:
  - Listen on :6080
  - Web server. Web root: /usr/share/novnc
  - SSL/TLS support
  - proxying from :6080 to 127.0.0.1:590
</syntaxhighlight>
 
Если у вас есть действительный SSL-сертификат с одним или несколькими промежуточными сертификатами, их следует объединить в один файл, сначала сертификат сервера, затем промежуточные сертификаты из CA и т.д., и указать этот файл с помощью параметра --cert, а файл ключа с помощью параметра --key.
 
[[Категория:HOWTO]][[Категория:Удалённый доступ]]
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Текущая версия от 09:08, 3 октября 2024

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

Данная инструкция проверена на 8-й версии дистрибутивов ALT. В 10-й версии метод "С помощью xorg-extension-vnc" убивает графическую оболочку на локальной машине. См. тж. Установка по vnc.

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

P.S. В Starterkits P10 на основе MATE этот способ не работает. Работает следующий способ (С помощью Vino).

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
Примечание: При использовании SSH-туннеля для шифрования трафика (как описано для многопользовательского режима ниже) в файле конфигурации /etc/X11/xorg.conf.d/vnc.conf в секцию "Screen" необходимо добавить строку
Option "rfbport" "5902"


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, во всех репозиториях также эта версия).


С помощью Krfb

Krfb — vnc-сервер среды KDE для совместного доступа к рабочему столу. Пакет включен в Альт Рабочая Станция К.

1. Установить пакет kde5-krfb:

# apt-get install kde5-krfb

2. В главном меню выбрать «Сеть» ▷ «Krfb (Совместный доступ к рабочему столу (VNC))» или запустить от обычного пользователя:

 $ krfb

3. Настроить совместный доступ к рабочему столу:

Настройки krfb

При подключении клиента будет появляться уведомление о попытке соединения:

krfb. Подтверждение доступа

Если запретить удалённому пользователю управлять мышью и клавиатурой он сможет только наблюдать за вашими действиями.

Примечание: Можно разрешить удалённому пользователю подключаться без подтверждения. Для этого в окне настройки совместного доступа к рабочему столу следует отметить пункт «Разрешить доступ без подтверждения» и установить пароль доступа без подтверждения, нажав кнопку «Сменить пароль доступа».


Внимание!

krfb использует два пароля: для доступа с подтверждением и для доступа без подтверждения.

А KRDC по умолчанию сохраняет пароли подключения в бумажник (KWallet). Поэтому если пользователь подключался к удалённому рабочему столу, используя пароль для доступа с подтверждением, то именно этот пароль будет сохранён в бумажник и в дальнейшем при подключении к этому рабочему столу запрашиваться не будет (будет подставляться из бумажника).

В этом случае, для того чтобы использовать пароль доступа без подтверждения (или наоборот), необходимо предварительно удалить сохранённый пароль (см. Связка_ключей#Управление_бумажниками_(KWalletManager)).


По умолчанию используется порт 5900, изменить его можно в окне Настройка ▷ Настроить совместный доступ к рабочему столу на вкладке «Сеть»:

Krfb. Прослушиваемый порт

Krfb может использоваться совместно с KRDC.

С помощью x11vnc

VNC сервер x11vnc в первую очередь предназначен для работы в качестве службы или демона, но программа имеет и графический интерфейс.

x11vnc

Установить пакет x11vnc:

# apt-get install x11vnc

Запуск VNC сервера выполняется командой:

$ x11vnc
Внимание! Запуск x11vnc без предварительной настройки небезопасен, настоятельно рекомендуется установить пароль.


Пример запуска сервера x11vnc из командной строки:

  1. Указать пароль для удаленного доступа (пароль будет записан в ~/.vnc/passwd):
    $ x11vnc --storepasswd 
    Enter VNC password: 
    Verify password:    
    Write password to /home/user/.vnc/passwd?  [y]/n y
    Password written to: /home/user/.vnc/passwd
    
  2. Запуск сервера x11vnc (порт указан в последнем параметре):
     $ x11vnc  -rfbauth .vnc/passwd -display :0 -ncache 1 -rfbport 5905
    

Поддержка файла конфигурации: если файл ~/.x11vncrc существует, то каждая строка в нем обрабатывается как один параметр командной строки:

$ vim  ~/.x11vncrc
rfbport 5905
rfbauth /home/user/vnc/passwd

Отключить использование файла конфигурации можно опцией -norc.

Если запустить x11vnc из «Меню запуска приложений» («Интернет» → «X11VNC Server») или из командной строки:

 $ x11vnc -gui tray=setpass -rfbport PROMPT

будет запущен графический интерфейс x11vnc.

Примечание: Для возможности запуска графического интерфейса x11vnc Должен быть установлен пакет tk:
# apt-get install tk


Графический интерфейс x11vnc

Необходимо указать номер порта и нажать кнопку «OK». В системном трее появится значок x11vnc, а на экране откроется окно с его свойствами:

Свойства x11vnc

В окне свойств следует поставить отметку в пункте «Accept Connections» («Принимать подключения»), указать пароль в поле «Password» («Пароль») — здесь указывается пароль для возможности управления рабочим столом, можно также указать и другие опции, если они вам необходимы, например «ViewOnly Password» («Пароль только для просмотра») — зная данный пароль можно просматривать удаленный рабочий стол, без возможности управления им. Эти пароли будут использоваться только для данной сессии.

x11vnc-service

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 -oa /var/log/x11vnc.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 -oa /var/log/x11vnc.log"

[Install]
WantedBy=graphical.target

После исправления запустите:

systemctl daemon-reload
systemctl restart x11vnc

Журнал запуска находится в файле /var/log/x11vnc.log.

Примечание: Black Screen

Если при подключении вы наблюдаете только черный экран с курсором — перезагрузите DM, например lightDM:

# systemctl restart lightdm


TigerVNC

TigerVNC — клиент-сервер VNC.

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

# apt-get install tigervnc-server

Многопользовательский режим

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


Есть две реализации разворачивания дополнительных 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):

# su - user1
$ vncpasswd

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


x0vncserver

x0vncserver — это сервер TigerVNC, который не создает виртуальный дисплей, а использует существующий X-сервер (обычно тот, который подключен к физическому экрану).

Старт сервера (предварительно следует определить пароль сеанса с помощью инструмента vncpasswd):

$ x0vncserver -rfbauth ~/.vnc /passwd

VNC-клиенты

Remmina

Remmina — многопротокольный клиент с графическим интерфейсом.

KRDC

KRDC — клиент VNC для среды KDE (Сеть ▷ KRDC (Удалённый доступ к рабочему столу)):

KRDC — клиент VNC для среды KDE

TigerVNC (vncviewer)

TigerVNC — клиент-сервер VNC.

Установить VNC-клиент (пакет tigervnc):

# apt-get install tigervnc

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

vncviewer [host][::port]
vncviewer [host][:display#]

Если запустить vncviewer без аргументов, будет запущено окно VNC Viewer:

TigerVNC — клиент VNC

Следующая команда заставляет vncviewer прослушивать данный порт (по умолчанию 5500) для обратных подключений с сервера VNC:

vncviewer --listen [port]
Примечание: x11vnc поддерживает обратные соединения, инициированные с помощью параметра командной строки '-connect', например:
$ x11vnc -connect 192.168.0.137:5678
Порт по умолчанию 5500.


noVNC

noVNC — клиент VNC, использующий HTML5. noVNC позволяет подключиться к удалённому компьютеру без установки какого-либо клиента — используется лишь браузер.

  1. Доступ к удаленным рабочим столам через VNC с помощью websockify

Настройка удалённого доступа с помощью noVNC (в примере VNC-сервер и websockify запускаются на одном узле):

  1. Установить пакет novnc:
    # apt-get install novnc
    
  2. Запустить VNC-сервер (например, x11vnc).
  3. На машине с noVNC запустить websockify:
    $ websockify  6080 127.0.0.1:5900 --web /usr/share/novnc
    
    WebSocket server settings:
      - Listen on :6080
      - Web server. Web root: /usr/share/novnc
      - No SSL/TLS support (no cert file)
      - proxying from :6080 to 127.0.0.1:5900
    
    Первый параметр в данной команде — порт на котором noVNC будет слушать. Второй параметр — IP и порт, где стоит VNC сервер: 127.0.0.1:5900. Третий параметр --web инструктирует noVNC, чтобы он отдавал содержимое директории /usr/share/novnc по HTTP(s).

Для подключения к удаленному рабочему столу:

  1. Запустить браузер.
  2. В адресной строке ввести адрес удалённого компьютера и порт, на котором слушает noVNC сервер.
  3. Если удаленный сервер VNC требует аутентификации по паролю, в открывшемся окне ввести VNC пароль и нажать кнопку «Connect» («Подключиться»):
    noVNC. Параметры подключения

Чтобы зашифровать трафик с помощью схемы WebSocket 'wss://' URI, необходимо сгенерировать сертификат и ключ для загрузки Websockify. По умолчанию Websockify загружает сертификата из файла self.pem, но имя файла можно переопределить в параметрах --cert=CERT и --key=KEY.

Можно сгенерировать самоподписанный сертификат с помощью OpenSSL (при запросе «Common Name» следует указать имя хоста, на котором будет работать прокси-сервер):

$ openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem

Generating a RSA private key
.......+++++
............+++++
writing new private key to 'self.pem'
-----
…
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (e.g., your name or your server's hostname) []:host-15.test.alt
Email Address []:

При наличии файла self.pem (с ключом и сертификатом) Websockify автоматически загрузит сертификат:

$ websockify  6080 127.0.0.1:5900 --web /usr/share/novnc

WebSocket server settings:
  - Listen on :6080
  - Web server. Web root: /usr/share/novnc
  - SSL/TLS support
  - proxying from :6080 to 127.0.0.1:590

Если у вас есть действительный SSL-сертификат с одним или несколькими промежуточными сертификатами, их следует объединить в один файл, сначала сертификат сервера, затем промежуточные сертификаты из CA и т.д., и указать этот файл с помощью параметра --cert, а файл ключа с помощью параметра --key.