Vnc соединение. VNC — удаленный доступ к компьютеру по сети

25 ноября 2009 в 13:21

Подключение к удаленному компьютеру по VNC

  • Настройка Linux

Работа с VNC-клиентом. Материал ориентирован на неопытного пользователя.

1. Установка VNC-клиента
2. Подключение VNC-клиента к удаленному компьютеру
3. Отключение VNC-клиента от удаленного компьютера
4. Тюнинг VNC-клиента
5. Частые проблемы

Для работы с удаленным компьютером по VNC на компьютере пользователя нужно запустить программу-клиент (VNC viewer, VNC client). Эта программа передает на удаленный компьютер данные о нажатиях на клавиши и о движениях мыши, сделанных пользователем, и показывает информацию, предназначенную к выводу на экран.

1. Установка VNC-клиента
Для ОС Windows можно бесплатно скачать и инсталлировать VNC-клиент UltraVNC и TightVNC .

Mac OS X начиная с версии 10.5 имеет поддержку VNC-клиента в RemoteDesktop . Для предыдущих версий можно использовать VNC-клиенты JollysFastVNC и .

Для Linux ветви Debian (Ubuntu) VNC-клиент устанавливается из репозитория командой:

Apt-get install vncviewer

Для ветви RedHat (CentOS, Fedora) - командой:

Yum install vnc

Для FreeBSD VNC-клиент (TightVNC) устанавливается из пакетов командой:

Pkg_add -r tightvnc

2. Подключение VNC-клиента к удаленному компьютеру
Для подключения VNC-клиента к удаленному компьютеру требуется указать его IP-адрес или DNS-имя, и номер дисплея (по умолчанию, :0) или номер TCP-порта (по умолчанию, 5900). Если VNC-сервер требует авторизации, то при подключении к нему VNC-клиент запросит пароль. Обратите внимание, что пароль доступа к VNC-серверу не связан с каким-либо аккаунтом (учетной записью пользователя) на удаленном компьютере, а служит только для ограничения доступа к дисплею VNC-сервера.

После установки соединения и открытия экрана, в зависимости от настроек VNC-сервера может потребоваться авторизация пользователя на виртуальном сервере или может быть открыта уже запущенная рабочая сессия какого-либо пользователя.

Так как на компьютере одновременно могут работать несколько VNC-серверов, для их разделения используют параметр номер дисплея . Например, один VNC-сервер может быть запущен на дисплее:0, другой - на дисплее:1. Каждому номеру дисплея соответствует номер TCP-порта, на котором VNC-сервер принимает соединения. Номер порта для дисплея получается прибавлением номера дисплея к базовому номеру порта - 5900. Дисплею:0 соответствует TCP-порт 5900, дисплею:1 - порт 5901.

3. Отключение VNC-клиента от удаленного компьютера
При закрытии окна VNC-клиента или после выхода из окружения средствами рабочего стола, в зависимости от настроек VNC-сервера, рабочая сессия пользователя может закрыться с остановкой всех используемых программ, или продолжать работу и быть доступной снова при повторном подключении к VNC-серверу.
4. Тюнинг VNC-клиента
Большое количество передаваемой на экран информации влечет за собой повышенные требования к скорости канала - к его пропускной способности и времени передачи пакетов. Нахватка пропускной способности приводит к некомфортным задержкам при больших изменениях показывамой на экране информации - открытии новых окон, скроллинге и т.д. Особенно большие задержки будут возникать при показывании фотографий и других изображений или элементов интерфейса, имеющих большое количество цветов и сложные формы.

Главный параметр, который влияет на объем передаваемых данных - алгоритм кодирования передаваемой графики. Для уменьшения объема и, соответственно, ускорения работы, рекомендуется использовать алгоритмы Tight, ZLib, ZRLE - по сравнению с несжатыми данными (Raw), они обеспечивают сжатие в десятки раз, заметно нагружая процессор. Эти алгоритмы кодирования обеспечивают комфортную работу даже на каналах со скоростью 256-512 Кбит/сек.

Для сокращения объема передаваемой по сети информации также можно устанавливать высокий уровень сжатия (Compression Level, Compression Value), низкий уровень качества JPEG (JPEG Quality) и включать режим уменьшения количества цветов (-bgr233, Restricted colors). Самый большой эффект из них при заметном снижении качества изображения дает режим уменьшения количества цветов - объем передаваемой информации уменьшается в 1.5-3 раза, соответственно, в 1.5-3 раза ускоряется отображение на экране.

JPEG применяется алгоритмом кодирования Tight для сжатия участков экрана, содержащих фотографии и другие сложные изображения с большим числом цветов. Использование Tight+JPEG сокращает в 2-5 раз объем передаваемых при этом данных. Другие алгоритмы кодирования JPEG не поддерживают.

1. Выпадающего меню «Система -> Параметры»

Объем передаваемых данных и скорость отображения на канале 1 Мбит/сек при открытии выпадающего меню «Система -> Параметры» (на рисунке меню выделено зеленым пунктиром):

5. Частые проблемы
Не удается подключиться к VNC-серверу
Нужно проверить:
  1. есть ли доступ к интернету;
  2. отвечает ли виртуальный сервер на пинги;
  3. запущен ли на виртуальном сервере VNC-сервер;
  4. нет ли по пути файервола, закрывающего доступ к TCP-порту VNC-сервера;
  5. правльно ли указан номер дисплея или TCP-порт VNC-сервера (номер порта = 5900 + номер дисплея).
Медленная работа через достаточно быстрый канал
Если VNC-клиент не может согласовать с VNC-сервером использование алгоритм кодирования графики с компрессией данных, выбирается алгоритм по умолчанию - Raw, который передает данные без сжатия. Также кодирование без сжатия или с низким уровнем сжатия может автоматически выбираться VNC-клиентом при работе через быструю локальную сеть. Данную проблему можно исправить, принудительно указав в настройках VNC-клиента алгоритм кодирования с высоким уровнем сжатия - ZLib, ZRLE, Tight.

Однако, для некоторых сочетаний клиента и сервера такое решение может быть бесполезным из-за ошибок в согласовании алгоритма кодирования. Например, клиент TightVNC с сервером RealVNC часто могут работать только с кодировкой Raw. Решением в этом случае будет смена VNC-клиента или VNC-сервера.

VNC (или Virtual Network Computing) – это система, позволяющая пользоваться графическим интерфейсом удалённого сервера. Она может передавать обновления экрана и события клавиатуры и мыши по сети.

Система VNC полезна в ситуациях, когда сервер нуждается в графическом окружении рабочего стола.

XFCE – это легковесное графическое окружение рабочего стола. В данном руководстве будет использоваться XFCE, поскольку у него низкие требования к ресурсам системы, и многие пользователи знакомы с этим инструментом.

Примечание: При желании можно пользоваться и другим окружением рабочего стола (Gnome или KDE, к примеру).

Данное руководство поможет подготовить Debian 8, установить окружение рабочего стола XFCE и настроить VNC. Кроме того, в руководстве показано, как создать скрипт запуска сервера VNC и защитить его по SSH.

Требования

Предварительно настроенный Debian 8 (или 8.1) с root-доступом. 512 MB памяти будет достаточно для запуска VNC и XFCE. Однако в зависимости от ваших планов вам может понадобиться и больший объём памяти.

Клиент VNC на компьютере, чтобы иметь возможность подключиться к серверу. В руководстве используется UltraVNC в системе Windows, но, конечно, можно использовать любой другой клиент VNC. Загрузить UltraVNC можно по этой ссылке. Система OS X поставляется с собственным клиентом VNC, Screen Sharing.

SSH-клиент для безопасного подключения. В системе Windows будет использоваться PuTTY (загрузить можно здесь). В OS X используйте встроенное приложение терминала.

1: Установка VNC и XFCE

Сначала нужно установить сервер VNC и окружение рабочего стола XFCE, а также несколько дополнительных программ.

Обновите список пакетов сервера:

Теперь обновите список пакетов

apt-get -y upgrade

Установите пакеты tightvncserver, XFCE4, несколько полезных пакетов и icon-theme:

apt-get install xfce4 xfce4-goodies gnome-icon-theme tightvncserver

По умолчанию браузер не установлен. Вы можете установить iceweasel (версия Mozilla Firefox для Debian), чтобы иметь возможность просматривать сайты:

apt-get install iceweasel

2: Создание пользователя для VNC

Создайте отдельного пользователя для подключений VNC. Рекомендуется использовать sudo вместо пользователя root.

Чтобы добавить на сервер пользователя vnc, выполните команду:

Создайте пароль для нового пользователя. На остальные вопросы можно просто нажать Enter, чтобы принять стандартные данные.

Чтобы установить sudo, используйте команду:

apt-get install sudo

Добавьте нового пользователя vnc в группу sudo, что передаст ему привилегии root.

gpasswd -a vnc sudo

Переключитесь в сессию пользователя vnc:

3: Запуск сервера VNC

В сессии пользователя vnc запустите сервер VNC и проверьте соединение.

При первом запуске программа предложит установить пароль для соединения с клиентами. Установите пароль и запомните/запишите его, он понадобится в дальнейшем. Кроме того, можно установить пароль только для просмотра, который позволит пользователям видеть экран, но заблокирует взаимодействие с ним. Примечание: Пароль должен состоять из 6-8 символов.

На экране появится номер текущего дисплея:

xauth: file /home/vnc/.Xauthority does not exist
New "X" desktop is vnc:1
Creating default startup script /home/vnc/.vnc/xstartup
Starting applications specified in /home/vnc/.vnc/xstartup
Log file is /home/vnc/.vnc/vnc:1.log

По умолчанию первое соединение VNC обслуживается на порте 5901, второе – на 5902, и т.д.

Примечание: На данном этапе останавливать сервер не нужно. Команда для остановки сервера приведена ниже для справки.

Чтобы остановить сервер VNC, запустите на Display 1 (порт 5901) следующую команду:

vncserver -kill:1

где:1 – номер дисплея, который нужно остановить.

При необходимости сервер VNC можно запустить вручную. Позже будет показано, как создать сервис для VNC.

4: Подключение с клиента

Теперь можно подключиться к VNC. Для этого используйте локальный VNC-клиент, который зависит от операционной системы.

На Windows можно использовать UltraVNC.

OS X предоставляет для этого встроенное приложение Screen Sharing. Можно также использовать Safari. Для этого введите:

vnc://yourserverip:5901

В качестве адреса сервера VNC введите:

yourserverip:5901

и укажите только что выбранный пароль для VNC-подключений.

Теперь можно пользоваться удалённым рабочим столом.

5: Создание сервиса для VNC

Теперь можно создать сервис, добавив VNC в system. Сервисы позволяют запускать и останавливать VNC-сервер, а также запускать его автоматически при перезагрузке виртуального сервера.

Остановите текущий интерфейс:

vncserver -kill:1

Создайте простой скрипт для управления сервером VNC.

В сессии пользователя vnc (или любого другого пользователя с правами sudo) создайте скрипт-файл.

Вставьте в него следующий код без изменений. Этот скрипт содержит несколько параметров для запуска VNC.

#!/bin/bash
PATH="$PATH:/usr/bin/"
DISPLAY="1"
DEPTH="16"
GEOMETRY="1024x768"

case "$1" in
start)
/usr/bin/vncserver ${OPTIONS}
;;
stop)
/usr/bin/vncserver -kill:${DISPLAY}
;;
restart)
$0 stop
$0 start
;;
esac
exit 0

Можно немного изменить скрипт, чтобы отрегулировать глубину цвета VNC.

В текстовом редакторе nano нажмите CTRL+O, чтобы сохранить, и CTRL+X, чтобы закрыть файл.

Сделайте файл исполняемым:

sudo chmod +x /usr/local/bin/myvncserver

Этот скрипт позволяет редактировать настройки и быстро запускать и останавливать сервер.

Примечание: При необходимости скрипт можно запустить/остановить вручную.

sudo /usr/local/bin/myvncserver start
sudo /usr/local/bin/myvncserver stop
sudo /usr/local/bin/myvncserver restart

Теперь можно создать файл для сервиса, чтобы описать его и сообщить машине, как запустить/остановить/перезапустить этот сервис.

sudo nano /lib/systemd/system/myvncserver.service

Скопируйте следующий код в файл. Данный сервис будет просто вызывать ранее созданный скрипт запуска.


Description=Manage VNC Server on this droplet
Type=forking
ExecStart=/usr/local/bin/myvncserver start
ExecStop=/usr/local/bin/myvncserver stop
ExecReload=/usr/local/bin/myvncserver restart
User=vnc
WantedBy=multi-user.target

Перезапустите systemctl и включите сервис:

sudo systemctl daemon-reload
sudo systemctl enable myvncserver.service

Итак, теперь сервис включен. Используйте следующие команды для управления сервисом при помощи systemctl:


sudo systemctl stop myvncserver.service
sudo systemctl restart myvncserver.service

Запустите сервер VNC как сервис.

6: Защита VNC при помощи SSH-туннелирования

По умолчанию соединения VNC не шифруются. Потому для защиты данных рекомендуется использовать SSH-туннель.

Для этого нужно разрешить запуск VNC только на локальном хосте. Добавьте флаг -localhost в строку OPTIONS в ранее созданном скрипте.

Остановите сервер VNC:

sudo systemctl stop myvncserver.service

Отредактируйте скрипт:

sudo nano /usr/local/bin/myvncserver

Найдите эту строку:

. . .
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
. . .

И замените её:

. . .
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost"
. . .

Затем запустите VNC:

sudo systemctl start myvncserver.service

Теперь можно подключаться к серверу VNC с удалённого компьютера.

Для пользователей Windows

Для создания SSH-туннеля используйте PuTTY.

Откройте PuTTY.

В левом меню перейдите в раздел Connection->SSH->Tunnels.

В разделе Add New Forwarded Port укажите порт 5901 как Source port, а в поле Destination укажите localhost:5901. Нажмите Add.

Затем откройте раздел Session и в поле Host Name (or IP address) введите свой IP-адрес. Чтобы подключиться, нажмите Open.

Откройте сессию vnc. Не закрывайте окно PuTTY, пока соединение VNC не установится.

Затем используйте клиент VNC. Просто введите localhost::5901 и переведите соединение SSH в фоновый режим.

Для пользователей OS X

Чтобы создать SSH-туннель, введите в терминал:

ssh vnc@your_server_ip -L 5901:localhost:5901

Пройдите аутентификацию. Затем укажите localhost:5901 для Screen Sharing.

Заключение

Теперь у вас есть доступ к расшаренному удалённому рабочему столу на сервере Debian 8, который можно использовать для настройки сервера или совместного работы.

Tags: ,

VNC - программа для удаленного соединения между Windows, Mac OS X, UNIX и Linux компьютерами.

Лицензия на программное обеспечение позволяет удовлетворить все ваши потребности, от индивидуального (личного) использования, до надежного, гибкого и ультра-безопасного решение корпоративного класса.

Бесплатная версия только для личного использования не включает шифрование соединения и ряд premium-функций Personal и Enterprise версии.

Сравнение версий

Основные возможности VNC

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

Чтобы использовать VNC эффективно, компоненты сервера и клиента должны быть развернуты на двух разных компьютерах (можно настроить на ранних стадиях установки). Клиентское приложение VNC Viewer должно подключаться к серверу перед стартом любого подключения. Кроме того, перед тем, как использовать данное приложение, нужно получить лицензионный ключ онлайн в зависимости от предпочитаемого набора функций.

После успешной установки соединения, пользователи могут сохранить подробную информацию для дальнейшего использования с помощью создания так называемой адресной книги VNC. Экраны подключенных компьютеров можно просматривать в полноэкранном режиме, что улучшает отображение на поврежденном или инфицированном компьютере. С помощью одного клика мыши, Вы можете начать сеанс общения по чату или отправить команду Ctrl+Alt+Del, а также узнать скорость соединения.

Опытные пользователи могу получить доступ к окну настроек клиентского приложения для включения и отключения ввода с клавиатуры и мыши, активации режима “только для чтения” и изменения уровень масштабирования.

Каждый раз, когда пользователь хочет предупредить несанкционированные подключения, он может защититься паролем. VNC поддерживает данную возможность, позволяя задавать мастер-пароль, который будет запрашиваться каждый раз при подключении.

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

Июль 28

В новых версиях Ubuntu уже есть встроенный VNC сервер . Мы будем использовать его стандартные средства. Пока разбирался в данном вопросе — пришлось почитать приличное количество форумов. Так вот, многие пользователи пишут, что в версии ubuntu 14.04 данный фокус не проходит из-за каких-то внутренних тонкостей устройства ядра. Я в данный вопрос глубоко не вдавался…в любом случае, если вдруг вы являетесь счастливым обладателем именно этой версии — можете воспользоваться альтернативным сервером x11vnc.

Ставится он довольно просто:

Sudo apt-get remove vino sudo apt-get install x11vnc

В этой же статье, будет рассмотрен стандартный VNC сервер уже включенный в ubuntu по умолчанию. Как все настроить?

Коннектимся к удаленному хосту.

Подключаемся через ssh к удаленному компьютеру, к которому хотим получить графический доступ. При этом мы должны знать его ip и логин с паролем пользователя — экран которого хотим видеть. По сути — нам подойдут данные любого пользователя с правами sudo, но тогда прийдется донастраивать некоторые моменты.

Итак, допустим в локальной сети мы имеем компьютер под ubuntu с ip адресом 10.20.0.30 и пользователем feanor184 . Коннектимся к нему из консоли с ключем -X (для запуска графических иксов):

Ssh -X [email protected]

вводим пароль и попадаем в консоль нашего удаленного компьютера.

Теперь, вводим в ней:

Sudo vino-preferences

и видим графическое окно

Тут ставим галочки:

allow other users to view your desktop — разрешаем смотреть рабочий стол.

allow other users to control your desktop — разрешаем управлять мышкой и клавиатурой удаленно.

require the user to enter this password — обязательно устанавливаем пароль на подключение. Мало ли кто лазиет в нашей сети

show notification area icon: always — всегда отображаем иконку vnc вверху экрана в трее.

Вы можете выставить так же свои настройки — здесь описаны мои настройки)

Сохраняем настройки и отсоединяемся от удаленного хоста.

Для подключения к настроенному компьютеру используем любой клиент с поддержкой vnc.

Например, Remmina — для Linux.

UltraVNC Viewer — для Windows.

Еще раз напоминаю, для того чтобы описанные настройки подключения работали, на удаленном компьютере должна стоять ОС ubuntu. Установка ubuntu , это отдельная тема, на которой тут не хотелось бы акцентировать внимание, поэтому этот шаг мы пропустим. В интернете много мануалов по данной теме.

Что имеем в итоге?

Мы получили возможность подключаться к удаленному компьютеру под ubuntu и выполнять на нем любые операции так, как если бы мы сами сидели за его монитором

Как помочь своим пользователям получить доступ к многопользовательской Linux-системе из любого места

Архитектура VNC и X server

В качестве графического интерфейса пользователя (GUI) в Linux®применяется X Window System (сокращенно X ). X - это необычный GUI в нескольких отношениях, в частности, это изначально сетевой интерфейс. X-сервер , по сути, представляет собой программу сетевого сервера. Программы сетевого сервера предоставляют клиентским программам доступ к локальным ресурсам, и это верно также для X-сервера. Особенность заключается в том, что в случае Х-сервера "локальные ресурсы" – это дисплей, клавиатура и мышь, с которыми работает пользователь. В самой распространенной конфигурации программы Х-клиента работают на том же компьютере, что и сервер. Таким образом, LibreOffice, GNU Image Manipulation Program (GIMP) или другие программы являются X-клиентами, использующими сетевые протоколы Х для приема данных от пользователя и отображения результатов на том же компьютере.

Однако когда X используется в сети, пользователь сидит за компьютером X-сервера, а X-клиентами служат программы, которые нужно запускать на другом компьютере. Для этой конфигурации требуется второй сетевой протокол, устанавливающий соединение. Таким вторым протоколом может быть telnet, Secure Shell (SSH) или X Display Manager Control Protocol (XDMCP). Сервер этого протокола удаленного входа работает на компьютере X-клиента, а клиент удаленного входа ― на компьютере X-сервера. Сервер удаленного входа запускает X-клиенты, которые, в свою очередь, устанавливают соединение с X-сервером. иллюстрирует это взаимодействие. Пунктирными стрелками обозначено начало сеанса. (В случае XDMCP XDMCP-клиент встроен в программу X-сервера.)

Рисунок 1. Для удаленного доступа X требуется клиент и сервер на обоих компьютерах

Эта конфигурация прекрасно работает во многих локальных сетях, но не лишена недостатков. Например, для нее нужно инициировать двусторонний сетевой протокол, а этому может помешать межсетевой экран или маршрутизатор Network Address Translation (NAT). (SSH устраняет это препятствие, позволяя туннелировать X-сеансы.) Кроме того, хотя существуют X-серверы для большинства платформ, они обычно не устанавливаются на компьютерах под управлением Windows®. По этим и иным причинам многие предпочитают использовать другой протокол, Remote Frame Buffer (RFB), который реализован в семействе программ Virtual Network Computing (VNC).

VNC - это кроссплатформенный инструмент, который обеспечивает удаленный доступ к Linux, UNIX®, Mac OS X, Windows и другим системам из клиента любого типа. Пользователь сидит за клиентским компьютером и обращается к удаленному серверному компьютеру. В Linux VNC-сервер либо зеркально отражает содержимое локального экрана Х-сервера на удаленный компьютер, либо содержит свой собственный X-сервер, способный работать независимо от того, что управляет локальным экраном. Результат показан на рисунке 2. Опять же, пунктирная стрелка указывает начало сеанса. Эта конфигурация устраняет необходимость в обратном сетевом соединении, а так как клиенты и серверы VNC имеются для многих операционных систем, одна и та же клиентская программа обеспечивает доступ к любому серверу.

Рисунок 2. В состав VNC-сервера входит X-сервер, способный взаимодействовать с локальными программами через X-клиент

Недостаток VNC заключается в том, что аутентификация RFB основана на паролях без имен пользователей. Таким образом, каждый пользователь должен запускать независимый сеанс VNC-сервера и устанавливать соединение с этим экземпляром VNC, указав правильный номер порта. Это требование терпимо для однопользовательской системы, но вызывает крайние неудобства при работе на многопользовательском компьютере.

Для решения этой проблемы можно объединить эти два подхода: перенастроить локальный XDMCP-сервер так, чтобы он помогал X-серверу, встроенному в VNC, обеспечить недостающую многопользовательскую аутентификацию. (Результирующая конфигурация иллюстрируется на рисунке 3. Пунктирная стрелка указывает начало сеанса.) Теперь, когда удаленные пользователи VNC обращаются к компьютеру VNC-сервера, они могут вводить имена пользователей и пароли доступа к своим собственным уникальным сеансам VNC, так что с компьютером могут работать сколько угодно пользователей.

Рисунок 3. Добавление XDMCP к конфигурации VNC обеспечивает повышенную гибкость

Настройка VNC-сервера

Существует несколько способов запуска VNC, включая использование сценариев, привязку VNC к среде рабочего стола с помощью настольных инструментов и использование xinetd для прослушивания VNC-соединений. Этот последний подход и описывается здесь, так как он позволяет запускать VNC так, что тот может использовать XDMCP-сервер. Прежде чем перейти к инструкциям по настройке VNC для запуска посредством xinetd , необходимо выбрать VNC-сервер.

Выбор VNC-сервера

Существует несколько программ VNC-сервера. (См. раздел ). Некоторые из наиболее популярных: TightVNC, TigerVNC и RealVNC. В этой статье в качестве примера используется TightVNC. К сожалению, детали конфигурации зависят как от сервера, так и от дистрибутива, поэтому приведенные здесь инструкции нужно будет адаптировать к своему программному обеспечению.

Установка xinetd

Многие дистрибутивы устанавливают суперсервер xinetd по умолчанию, но не все. Так как описанный здесь метод предполагает использование xinetd , необходимо установить xinetd , если он еще не установлен. В большинстве дистрибутивов xinetd можно установить с помощью менеджера пакетов, например, вызывав apt-get install xinetd в дистрибутивах на основе Debian или zypper install xinetd в openSUSE.

Может также потребоваться настройка процесса запуска xinetd . Обычно для одноразового запуска можно использовать сценарий запуска System V (SysV):

# /etc/init.d/xinetd start

Для настройки автоматического запуска xinetd при загрузке компьютера требуется знание методов работы сценариев запуска своего дистрибутива. Как правило, это делается с помощью утилиты, такой как chkconfig (используется в Fedora, openSUSE и родственных дистрибутивах), update-rc.d (используется в Debian и родственных дистрибутивах) или rc-update (используется в Gentoo), примерно так:

# chkconfig xinetd on # update-rc.d xinetd enable # rc-update add xinetd default

Введите только одну из этих команд или найдите эквивалент для своего дистрибутива.

Заметим, что xinetd может не запускаться, если он не настроен на выполнение каких-либо служб. Так что, возможно, придется отложить его запуск до тех пор, пока вы не настроете xinetd для управления своим VNC-сервером.

Настройка xinetd

Серверы, которыми должен управлять xinetd , помещают файлы конфигурации в каталог /etc/xinetd.d. Таким образом, чтобы настроить xinetd на управление VNC, нужно создать или отредактировать файл с именем типа /etc/xinetd.d/vnc. (В некоторых дистрибутивах, таких как openSUSE, пакет VNC-сервера устанавливает такой файл.) В листинге 1 приведен пример.

Листинг 1. Пример настройки VNC для xinetd
service vnc { disable = no socket_type = stream protocol = tcp wait = no user = nobody server = /usr/bin/Xvnc server_args = -inetd -once -query localhost -geometry 1024x768 -depth 16 type = UNLISTED port = 5900 }

Эта запись задает несколько параметров xinetd , большинство из которых нужно оставить как есть. Ниже перечислены те параметры, которые могут потребовать настройки.

  • service . VNC с разными параметрами можно запустить через несколько портов, но в этом случае в первой строке листинга 1 нужно присвоить VNC отдельное имя службы для каждого порта.
  • server . Этот параметр нужно изменить так, чтобы он указывал на главный двоичный файл VNC-сервера, который обычно называется Xvnc.
  • server_args . Некоторые из этих значений вы почти наверняка захотите изменить, как описано ниже.
  • port . VNC использует порты с номерами 5900 и выше. Можно запустить сервер с разными значениями параметров через разные порты. В этом случае каждому экземпляру нужно назначить свой номер порта.

Самая каверзная часть настройки xinetd - это настройка аргументов сервера. В качестве модели можно использовать аргументы, приведенные в листинге 1, изменив некоторые из них.

  • -query localhost . Этот параметр указывает, что сервер VNC X должен проверять систему localhost на аутентификацию XDMCP. Его можно изменить, если вы хотите использовать один компьютер в качестве транслятора для доступа к программам другого.
  • -geometry 1024x768 . Этот параметр устанавливает виртуальное разрешение сеанса VNC. Заметим, что это разрешение не обязательно должно соответствовать разрешению обычного X-сервера, работающего на компьютере сервера. Можно создать несколько записей, работающих с разным разрешением, чтобы пользователи могли входить в VNC-сервер с тем разрешением, которое удобно для их локальных систем.
  • -depth 16 . Этот параметр задает глубину цвета. Чем ниже значение, тем быстрее обновляется дисплей, но на экране с большим количеством цветов могут появиться искажения. Диапазон допустимых значений от 2 до 32.

Имеются многие другие параметры, и некоторые из них зависят от VNC-сервера. Обращайтесь к документации по своему серверу VNC.

Настройка XDMCP-сервера

Большинство дистрибутивов Linux настраивают свои XDMCP-серверы только для управления локальным дисплеем. Чтобы обеспечить удаленный доступ, нужно перенастроить XDMCP-сервер так, чтобы принимать запросы на доступ с VNC-сервера, работающего на том же компьютере. Детали зависят от XDMCP-сервера. Три наиболее часто используемых в Linux ― это GNOME Display Manager (GDM), Light Display Manager (LightDM) и KDE Display Manager (KDM). Для других XDMCP-серверов, таких как XDM, требуются настройки, отличные от описанных здесь. В любом случае после перенастройки XDMCP-сервера его придется перезапустить.

Редактирование файла конфигурации XDMCP

Если вы не уверены, какой XDMCP-сервер используется в вашей системе, это можно определить, просмотрев листинг процесса с помощью строки dm , например:

$ ps ax | grep dm 929 ? Ss 0:00 /usr/bin/kdm 962 tty7 Ss+ 0:19 /usr/bin/Xorg -br:0 vt7 -nolisten tcp -auth \ /var/lib/xdm/authdir/authfiles/A:0-pp4shb 30157 pts/3 S+ 0:00 grep --color=auto dm

В первой строке этой распечатки указано, что работает KDM, поэтому для того чтобы VNC мог использовать XDMCP, нужно отредактировать файл конфигурации этого сервера. Файлы конфигурации большинства программ XDMCP имеют один и тот же формат. Они содержат разделы с именами, указанными в квадратных скобках, например . Строки, следующие за именем раздела, задают параметры через знак равенства, например: enable=true . В таблице 1 перечислены имена файлов конфигурации, имена разделов и параметры, которые необходимо определить, чтобы XDMCP работал на нескольких распространенных XDMCP-серверах Linux.

Таблица 1. Параметры, позволяющие XDMCP поддерживать VNC для разных XDMCP-серверов

Раздел XDMCP в файле конфигурации может полностью отсутствовать. Если он присутствует, он может явно отключать поддержку XMDCP, содержать закомментированные параметры или быть пустым. Независимо от исходного состояния файла необходимо сделать так, чтобы раздел XDMCP присутствовал и чтобы поддержка была включена. В качестве примера рассмотрим настройку KDM для включения XDMCP:

Enable=true

Некоторые дистрибутивы позволяют включить дополнительные меры безопасности, которые потребуется ослабить. Одна из них ― межсетевой экран. Сценарии межсетевых экранов обычно зависят от дистрибутивов, поэтому за инструкциями по настройке межсетевого экрана обращайтесь к документации на свою систему. Нужно, чтобы localhost имел доступ к порту 177, а VNC-клиенты - к порту 5900 (или любым другим портам, которые используются для VNC).

В OpenSUSE есть дополнительный файл конфигурации, который управляет некоторыми типами доступа, включая XDMCP-доступ: /etc/sysconfig/displaymanager. Откройте этот файл в текстовом редакторе и найдите следующую строку:

DISPLAYMANAGER_REMOTE_ACCESS="no"

Измените значение этого параметра на "yes" . Если оставить "no" , окно входа XDMCP-сервера при подключении к VNC-серверу отображаться не будет. В большинстве дистрибутивов такое изменение не требуется: этот файл использует только openSUSE.

Перезапуск XDMCP-сервера

Когда XDMCP-сервер настроен на поддержку удаленных соединений, его необходимо перезапустить. В дистрибутивах, которые запускают X посредством файла инициализации SysV, таких как Debian и Gentoo, это можно сделать с помощью параметра restart:

# /etc/init.d/gdm restart

В системе, которая для запуска X использует уровень runlevel, такой как Fedora или openSUSE, нужно перейти на уровень текстового режима (обычно 3), а затем вернуться на уровень GUI (обычно 5):

# telinit 3 # telinit 5

Имейте в виду, что при любом подходе производится выход из X, поэтому прежде чем продолжать, сохраните всю проделанную в сеансе X работу.

Тестирование и отладка

Теперь можно входить в систему с удаленного компьютера с помощью VNC-клиента. Большинство дистрибутивов Linux содержат команду vncviewer , так что можно ввести:

vncviewer

Чтобы войти в систему remotename через VNC. Если VNC настроена и работает правильно, результат будет примерно таким, как показано на рисунке 4. Если настроить несколько сеансов VNC через разные порты, можно указать номер сеанса VNC, передав его как часть имени хоста. Введите:

vncviewer:3

Чтобы войти в сеанс 3 (через порт 5903).

Рисунок 4. При настройке на работу с XDMCP VNC обеспечивает обычное приглашение Linux

Если при выполнении этого теста вы не видите экран входа в систему XDMCP, придется произвести отладку. Ниже приведены некоторые рекомендации.

  • Если vncviewer сообщает, что в соединении было отказано, это, скорее всего, означает, что суперсервер на компьютере сервера VNC не настроен должным образом. Проверьте конфигурацию xinetd и попробуйте перезапустить суперсервер. Возможно также, что межсетевой экран блокирует доступ к компьютеру VNC-сервера.
  • Если VNC-клиент запускается и подключается к серверу, но вы видите только серый экран с курсором, который можно перемещать, проблема, скорее всего, в настройке XDMCP-сервера. Проверьте описанные выше параметры и перезапустите XDMCP-сервер.
  • Просмотрите файлы журнала событий, как это обычно делается при отладке. Может потребоваться поиск всех файлов журнала в каталоге /var/log по ссылкам на ваши xinetd , XDMCP-сервер и VNC-сервер.

Вопросы безопасности VNC

RFB не является безопасным протоколом; большинство VNC-клиентов и серверов не шифруют свои данные. (VNC шифрует свои собственные пароли, но при описанном здесь подходе эти пароли не используются.) Будьте осторожны при выборе способа и места установки VNC. Если вы хотите использовать VNC в незащищенной сети, возможны три варианта:

  • использовать виртуальную частную сеть (VPN);
  • туннелировать протокол через SSH;
  • использовать вариант VNC, поддерживающий шифрование, такой как TigerVNC с возможностью шифрования Transport Layer Security.

При включении окон входа VNC, как описано в этой статье, во внешний мир открываются, по крайней мере, два порта (VNC и XDMCP). Оба порта можно ограничить правилами межсетевого экрана, чтобы свести к минимуму риск злоупотреблений. Заметим, что порт XDMCP (UDP 177) должен быть открыт только для localhost, поэтому правило межсетевого экрана для него может быть весьма ограничивающим.

Заключение

В целом соединение VNC и XDMCP ― полезный метод обеспечения удаленного входа с графическим интерфейсом пользователя для многопользовательских Linux компьютеров. Этот метод имеет преимущества по сравнению с прямым применением XDMCP в кроссплатформенной среде или при наличии проблем, вызванных межсетевым экраном или NAT. На многопользовательских компьютерах он предпочтительнее более распространенных способов прямого подключения VNC. При использовании этого метода необходимо рассмотреть вопросы безопасности. Будьте готовы настроить правила межсетевого экрана для ограничения нежелательного доступа извне и используйте шифрование, если данные передаются по ненадежной сети.