VNC
Работа с дистрибутивами Альт Линукс по протоколу 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
Option "rfbport" "5902"
3. Укажите пароль для доступа к экрану:
# vncpasswd
Password:
Verify:
и укажите пароль дважды. Пароль должен быть длиной не менее 6 символов и, по соображениям безопасности, при наборе не показывается.
По умолчанию, необходимо записать пароль в файл /root/.vnc/passwd
4. Выйдите из сеанса и запустите его снова
С помощью Vino
Данный способ протестирован на Рабочей станции 8 и 9 и в Starterkits/Regular на основе MATE. Пакет включен в Альт Рабочая станция.
1. Установите пакет vino-mate:
apt-get install vino-mate
2. В главном меню откройте Параметры -> Общий доступ к рабочему столу или запустите от обычного пользователя:
vino-preferences
3. Настройте необходимые Вам параметры подключения:
4. Для первичного применения параметров необходимо перезапустить сеанс (в дальнейшем изменение настроек будет происходить мгновенно). Если пакет включен в дистрибутив - данное действие не требуется.
PS: По умолчанию включено шифрование, если оно не нужно, либо Ваш VNC-клиент не поддерживает его, отключается он следующей командой:
gsettings set org.gnome.Vino require-encryption false
С помощью Krfb
Krfb — vnc-сервер среды KDE для совместного доступа к рабочему столу. Пакет включен в Альт Рабочая Станция К.
1. Установить пакет kde5-krfb:
# apt-get install kde5-krfb
2. В главном меню выбрать «Сеть» ▷ «Krfb (Совместный доступ к рабочему столу (VNC))» или запустить от обычного пользователя:
$ krfb
3. Настроить совместный доступ к рабочему столу:
При подключении клиента будет появляться уведомление о попытке соединения:
Если запретить удалённому пользователю управлять мышью и клавиатурой он сможет только наблюдать за вашими действиями.
krfb использует два пароля: для доступа с подтверждением и для доступа без подтверждения.
А KRDC по умолчанию сохраняет пароли подключения в бумажник (KWallet). Поэтому если пользователь подключался к удалённому рабочему столу, используя пароль для доступа с подтверждением, то именно этот пароль будет сохранён в бумажник и в дальнейшем при подключении к этому рабочему столу запрашиваться не будет (будет подставляться из бумажника).
В этом случае, для того чтобы использовать пароль доступа без подтверждения (или наоборот), необходимо предварительно удалить сохранённый пароль (см. Связка_ключей#Управление_бумажниками_(KWalletManager)).
По умолчанию используется порт 5900, изменить его можно в окне Настройка ▷ Настроить совместный доступ к рабочему столу на вкладке «Сеть»:
Krfb может использоваться совместно с KRDC.
С помощью x11vnc
VNC сервер x11vnc в первую очередь предназначен для работы в качестве службы или демона, но программа имеет и графический интерфейс.
x11vnc
Установить пакет x11vnc:
# apt-get install x11vnc
Запуск VNC сервера выполняется командой:
$ x11vnc
Пример запуска сервера x11vnc из командной строки:
- Указать пароль для удаленного доступа (пароль будет записан в ~/.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
- Запуск сервера 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.
# apt-get install tk
Необходимо указать номер порта и нажать кнопку «OK». В системном трее появится значок 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). Для внесения изменений - просто отредактируйте в нем последнюю строчку.
Данный файл не является %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.
Если при подключении вы наблюдаете только черный экран с курсором — перезагрузите DM, например lightDM:
# systemctl restart lightdm
TigerVNC
TigerVNC — клиент-сервер 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):
# su - user1
$ vncpasswd
5. Теперь каждым пользовательским сеансом/дисплеем можно управлять отдельно:
# service vncserver@:2 restart
- добавьте в параметры запуска 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 (Удалённый доступ к рабочему столу)):
TigerVNC (vncviewer)
TigerVNC — клиент-сервер VNC.
Установить VNC-клиент (пакет tigervnc):
# apt-get install tigervnc
Подключение к серверу:
vncviewer [host][::port] vncviewer [host][:display#]
Если запустить vncviewer без аргументов, будет запущено окно VNC Viewer:
Следующая команда заставляет vncviewer прослушивать данный порт (по умолчанию 5500) для обратных подключений с сервера VNC:
vncviewer --listen [port]
$ x11vnc -connect 192.168.0.137:5678
noVNC
noVNC — клиент VNC, использующий HTML5. noVNC позволяет подключиться к удалённому компьютеру без установки какого-либо клиента — используется лишь браузер.
Настройка удалённого доступа с помощью noVNC (в примере VNC-сервер и websockify запускаются на одном узле):
- Установить пакет novnc:
# apt-get install novnc
- Запустить VNC-сервер (например, x11vnc).
- На машине с 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).
Для подключения к удаленному рабочему столу:
- Запустить браузер.
- В адресной строке ввести адрес удалённого компьютера и порт, на котором слушает noVNC сервер.
- Если удаленный сервер VNC требует аутентификации по паролю, в открывшемся окне ввести VNC пароль и нажать кнопку «Connect» («Подключиться»):
Чтобы зашифровать трафик с помощью схемы 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.