Недавно встала задача настроить удалённый доступ по VNC к рабочему столу Ubuntu, и ничто не предвещало беды, т.к. в последних версиях Ubuntu есть встроенный VNC-сервер Vino, который прекрасно работает. Но на Ubuntu 14.04 почему-то работать он отказался, подключение заканчивалось ошибкой » no supported authentication methods!», и никакие манипуляции с настройками проблему не решили. Чтобы не тратить время зря, я решил воспользоваться альтернативным VNC-сервером — X11vnc. Давайте разберёмся, как его настроить.

Установка и настройка X11vnc на Ubuntu 14.04

Первым делом давайте удалим Vino, всё равно корректной работы от него добиться не удаётся, да и в функциональности X11vnc он несколько проигрывает.

Удалим Vine

Для этого открываем терминал и вводим:

Sudo apt-get remove vino

По запросу вводим пароль администратора, подтверждаем удаление.

Теперь установим X11vnc (необходимо подключение к сети Интернет), всё очень просто — вводим в терминале команду:

Sudo apt-get install x11vnc

Подтверждаем установку пакета. Загрузка и установка займёт около одной минуты, ждём завершения.

Соглашаемся с записью пароля в файл

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

X11vnc -storepasswd

Вводим пароль два раза, после соглашаемся на запись в файл. Пароль будет сохранён в файл /home/USER/.vnc/passwd (где «USER» — имя пользователя, под которым мы совершаем настройку, у меня, например, пользователь именуется «test»).

В общем-то уже можно пользоваться, но это будет не слишком удобно по нескольким причинам:

  • X11vnc не будет запускаться при загрузке системы, это не удобно, так как каждый раз для удалённого подключения придется вручную запускать VNC сервер, а это иногда просто не возможно.
  • Если за удалённым компьютером не зарезервирован IP-адрес, то будет непонятно, куда подключаться (или пробрасывать порт), и каждый раз перед подключением нам каким-то образом придётся узнавать IP-адрес удалённого компьютера.

Давайте решим данные проблемы.

Автозагрузка X11vnc на Ubuntu

Тут всё тоже очень просто. Первым делом с помощью встроенного текстового редактора Gedit создадим файл /etc/init/x11vnc.conf, для этого в терминале вводим:

Sudo gedit /etc/init/x11vnc.conf

По запросу вводим пароль администратора. Откроется текстовый редактор, в тело открытого файла пишем:

Start on login-session-start script x11vnc -dontdisconnect -display:0 -auth /var/run/lightdm/root/:0 -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -rfbauth /home/USER/.vnc/passwd end script

В предпоследней строчке вместо «USER» необходимо указать имя пользователя, под которым выполнялась настройка, у меня это «test».

Теперь при включении удалённого компьютера X11vnc будет включаться автоматически. Что важно — запуск сервера будет происходить до авторизации пользователя.

Сетевые настройки для VNC

Теперь давайте разберёмся с IP-адресом.

Жмём на «стрелки»

Жмём на иконку передачи данных в правом верхнем углу экрана и в открывшемся списке выбираем «Изменить соединение».

Изменим способ настройки

В открывшемся окне выбираем используемое соеденение (у меня это «Проводное соединение 1») и правее жмём «Изменить».

В открывшемся окне переходим на вкладку «Параметры IPv4», выбираем из выпадающего списка способ настройки «Вручную».

Ниже жмём «Добавить» и прописываем сетевые настройки, которые соответствуют настройкам DHCP-сервера Вашего маршрутизатора (в столбце «Адреса» будет постоянный IP-адрес удалённого компьютера).

Когда все сетевые параметры вписаны, сохраняем

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

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

Всё настроено, осталось только подключиться. Для этого нам понадобится VNC-клиент. Я использую UltraVNC Viewer (скачать можно прямо с официального сайта бесплатно — ссылка , зеркало — ссылка (v. 1.2.0.3)).

После загрузки запускаем *.exe файл и, следуя инструкциям установщика, инсталлируем программу. После завершения запускаем.

Указываем IP сервера

Настройки очень простые: в поле «VNC Server:» вписываем IP-адрес (который получает удалённый компьютер) и жмём «Connect». После будет запрошен пароль — вводим пароль и жмём «Log On».

Подключение произошло

Произойдёт подключение к удёлённому компьютеру, можно пользоваться 🙂

Почему не заработал Vino — остаётся загадкой.. С такими же настройками на прошлых версиях Ubuntu всё работало. Если кому-нибудь известна причина — пишите в комментариях.

Несмотря на то, что Raspberry Pi прекрасно работает с монитором или телевизором с помощью кабеля HDMI, часто возникают ситуации, когда монитор не нужен и вполне достаточно видеть рабочий стол удаленно с другого комьютера. В этом случае нам поможет VNC. К слову, удаленно можно решить большинство задач, таких как программирование или настройка операционной системы.
Что нам понадобится?

Предполагается, что на Raspberry Pi установлена операционная система (специальная версия Linux дистрибутива Debian), а на удаленном компьютере установлена Windows 7. Для этого необходимо установить какой либо клиент VNC для Windows, например UltraVNC — она достаточно удобная и бесплатная.
Страница загрузки UltraVNC

Когда VNC сервер будет настроен и запущен, то клиента UltraVNC будет достаточно для того, чтобы удаленно подключиться к Raspberry Pi. Однако, если мы будем настраивать VNC также в удаленном режиме, то дополнительно понадобится клиент SSH — бесплатная программа PuTTY.
Страница загрузки PuTTY

Последнее, что нам нужно, это IP адрес вашего Raspberry Pi. Если ему присвоен статический адрес, то этого достаточно. Если вы знаете, как посмотреть IP адрес на вашем маршрутизаторе, то этого также будет достаточно. Если же адрес не известен и посмотреть его нет возможности, то понадобится программа для сканирования IP адресов в сети. Для этого вполне подойдет Advanced IP Scanner, он просканирует локальную сеть и покажет список всех устройств с указанием IP адреса каждого. Чаще всего определить адрес Raspberry Pi не сложно, в списке он имеет имя «raspberrypi» или подобное.
Страница загрузки Advanced IP Scanner

В случае с маршрутизатором, чаще всего достаточно просмотреть список подключенных устройств, Raspberry Pi можно определить таким же способом, как описано выше. К сожалению, описать как это сделать подробнее в рамках этой статьи не представляется возможным — все маршрутизаторы немного отличаются друг от друга.

Запускаем SSH на Raspberry Pi

Начнем с того, что такое SSH. Это программа, которая может быть запущена в операционной системе Linux и позволяет получить удаленный доступ к консоли (командной строке) Raspberry Pi. С ее помощью можно запустить любую программу или выполнить команду в командной строке удаленно, при помощи клиента SSH — PuTTY.

По умолчанию в Raspbian сервер SSH отключен, поэтому сначала его нужно будет запустить. Для этого придется подключить Raspberry Pi к монитору или телевизору и подключить к нему USB клавиатуру. Есть два способа запустить сервер SSH. Более простой заключается в использовании программы raspi-config. Для этого необходимо набрать команду и выбрать пункт «ssh Enable or disable ssh server » в предложенном меню:

Другой способ, это ввести команду sudo /etc/init.d/ssh start , как показано ниже:

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

Наконец, опишем способ запустить сервер SSH без использования монитора и клавиатуры. Для этого необходимо вынуть SD карту с установленной Rasbian, вставить ее в картридер и подключить к компьютеру под управлением Windows.
SD карта Raspberry Pi имеет небольшой раздел, отформатированный в системе Fat32, понятной Windows. На этом разделе содержатся некоторые конфигурационные файлы. Содержимое SD карты выглядит так:

Для того, чтобы обеспечить запуск сервера SSH нужно переименовать файл boot_enable_ssh.rc в boot.rc:

Теперь достаточно вставить SD карту обратно в Raspberry Pi и включить его. Сервер SSH будет запущен!

Подключаемся через SSH

Как было сказано выше, для того чтобы подключиться к Raspberry Pi удаленно с использованием VNC необходимо сначала запустить сервер VNC. Ниже показано, как выполнить эту процедуру так же в удаленном режиме. Для этого понадобится клиент SSH — PuTTY. После загрузки программы PuTTY, достаточно просто запустить полученный файл, установка не требуется. Откроется такое окно:

В поле Host Name вводится IP адрес, найденный в начале. Затем нажимаем кнопку Open. Как только PuTTY подключится к SSH серверу, откроется окно терминала и появится запрос учетных данных (пользователь pi с паролем raspberry по умолчанию):

Как только будут введены верные учетные данные, появится приглашение командной строки. Здесь можно ввести любую команду Raspberry Pi:

Настройка VNC сервера через SSH

Теперь, когда соединение установлено, необходимо запустить VNC сервер. Если сервер запускается впервые, то вероятнее всего, нужно сначала выполнить установку. Предполагается, что Raspberry Pi имеет выход в интернет, поскольку он понадобится для установки сервера VNC. Для этого, выполните команду:
sudo apt-get install tightvncserver
Как было сказано выше, PuTTY выполняет введенные команды непосредственно на Raspberry Pi, поэтому введенная выше команда установит VNC сервер на ваш компьютер.
Обратите внимание: во время установки будет задан вопрос об установке программы без проверки подлинности (Install these packages without verification ?). Понадобится ответить «y» на этот вопрос.

После окончания установки VNC сервер нужно запустить. Для этого используйте команду vncserver:1 -geometry 1280×800 -depth 16 -pixelformat rgb565

Эта команда запустила VNC сервер! В данном случае, это означает, что запущена виртуальная X-сессия (виртуальное представление рабочего стола Raspberry Pi), абсолютно аналогично тому, как по команде startx при загрузке при подключенном мониторе. Теперь, когда вы запустите клиент VNC и подключитесь, то будете подключены именно к этому виртуальному рабочему столу.

Наиболее важная часть этой команды- параметр :1 . Он определяет номер порта на котором будет запущен процесс VNC. Номер порта может быть любым, но нужно запомнить его, он понадобится при подключении. Еще один важный параметр, это разрешение (в данном случае размер) виртуального рабочего стола. Его можно указать любым, однако не стоит указывать больше, чем реальное разрешение компьютера, с которого осуществляется удаленный доступ.

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

Второй пароль, который запросит сервер VNC — это пароль только для просмотра. Если ввести этот пароль при подключении, то можно будет видеть виртуальный рабочий стол, однако клавиатура и мышь будут отключены.

Подключаемся с помощью UltraVNC

После запуска VNC сервера, последнее что остается сделать, это подключиться к нему удаленно. Запустите UtlraVNC, введите IP адрес, номер порта (1) и нажмите кнопку Connect.
И вот — все готово!

Важное замечание! Изображение удаленного стола может отличаться, в зависимости от того, под какими учетными данными был запущен vncserver. При запуске под учетными данными рядового пользователя, т.е. как указано выше, рабочий стол будет выглядеть как обычно. С другой стороны, при запуске vncserver под учетной записью суперпользователя при помощи команды sudo рабочий стол будет выглядеть так, как на изображении ниже. Кстати, тоже самое касается команды startx при работе с Raspberry Pi непосредственно (локально).

В этой статье мы рассмотрим шаги по установке и настройке VNC-сервера в системе CentOS 7. Мы также покажем вам, как безопасно подключаться к серверу VNC через туннель SSH.

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

Предпосылки

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

Установка среды рабочего стола Xfce

Установка CentOS-сервера часто не связана с установленной настольной средой, поэтому мы начнем с установки легкой рабочей среды.

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

Пакеты Xfce доступны в репозиториях EPEL. Если на вашем сервере нет репозитория EPEL, вы можете сделать это, набрав:

Sudo yum install epel-release

После добавления репозитория установите Xfce на свой сервер CentOS, набрав:

Sudo yum groupinstall xfce

В зависимости от вашей системы, загрузка и установка пакетов и зависимостей Xfce может занять некоторое время.

Установка VNC-сервера

TigerVNC – это активно поддерживаемый высокопроизводительный VNC-сервер с .

Введите следующую команду для установки TigerVNC на вашем сервере CentOS:

Yum install tigervnc-server

Теперь, когда установлен VNC-сервер, следующий шаг – запустить команду vncserver , которая создаст начальную конфигурацию и настроит пароль. Не добавляйте sudo в следующую команду:

Vncserver

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

You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n /usr/bin/xauth: file /home/andreyex/.Xauthority does not exist New "server2.andreyex.com:1 (andreyex)" desktop at:1 on machine server2.andreyex.com Starting applications specified in /etc/X11/Xvnc-session Log file is /home/andreyex/.vnc/server2.andreyex.com:1.log

При первом запуске команды vncserver он создаст и сохранит файл пароля в каталоге ~/.vnc , который будет создан, если он отсутствует.

Обратите внимание, что:1 после имени хоста в выводе выше. Это указывает номер порта дисплея, на котором запущен сервер vnc. В нашем случае сервер работает на TCP-порту 5901 (5900 + 1). Если вы создадите второй экземпляр, vncserver он будет запущен на следующем свободном порту, т. Е. :2 Это означает, что сервер работает на порту 5902 (5900 + 2).

Важно помнить, что при работе с серверами VNC:X используется порт отображения 5900+X .

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

Vncserver -kill:1 Killing Xvnc process ID 2432

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

Теперь, когда и Xfce, и TigerVNC установлены на нашем CentOS-сервере, следующим шагом будет настройка TigerVNC для использования Xfce. Для этого откройте следующий файл:

Nano ~/.vnc/xstartup

И изменить последнюю строку exec /etc/X11/xinit/xinitrc на exec startxfce4:

#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4

Сохраните и закройте файл. Приведенный выше сценарий будет автоматически запускаться при каждом запуске или перезапуске сервера TigerVNC.

Если вам нужно передать дополнительные параметры на сервер VNC, вы можете открыть файл ~/.vnc/config и добавить один вариант на строку. Наиболее часто используемые параметры перечислены в файле. Раскомментируйте и измените по своему вкусу.

Вот пример:

# securitytypes=vncauth,tlsvnc # desktop=sandbox geometry=1920x1080 # localhost # alwaysshared dpi=96

Создание файла unitd unit

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

Sudo cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service

Откройте файл с помощью текстового редактора и замените его на фактическое имя пользователя.

Sudo nano /etc/systemd/system/vncserver@\:1.service

/etc/systemd/system/vncserver@:1.service

Description=Remote desktop service (VNC) After=syslog.target network.target Type=forking # Clean any existing files in /tmp/.X11-unix environment ExecStartPre=/bin/sh -c "/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :" ExecStart=/usr/sbin/runuser -l andreyex -c "/usr/bin/vncserver %i" PIDFile=/home/andreyex/.vnc/%H%i.pid ExecStop=/bin/sh -c "/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :" WantedBy=multi-user.target

Сохраните и закройте файл. Сообщите системе, что мы создали новый файл с помощью:

Sudo systemctl daemon-reload

Следующий шаг – включить файл устройства со следующей командой:

Sudo systemctl enable vncserver@:1.service

Число 1 после знака @ определяет порт отображения, на котором будет работать служба VNC, в нашем случае это значение по умолчанию, 1 и сервер VNC будет прослушивать порт, 5901 как мы обсуждали в предыдущем разделе.

Запустите службу VNC, выполнив:

Sudo systemctl start vncserver@:1.service

Убедитесь, что служба успешно запущена:

Sudo systemctl status vncserver@:1.service ● vncserver@:1.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2018-09-16 09:59:53 UTC; 4s ago Process: 6391 ExecStart=/usr/sbin/runuser -l andreyex -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS) Process: 6389 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 6413 (Xvnc) CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service ‣ 6413 /usr/bin/Xvnc:1 -auth /home/andreyex/.Xauthority -desktop server2.andreyex.com:1 (andreyex) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/andreyex/.vnc/passwd -rfbport ...

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

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

Настройка туннелирования SSH на Linux и macOS

Если вы запускаете на вашем компьютере , macOS или любую другую операционную систему на базе Unix, вы можете легко создать туннель SSH с помощью следующей команды:

Ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address

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

Не забудьте заменить username и server_ip_address на ваше имя пользователя и IP-адрес вашего сервера.

Настройка SSH-туннелирования в Windows

Если вы запустите Windows, вы можете настроить туннелирование SSH с помощью клиента PuTTY SSH.

Откройте Putty и введите IP-адрес вашего сервера в поле Host name or IP address .

Затем из окна Category: разверните SSH и выберите Tunnels . Введите порт сервера VNC (5901) в поле Source Port и введите server_ip_address:5901 в поле Destination и нажмите кнопку Add , как показано на рисунке ниже:


Подключение с помощью Vncviewer

Теперь, когда вы настроили туннелирование SSH, пришло время открыть Vncviewer и подключиться к VNC-серверу localhost:5901 .

Вы можете использовать любые средства просмотра VNC, такие как TigerVNC, TightVNC, RealVNC, UltraVNC Vinagre и VNC Viewer для Google Chrome.

В этом примере мы будем использовать TigerVNC. Откройте средство просмотра VNC, введите localhost:5901 и нажмите кнопку Connect .


Введите пароль при появлении запроса, и вы увидите рабочий стол по умолчанию Xfce. Он должен выглядеть примерно так:


Теперь вы можете начать взаимодействие с удаленным рабочим столом XFCE на вашей локальной машины с помощью клавиатуры и мыши.

Вывод

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

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

Работа с 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-сервера.

Как помочь своим пользователям получить доступ к многопользовательской 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. При использовании этого метода необходимо рассмотреть вопросы безопасности. Будьте готовы настроить правила межсетевого экрана для ограничения нежелательного доступа извне и используйте шифрование, если данные передаются по ненадежной сети.