Смотреть что такое "VNC" в других словарях. Как поднять свой VNC-сервер в Ubuntu Linux Протокол vnc

Смотреть что такое "VNC" в других словарях. Как поднять свой VNC-сервер в Ubuntu Linux Протокол vnc

Исходя из названия приложения VNC Viewer, многие пользователи сразу могут догадаться, к какому классу программного обеспечения оно относится, например, проведя аналогию с известным пакетом TeamViewer. Однако рядовые пользователи могут столкнуться с такой утилитой впервые, поэтому стоит отдельно остановиться на некоторых вопросах, связанных с тем, как и какую модификацию программы лучше установить, как настроить приложение для оптимального режима работы, как пользоваться VNC Viewer, «выжав» из приложения максимум его возможностей.

Общие сведения о программе VNC Viewer

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

То есть данную программу можно отнести к классу RDP-приложений, предназначенных для подключения к удаленному «Рабочему столу». Однако только доступом к удаленным компьютерам дело не ограничивается, поскольку в самой программе имеется еще немало дополнительных возможностей:

  • Полное управление настройками без ограничений в полноэкранном или оконном режиме.
  • Трансфер файлов.
  • Возможность отсылки сообщений через встроенный чат.
  • Блокирование периферийных устройств, если это необходимо (мыши, клавиатуры и т. д.).
  • Возможность доступа к подключенным ПК через браузер.
  • Организация подключения с несколькими терминалами одновременно.

Сразу же стоит отметить, что технология Virtual Network Computing (VNC)имеет и еще одно неоспоримое преимущество, если сравнивать с аналогами. Дело в том, что в ней есть возможность установки серверной и клиентской части (в зависимости от того, какой именно тип подключения будет использоваться в дальнейшем), плюс, тонкая настройка ПО для каждого варианта установки с целью обеспечения максимальной производительности.

Особенности выбора инсталляционного дистрибутива

Прежде чем приступать к установке, необходимо определиться с выбором модификации VNC-клиента, который предполагается установить. Во-первых, сама программа является кроссплатформенной, может инсталлироваться практически во все известные стационарные и мобильные операционные системы. Во-вторых, для тех же ОС Windows можно найти версии программы RealVNC, TightVNC, UltraVNC и облегченную модификацию UltraVNC SC (все версии совместимы между собой, однако некоторые функции могут оказаться недоступными), для Mac OS X - Chicken и JollysFastVNC. В-третьих, следует определиться с типом устанавливаемого клиента (серверная часть используется для организации подключения с центральной машины к дочерним терминалам, а клиентская - для подключения с дочерних машин к центральному серверу).

В-четвертых, непосредственно на официальном ресурсе разработчика можно выбрать предпочитаемый формат файла установщика VNC Viewer для Windows (EXE, MSI) или загрузить дистрибутив в виде запакованного архива ZIP. Последний пункт - по желанию пользователя.

Установка VNC Viewer

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

Для старта инсталляции в Windows версий 7 и выше файл установщика VNC-клиента запускается исключительно с администраторскими привилегиями (в меню ПКМ выбирается пункт запуска от имени администратора). В самом процессе инсталляции нет ничего необычного.

Пользователю нужно выбрать предпочитаемый язык, принять условия лицензионного соглашения, указать путь установки (его можно не менять), на одной из стадий добавить значок на «Рабочий стол», а затем просто нажать кнопку старта установки.

Первый запуск приложения

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

Как пользоваться VNC Viewer?

Сначала через файловое меню выбираете пункт нового подключения (New Connection), а затем в новом окне вводите IP-адрес удаленного терминала или полное название компьютера (адрес можно узнать на подключаемой машине, воспользовавшись свойствами интернет-соединения или командной строкой с вводом команды ipconfig, а имя компьютера можно просмотреть в свойствах системы). После этого появится окошко запроса пароля, в котором нужно ввести искомую комбинацию. При соответствии комбинации установленному на удаленном компьютере паролю появится удаленный «Рабочий стол».

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

Если внимательно посмотреть на окно создания соединения, в нем можно обнаружить вкладку для экспертов. Если в этих настройках выбрать, например, предпочитаемые алгоритмы сжатия передаваемых и принимаемых данных, то можно существенно снизить нагрузку на центральный процессор и оптимизировать применение технологии Virtual Network Computing даже для сетей с пропускной способностью на уровне 256 кбит/с. Для графики рекомендуется устанавливать высокий уровень компрессии (Compression Level) с минимальным качеством (JPEG Quality), а в качестве дополнительной оптимизации активировать уменьшение количества цветов (Restricted Colors или bgr233).

Кроме того, стоит обратить внимание, что на одном терминале может использоваться подключение к нескольким машинам на основе базового порта 5900 через параметр дисплея. По умолчанию основной дисплей имеет значение «0», а для всех остальных оно увеличивается («1», «2» и т. д.). Соответственно, изменятся порт (5901, 5902 и т. д.), который нужно будет указывать после адреса через двоеточие (например, 192.168.0.5:5901). В случае с динамическими (а не статическими) адресами, дополнительно можно воспользоваться получением например, на основе DynDNS. Можно выставить такую настройку на маршрутизаторе или зарегистрироваться на портале сервиса в интернете. В этом случае служба будет передавать установленному клиенту все сведения, связанные с изменением IP подключаемого компьютера.

Возможные сбои в работе программы

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

Некоторые распространенные методы устранения проблем

Среди основных методов устранения возможных сбоев при попытке установки подключения можно порекомендовать следующие:

  • Внесите установленную программу в список приложений, которым разрешено использовать интернет-соединение в брандмауэре Windows.
  • Создайте новые правила для порта 5900 исходящего и входящего подключений.
  • Если предыдущее решение не поможет, выполните проброс порта 5900 на маршрутизаторе.
  • Внесите программу в список исключений антивируса.
  • Проверьте правильность указания статического адреса и пароля доступа к удаленному терминалу.

Итоги

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



Да, отчего-то не все клиенты хотят работать в таком удобном и черном терминале, панель полностью не удовлетворяет их эстетические потребности, и вообще - «где мой такой любимый и удобный VNC?».
вопрос привычки и вкуса

В данной статье будет рассмотрен пример установки и настройки VNC server и графической оболочки (GUI) на примере OC Debian 8 jessie.


Вводная: на руках имеется чистый Debian 8 и жгучее желание получить на выходе защищенный vnc-доступ к серверу.

Приступим

Обновим список доступных пакетов.
# apt-get update
Если система свежеустановленная - стоит обновиться.
# apt-get -y upgrade
(!)Бездумно запускать данную команду не на свежеустановленном сервере не стоит, чревато сломанными зависимостями и перспективой работы напильником.

Устанавливаем Xfce и VNC server (любители GNOME , KDE , LXDE , etc. устанавливают оболочку по своему вкусу).
# apt-get install xfce4 xfce4-goodies tightvncserver
Создаем пользователя от которого будем запускать vnc сервер.
# adduser vnc
Устанавливаем sudo (в Debian данный пакет не установлен по умолчанию).
# apt-get install sudo
Добавляем пользователя vnc в группу sudo.
# gpasswd -a vnc sudo
Переходим под пользователя vnc.
# su - vnc
Запускаем vnc сервер.
$ vncserver
Если это первый запуск vnc сервера, будет создан конфиг файл и запрошены некоторые параметры:
$ vncserver You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n xauth: file /home/vnc/.Xauthority does not exist New "X" desktop is my.server:1 Creating default startup script /home/vnc/.vnc/xstartup Starting applications specified in /home/vnc/.vnc/xstartup Log file is /home/vnc/.vnc/my.server:1.log
по умолчанию порт vnc сервера будет 5901, порт каждого следующего дисплея будет увеличиваться на 1 (5902,5903,...).

Проверить запущен ли VNC сервер и на каком порту слушает можно следующей командой.
$ netstat -nltp Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 1054/Xtightvnc
Убить конкретный дисплей можно так:
$ vncserver -kill:1 Killing Xtightvnc process ID 3246
:1 - какой дисплей нужно убить.

Создание скрипта автостарта vnc сервера.

Сначала убьем запущенный дисплей:1 (если он запущен).
$ vncserver -kill:1
создаем скрипт запуска
Добавляем следующие строки в файл:

#!/bin/bash PATH="$PATH:/usr/bin/" DISPLAY="1" DEPTH="16" GEOMETRY="1024x768" OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" case "$1" in start) /usr/bin/vncserver ${OPTIONS} ;; stop) /usr/bin/vncserver -kill:${DISPLAY} ;; restart) $0 stop $0 start ;; esac exit 0
если требуется - в скрипте можно изменить глубину цвета или разрешение экрана.

Делаем файл исполняемым.
$ sudo chmod +x /usr/local/bin/myvnc

использование созданного нами скрипта:

$ myvnc start ###запустить vnc сервер $ myvnc stop ###остановить vnc сервер $ myvnc restart ###перезапустить vnc сервер

Теперь нужно позаботиться о том, чтобы настроенный нами vnc стартовал после загрузки сервера (запланированной и не очень).
Для этого создаем файл по следующему пути.
$ sudo nano /lib/systemd/system/myvnc.service

Добавляем следующий текст в файл:
Description=MyVnc Type=forking ExecStart=/usr/local/bin/myvnc start ExecStop=/usr/local/bin/myvnc stop ExecReload=/usr/local/bin/myvnc restart User=vnc WantedBy=multi-user.target

Пояснение

Указываем описание скрипта (так же можно указать требуемые зависимости и порядок запуска при загрузке).
- указываем какими командами запускать сервис, под каким пользователем, и тип сервиса.
- указываем на каком уровне должен запускаться скрипт (runlevel 3 - многопользовательский режим без графики).

Включаем юнит в автозагрузку при старте системы.
$ sudo systemctl enable myvnc.service Created symlink from /etc/systemd/system/multi-user.target.wants/myvnc.service to /lib/systemd/system/myvnc.service.

Смотрим статус созданного нами юнита.
$ sudo systemctl -l status myvnc.service ? myvnc.service - MyVnc Loaded: loaded (/lib/systemd/system/myvnc.service; enabled) Active: inactive (dead)

Дергаем systemd для поиска новых или измененных юнитов.
$ sudo systemctl daemon-reload

Шифрование трафика

Голый VNC не шифрует трафик, и оставлять его в таком виде не стоит.
Кроме того, если на Ваш IP выйдут боты из Китая и начнут стучатся по портам, даже если пароль установлен действительно качественный (учтите, что пароль на vnc сессию ограничен 8 символами) и его не взломают, попасть на сервер посредством VNC будет затруднительно, из-за постоянной ошибки на количество неверных попыток авторизации.

vncpasswd

Using password file /home/vnc/.vnc/passwd

Warning: password truncated to the length of 8.

Would you like to enter a view-only password (y/n)? n

Пускаем VNC поверх SSH:

$ sudo nano /usr/local/bin/myvnc
Изменяем строку:
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" на OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost"

Теперь для подключения к серверу сначала нужно создать тунель.

Под *nix:
# ssh [email protected] -L 5901:localhost:5901
Теперь возможно подключение посредством vnc клиента, указав вместо IP удаленного сервера localhost и порт на котором слушает vnc-server.

# vncviewer localhost:5901

При использовании Windows и putty агента:

После запуска putty переходим Connection -> SSH -> Tunnels .
В поле Source Port вбиваем порт на котором слушает VNC сервер - 5901, в поле Destination вписываем - localhost:5901 и жмем кнопку Add .
должно получиться как на картинке.

Теперь возвращаемся на вкладку Session вписываем IP сервера и порт 22 (тут же можно и сохранить конфигурацию подключения), жмем Open .

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

Установим и настроим fail2ban .
По умолчанию защита от брутфорса для SSH включена, что нам собственно и требуется.
при превышении заданного числа неудачных вводов пароля подряд (по умолчанию - 6) бан IP, с которого были попытки подбора на заданное время (по умолчанию - 600 секунд).

Устанавливаем пакет из репозитория.
$ sudo apt-get install fail2ban
Основной интересующий нас файл настроек находится по пути /etc/fail2ban/jail.conf

Блок настроек для подключения по ssh:
enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6

Синтаксис

ignoreip - IP адреса, которые не должны быть заблокированы. Можно задать список IP адресов разделённых пробелами, маску подсети, или имя DNS сервера.

bantime - время бана в секундах, по истечении которого IP адрес удаляется из списка заблокированных.

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

enabled - значение true указывает что данный jail активен, false выключает действие изолятора.

port - указывает на каком порту или портах запущен целевой сервис. Стандартный порт SSH сервера - 22, или его буквенное наименование - ssh.

filter - имя фильтра с регулярными выражениями, по которым идёт поиск «подозрительных совпадений» в журналах сервиса. Фильтру sshd соответствует файл /etc/fail2ban/filter.d/sshd.conf.

logpath - путь к файлу журнала, который программа Fail2ban будет обрабатывать с помощью заданного ранее фильтра. Вся история удачных и неудачных входов в систему, в том числе и по SSH, по умолчанию записывается в log файл /var/log/auth.log.

Дефолтная настройка удовлетворяет наши требования (6 неверных попыток авторизации по shh и IP летит в бан на 600 секунд), но я бы советовал добавить свой IP в доверенный список.
Обидно будет ждать почти два часа, в случае шестикратной ошибки ввода пароля со своего IP (шанс данного кейса отнюдь не нулевой).

Открываем конфиг файл.
$ sudo nano /etc/fail2ban/jail.conf

В строке ignoreip = 127.0.0.1/8, адрес 127.0.0.1/8 заменяем на свой IP.

Ignoreip = Your.IP

Выходим из редактора nano (ctrl+x , отвечаем y на вопрос сохранения внесенных изменений).

Перегружаем сервис для применения изменений в правилах.
$ sudo service fail2ban restart

В случае срабатывания бана в логах fail2ban, можно заметить строку предупреждения:
$ sudo tail -100 /var/log/fail2ban.log | less 2015-12-17 09:08:54,894 fail2ban.actions: WARNING Ban

И попытки подключения с данного адреса будут отбиваться сервером автоматически до истечения срока бана.
bash-3.2# ssh my.vnc -l vnc ssh: connect to host 37.48.90.203 port 22: Connection refused

Готово, настройка VNC сервера завершена.

Вы можете помочь и перевести немного средств на развитие сайта

Virtual Network Computing (VNC) - система для подключения к рабочему столу удаленно используя протокол RFB (англ. Remote FrameBuffer, удалённый кадровый буфер).

VNC состоит из VNC-клиента, который называется VNC viewer, он только запущен на одной ОС и можно подключаться к VNC-серверу который работает на другой операционной системе. Реализация клиентской и серверной части есть почти для всех ОС, даже для Java (которая включает J2ME). На один VNC-сервер одновременно могут быть подключены большое множество клиентов. Наиболее популярный способ использования VNC - это удалённое подключение к рабочему компьютеру из дома для технической поддержки вашего сервера. В своей статье «Установка и настройка VNC Server на Debian/Ubuntu/Linux Mint» я расскажу как это можно сделать.

Чтобы установить VNC, достаточно выполнить команду:

# apt-get install vnc4server

Вы можете использовать любого пользователя для входа в свой VNC Server, но по соображениям безопасности, я собираюсь создать VNC пользователя для моего VNC Server-а:

# adduser vncuser

Устанавливаем для него пароль:

# passwd vncuser

Теперь переключимся на этого пользователя (vncuser) для создания некоторых конфигурационных файлов для VNC:

# su - vncuser

После этого, запускаем VNC сервер:

$ vncserver

После запуска VNC-сервера, вам будет предложено создать VNC пароль. Устанавливаем любой удобный для вас пароль, но не более 9 символов (если больше, то он обрежит его).

На рисунке ниже видно как стартанул наш vnc сервер, но нам его нужно немного подредактировать:

Чтобы сделать настройку в сценарие запуска, мы должны убить сессию, что мы только что создали:

# vncserver -kill:1

После чего нужно открыть и поправить файл конфигурации:

# cd ~ # vim .vnc/xstartup

Измените немного конфигурацию по вашему усмотрению (у меся я поправил разрешение экрана), мой готовый конфигурационный файл я выложил и , чтобы скачать используйте команду:

# wget https://сайт/wp-content/uploads/files/vnc_server/xstartup

После чего запускаем нашу сессию с разрешением экрана 1024×600:

# vncserver -geometry 1024x600

Установка Gnome X Window для Ubuntu (на стороне клиента, можно установить и другую среду):

# apt-get install gnome-core

Вот еще моя статья как установить другую графическую оболочку:

PS: не забываем прописывать нужную строку в конфиг xstartup.

Если вы решите использовать другие графические интерфейсы:

Для Gnome-Desktop Environment

[...] gnome-session & [...]

Для KDE-Desktop Environment

[...] startkde & [...]

Для MATE-Desktop Environment

[...] mate-session & [...]

Для LXDE-Desktop Environment

[...] startlxde & [...]

Для Cinnamon-Desktop Environment

[...] cinnamon & [...]

Для Openbox-Desktop Environment

[...] openbox & [...]

Я собрал это все до кучи и закоментировал не нужные строки, оставил только gnome, т.к я его устанавливал. Вы можете скачать данный конфиг и отредактировать его для настройки своего VNC сервера (для своего графического интерфейса):

# wget https://сайт/wp-content/uploads/files/vnc_server/Debian/xstartup

Я приведу пример со своим использованием, я юзаю windows 8, по этому я скачал vnc- viewer.

Использование VNC Viewer для просмотра и управления VNC-сервера с удаленного хоста.

Перед тем как использовать vnc-viewer, нужно его скачать. После чего запускаем его и вводим в поле IP адрес хоста (у меня это сделать не получилось и не знаю по чему), я использую виртуальную машину, по этому я ввел следующее:
ubuntu:1

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

После перезагрузки сервера, мы не будем иметь возможность подключиться к серверу с VNC, это потому, что команда «vncserver -geometry 1024×600» , что мы набрали выше не является постоянным. Чтобы решить эту проблему, я будем использовать отличный сценарий Джастин Buser.

Для начала создадим следующее:

# sudo mkdir -p /etc/vncserver # sudo touch /etc/vncserver/vncservers.conf # sudo vim /etc/vncserver/vncservers.conf

И добавляем:

VNCSERVERS="1:vncuser" VNCSERVERARGS="-geometry 1024x600 -depth 24"

Затем создайте пустой сценарий инициализации и сделайте его исполняемым:

# sudo touch /etc/init.d/vncserver # sudo chmod +x /etc/init.d/vncserver # sudo vim /etc/init.d/vncserver

И добавьте текст который можно , так же можете просто его скачать и разместить у себя (только не забудьте сделать его исполняемым):

# wget https://сайт/wp-content/uploads/files/vnc_server/vnc_server

Обновим все это:

# sudo update-rc.d vncserver defaults 99

Сейчас перезапустим наш сервер:

Если вы не можете получить доступ к VNC-сервера, то убедитесь, что вы открыли порты VNC в IPTables:

# iptables -L -n

если не открыли, то открываем их:

# iptables -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 5901:5903,6001:6003 -j ACCEPT

и сохраняем все изменения:

# iptables-save

Делаем возможность подключения для нескольких пользователей.

Создание локального пользователя, с помощью следующей команды:

# sudo adduser cap

Переключитесь на вновь созданного пользователя и запустить этого vncserver командой:

# su cap # vncserver

Перейдем в домашнюю директорию и отредактируем файл XStartup:

# cd ~ # vim .vnc/xstartup

и вставляем в этот файл тоже самое что и для моего первого юзера, .

Теперь откройте файл /etc/vncserver/vncservers.conf как рут пользователь:

Добавим в уже имеющийся конфиг:

SERVERS="1:vncuser 2:cap" VNCSERVERARGS="-geometry 1024x600 -depth 24" VNCSERVERARGS="-geometry 1024x600"

Ребутим наш сервер:

# sudo service vncserver restart

Предотвращение запуск Gnome при загрузке на сервере.

Гном автоматически запускается при загрузке в Ubuntu 12.04 LTS, если мы подключить монитор к нашему серверу мы увидим, что GUI запустился и ждет чтобы мы вошли, это не очень удобно. Сейчас мы это исправим. Чтобы это предотвратить нужно отредактировать файл gdm.conf:

# sudo vim /etc/init/gdm.conf

Нужно в этом файле конфигурации закомментировать 6 строчек:

#start on ((filesystem # and runlevel [!06] # and started dbus # and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1 # or stopped udev-fallback-graphics)) # or runlevel PREVLEVEL=S)

VNC шифрование через ssh туннель

По умолчанию, VNC не является безопасным протоколом, по этому (так безопаснее) мы запустим сервер VNC только на 127.0.0.1 (локальный) и пробросим его через туннель SSH (для этого, есть варианты в Putty).

В Ubuntu нужно отредактировать:

# sudo vim /etc/vncserver/vncservers.conf

Нужно добавить опцию «-localhost»

Перезапустим сервер:

# sudo service vncserver restart

Запустите PuTTY/ Kitty, введите IP-адрес или имя хоста сервера VNC:

Переходим на другую вкладку, Session->Connection->SSH.

Через команду можно посмотреть что все работает:

# netstat -a

После чего уже запускаем непосредственно, vnc viewer и прописываем заместо нашего реального ИП, localhost:1 (или 2). Вводим пароль и можно использовать.

Надеюсь что эта статья «Установка и настройка VNC Server на Debian/Ubuntu/Linux Mint» помогла вам и на этом я закончу ее.

Virtual Network Computing (VNC) — система для удаленного доступа к рабочему столу. Если вы представляете себе Remote Desktop или RAdmin, то VNC решает аналогичную задачу, только VNC-сервера распространяются бесплатно и с открытым исходным кодом. Важно отметить, что VNC не является протоколом. Используемый протокол называется Remote FrameBuffer (RFB). Этот протокол полностью описан в этом PDF .

Зачем кому-то поднимать VNC:

  • Если пробрасывание UI по SSH слишком тормозит;
  • Сервер используется как виртуалка, только с совместным доступом;
  • Торрентокачалка с белым IP, просто ставим Transmission и вперед;
  • Своего рода альтернатива проксям и VPN ;
  • И прочее, на что фантазии хватит;

Приступим. Все описанные ниже шаги проверялись на Ubuntu Linux 14.04 LTS, но также должны без особых изменений работать на других версиях Ubuntu, а также других системах. Для эксперимента нам понадобится ненужная машина, возможно, виртуалка в каком-нибудь DigitalOcean , имеющая по крайней мере 512 Мб памяти. Если вы планируете запускать тяжелые GUI-программы вроде Google Chrome, то сразу выделяйте 1 Гб, а лучше и того больше. Если выделить только 512 Мб, вы сможете открыть только одну вкладу с GMail, после чего память закончится, я проверял. Меня лично очень печалит, что браузеры стали такими прожорливыми, но это, пожалуй, тема для отдельного поста.

На машине, где будем поднимать VNC, под рутом заводим нового пользователя:

adduser ubuntu
usermod -G sudo ubuntu

Прописываем ему наш ~/.ssh/id_rsa.pub:

su ubuntu
vim ~/ .ssh/ authorized_keys
chmod 0600 ~/ .ssh/ authorized_keys

У себя на компьютере в ~/.ssh/config дописываем:

Host vnc-server
Hostname 123.45.67.89
User ubuntu
LocalForward 5901 localhost:5901

В VNC не шифруется трафик, поэтому мы будем ходить в него, используя перекидывание портов по SSH. Если вы также собираетесь использовать технику проброса звука, описанную в заметке Осилил запуск GUI-приложений в Docker , добавьте строчку:

RemoteForward 3333 localhost:4713

Заходим на vnc-server под пользователем ubuntu, говорим:

sudo apt-get update
sudo apt-get install xubuntu-desktop tightvncserver xfonts-base \
xfonts-75dpi xfonts-100dpi

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

Правим файл ~/.vnc/xstartup, содержание должно стать примерно таким:

#!/bin/sh

Xrdb $HOME / .Xresources
xsetroot -solid grey
startxfce4 &
(sleep 3 && xfce4-panel) &

Запустить сервер:

vncserver:1 -localhost -nolisten tcp

Здесь аргумент :1 — это номер дисплея. Можно запускать несколько десктопов, работающих одновременно. Флаг -localhost означает принимать соединения только с этой же машины. Параметр -nolisten tcp нужен для того, чтобы порт 6001 не торчал наружу. При первом запуске сервера понадобится ввести пароль для доступа к десктопу. Обратите внимание, что пароль обрезается до восьми символов. Также вас спросят про отдельный пароль для view-only соединения:

Would you like to enter a view-only password (y/n)? n

Сменить пароль можно командой:

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

vncserver -kill :1

Чтобы подключиться к работающему серверу, нужен какой-нибудь VNC-клиент. В Ubuntu по умолчанию идет Remmina. В маках, как мне рассказывали, VNC клиент находится в Finder → Connect to Server. В качестве адреса сервера указываем localhost:5901, оттуда соединение будет переброшено по SSH на порт 5901 VNC-сервера. В общем случае номер порта вычисляется, как 5900 + номер дисплея.

Дополнение: А во FreeBSD я делаю так:

sudo pkg install tightvnc
vncviewer -bgr233 localhost:5901

Если все было сделано правильно, вы увидите среду рабочего стола Xfce. Ее также следует немного донастроить. В Applications Menu → Settings → Session and Startup во вкладке Advanced ставим галочку Launch GNOME services on startup. Во вкладке Application Autostart отключаем разные лишние сервисы типа Bluetooth Applet. Иначе некоторые приложения, в частности, Skype, могут ронять вообще все иксы с очень странными ошибками в логах. Я лично оставил только следующие галочки:

Теперь прописываем VNC на автозапуск. В /etc/init.d/vncserver пишем.