Установка и настройка tightvnc server в ubuntu 16.04 и 14.04
Сегодня я расскажу про установку и настройку vnc сервера tightvnc в ubuntu 14.04 и 16.04. Сначала поговорим о том почему я выбрал именно tightvnc. Когда я первый раз ставил vnc сервер, я сначала поставил x11vnc, его описывали как легкий в установке и удобный vnc сервер. Так и есть, все работает «из коробки», но вот незадача — этот vnc сервер работает с уже существующей сессией пользователя, а не создает новую. То есть он подключается к текущему рабочему столу пользователя. Многим это подойдет, но мне нужен был такой vnc сервер, который бы при запуске создавал новую сессию. Тут на помощь мне и пришел tightvnc сервер. При запуске tightvnc сервер создает новую сессию для пользователя. Плюсы такого сервера в том, что можно задать произвольное разрешение создаваемого рабочего стола, в независимости от ограничений, наложенных системой компьютера. Например, если удаленный компьютер позволяет выставить максимальное разрешение 1280х1024, это никак не помешает создать с помощью tightvnc сервера рабочий стол с разрешением еще больше. Так же с помощью tightvnc сервера можно создать несколько рабочих столов. Это очень удобно когда необходимо организовать работу для нескольких пользователей на одном компьютере.
И так, давайте приступим к установке tightvnc server в ubuntu 16.04 и 14.04:
Запуск tightvnc: в терминале набираем (запуск от текущего пользователя, sudo не нужен)
При первом запуске нужно будет ввести пароль доступа к vnc серверу (минимум 6 символов), и по желанию пароль доступа в режиме «только просмотр».
По умолчанию порт tightvnc сервера 5901. Можно указать другой порт так:
При этом tightvnc сервер будет запущен на порту 5902.
Запуск tightvnc server с заданным разрешением экрана осуществляется с параметром geometry, например:
То есть, если в терминале набрать:
то на порту 5903 будет запущен vnc сервер с разрешением рабочего стола 1280×1024 пикселей. Есть еще куча параметров — глубина цвета и много чего еще, в этой статье рассматриваются только основные.
Остановка tightvnc server:
Будет остановлен vncserver на порту 5901.
Настройка tightvnc server
При установке tightvnc server в каталоге /home/пользователь/.vnc создается скрипт запуска, который называется xstartup. Дело в том, что при создании новой сессии tightvnc server запускает обычные иксы, а xstartup — конфигурационный файл для создаваемой x-сессии, в котором нужно указывать все программы, которые должны загружаться при старте x-сессии, вплоть до таких, как оконный менеджер, например. Вот почему, если не редактировать скрипт запуска и подключится к tightvnc серверу, то вы увидите просто серый экран. Чтобы это исправить, давайте отредактируем файл /home/пользователь/.vnc/xstartup. Первое, что нам понадобится — это добавить туда оконный менеджер. Я рекомендую оконный менеджер «metacity». Установим его:
После установки добавим строку «metacity &» в файл xstartup:
Далее нужно запустить одно приложение, хотя бы терминал. В зависимости от версии дистрибутива linux команды для запуска терминала могут различаться. У меня установлен gnome-terminal. В вашем случае он может не быть установлен, а установлен xterm например. Вообщем, смотрите логи, если у вас ничего не запустится. Логи находятся в той же папке, что и xstartup.
Добавьте строку терминала следующей строкой после «metacity &»:
В принципе, это минимально возможная конфигурация, так как из терминала можно запустить любое приложение, но мы, чтобы до конца понять суть xstartup, добавим туда еще и браузер firefox. Все вместе получится приблизительно так:
После внесения изменений в xstartup обязательно перезапустите tightvnc server, если он был запущен. Сейчас после подключения к tightvnc серверу на рабочем столе должен появится открытый терминал и браузер firefox. Но это еще не все. При желании вы можете добавить туда множество приложений, nautilus например, ну вообщем по вашему усмотрению. Я бы рекомендовал добавить док панель вместо них, например gnome-panel, чтобы каждый раз не лезть в терминал для запуска того или иного приложения. Давайте установим ее:
И добавим ее в файл xstartup вместо приложений terminal и firefox:
Теперь при старте x-сессии будет запускаться панель gnome.
Вот и все, настройку tightvnc server на этом можно завершить. Но для прожженных гномоводов у меня еще кое что есть, при старте x-сессии можно запустить gnome сессию. Вот скрипт запуска для gnome сессии:
Хочу предупредить, что у меня в gnome сессии возникали глюки с браузерами: раскладка не переключалась, некоторые клавиши срабатывали неправильно. Вообщем смотрите что для вас лучше — иксы или gnome сессия.
Установка TightVNC на Ubuntu Server 18.04 LTS
По умолчанию серверы Ubuntu 18.04 поставляются без предустановленного графического окружения рабочего стола и сервера VNC. Потому сначала нужно установить эти компоненты. Мы будем использовать пакеты Xfce и TightVNC, доступные в официальном репозитории Ubuntu.
Установка Xfce и TightVNC
Сначала устанавливаем пакет Xfce:
Следом за ним — пакет TightVNC:
Запускаем VNC-сервер командой:
При первом запуске vncserver предложит выбрать и подтвердить пароль. Пароль должен быть длинной от шести до восьми символов. Кроме того, будет возможность создать пароль только для просмотра.
Порты VNC-сервера
При запуске первого экземпляра VNC-сервера без указания порта, сервер будет прослушивать порт 5901 (или :1). При запуске следующего экземпляра сервер будет прослушивать порт 5902 (или :2). Можно явно указать порт при запуске экземпляра сервера:
Посмотреть список запущенных серверов можно так:
Остановим работу первого и второго экземпляра VNC-сервера:
Настройка VNC-сервера
Теперь нужно задать команды, которые сервер VNC будет выполнять при запуске. Эти команды должны находиться в файле xstartup в каталоге
/.vnc/ текущего пользователя. Сценарий запуска уже был создан при первом запуске сервера с помощью команды vncserver , но его нужно откорректировать для работы с Xfce.
При помощи первой команды GUI сервера VNC читает файл .Xresources . В файле .Xresources пользователь может вносить изменения в некоторые настройки графического рабочего стола (цвет терминала, темы курсора, шрифты). Вторая команда просто запускает графическую оболочку Xfce.
Этот файл нужно сделать исполняемым:
Все, можно запускать сервер:
Подключение к VNC-серверу
Теперь попробуем подключиться с другого компьютера, используя VNC-клиент Remmina:
Изначально качество изображения низкое, но это можно изменить в настройках клиента:
Перед подключением надо открыть несколько портов на той машине, где мы установили VNC-сервер:
Создание файла сервиса
Теперь нужно настроить сервер VNC как сервис Systemd, чтобы он запускался при загрузке системы. Для этого создаем новый unit-файл:
Символ @ в конце имени файла позволит нам передать аргумент, который можно использовать в конфигурации сервиса. С его помощью можно указать порт VNC, который нужно использовать при управлении сервисом.
Команда ExecStartPre останавливает VNC, если сервис уже запущен. Команда ExecStart запускает VNC и устанавливает глубину цвета и разрешение. Давайте сообщим системе про новый unit-файл.
Добавляем три службы в автозагрузку:
Теперь, после загрузки системы, VNC-сервер будет прослушивать три порта: 5901, 5902 и 5903. И мы можем подключиться на любом из них:
И мы можем вручную запустить или остановить VNC-сервер, как любую другую службу:
Безопасное подключение
При подключении VNC не использует безопасные протоколы. Давайте создадим SSH-туннель для безопасного подключения к серверу (для этого на машине с VNC-сервером должен быть установлен SSH-сервер):
У меня возникло затруднение при попытке установить ssh-соединение с виртуальной машиной, на которой установлен VNC-сервер (и SSH-сервер):
Причина в том, что большинство дистрибутивов Linux создают ключи хоста во время установки OpenSSH-сервера. А эта виртуальная машина была клонирована с уже установленным SSH-сервером. Так что все ключи теперь недействительны. Исправить это просто — нужно удалить старые ключи хоста и сформировать их заново:
Ключ сервера используется в процессе обмена ключами для подтверждения того, что клиент действительно связывается с нужным сервером. Клиент ssh запрашивает публичный ключ сервера и спрашивает, можно ли ему доверять:
После этого отпечаток публичного ключа сохраняется в файле
/.ssh/known_hosts . В моем случае сам сервер, просматривая свои ключи, обнаруживал в них ошибку. Если посмотреть файл /var/log/auth.log , то можно увидеть такие записи
При подключении к VNC-серверу указываем не 192.168.110.13:5901 , а localhost:5901 . Мы как бы подключаемся к локальной машине, но соединение будет проброшено через ssh-туннель на машину с VNC-сервером.
При этом на машине с установленным VNC-сервером должен быть открыт 22-ой порт:
А вот держать открытыми порты 5901:5903 больше не нужно, так что закрываем:
Обратите внимание, что VNC-клиент Remmina умеет создавать ssh-туннель самостоятельно:
Как настроить и использовать сервер TigerVNC в Linux
Как установить TigerVNC
Установка в Debian, Kali Linux, Linux Mint, Ubuntu и их производные:
Для установки в Arch Linux, BlackArch и их производные:
Настройка сервера TigerVNC
Для работы сервера TigerVNC требуется файл
/.vnc/xstartup. Если этот файл не существует, то TigerVNC пытается его создать. В моих тестах на разных дистрибутивах этот файл обычно приходилось создавать вручную.
/.vnc/xstartup зависит от вашего окружения рабочего стола! То есть для Cinnamon, XFCE, GNOME и т. д. файлы будут разные!
Дело в том, что TigerVNC не используют текущую X сессию, а создаёт новую. Благодаря такому подходу можно, например, для пользователей выполнивших вход перед компьютером и пользователей, подключившихся по VNC, запускать различные окружения рабочего стола (при условии, что они установлены). Настройка запуска сеанса рабочего стола для VNC выполняется в файле
/.vnc/xstartup. Общая минимальная структура файла
Вместо слова ЗАПУСК должен быть указан исполнимый файл, запускающий X сессию.
- Для Cinnamon: cinnamon-session-cinnamon
- Для XFCE: startxfce4
- Для GNOME: /usr/bin/gnome-session
- Для Kodi: kodi-standalone
- Для Mate: mate-session
- Для lxqt: startlxqt
Вы можете самостоятельно узнать исполнимый файл для любого окружения рабочего стола, установленного в вашей системе, выполнив
В этой папке вы увидите файлы с расширением .desktop, например:
Откройте с именем интересующего вас окружения рабочего стола и найдите там строку, которая начинается на «Exec», например для файла xfce.desktop:
Следовательно, вместо слова «ЗАПУСК» в файле
/.vnc/xstartup нужно вписать «cinnamon-session-cinnamon». Тогда файл
/.vnc/xstartup будет иметь следующее содержимое:
Как создать пароль для TigerVNC сервера
После неё можно указать файл, в который должен быть сохранён пароль, в противном случае пароль будет сохранён в файл по умолчанию, то есть в $HOME/.vnc/passwd.
После ввода пароля программа спросит:
То есть хотите ли вы создать пароль для режима «только просмотр» — если хотите, то введите «y», если не хотите, то введите «n».
Запуск сервера TigerVNC
Запуск выполняется любой из следующих команд:
Пароль для аутентификации на сервере будет взят из файла $HOME/.vnc/passwd. Вы можете указать другой файл с паролем, с помощью любой из следующих опций (они все являются псевдонимами друг друга):
- -PasswordFile ФАЙЛ
- -passwd ФАЙЛ
- -rfbauth ФАЙЛ
Будет выведено примерно следующее:
Может показаться, что программа завершила работу — но это не так, процесс переведён в фон. В данном сообщении сказано, что новый рабочий стол создан на дисплее с номером :1, а журнал сохраняется в файл /home/mial/.vnc/HackWare:1.log.
Чтобы убедиться, что сервер действительно работает, проверим, какие порты прослушиваются (смотрите также «Как проверить открытые порты на своём компьютере»):
Как можно увидеть, прослушивается порт 5901, который также считается стандартным для VNC.
Как сделать так, чтобы TigerVNC прослушивал не только 127.0.0.1
По умолчанию TigerVNC прослушивает только интерфейс с IP адресом 127.0.0.1, это LOOPBACK (петлевой) адрес, то есть к VNC серверу можно подключиться только с этого же самого компьютера, либо через SSH туннель. Как именно использовать SSH туннель для подключения к TigerVNC будет показано чуть ниже.
Кроме этого, имеется опция -localhost, которая может принимать значение «yes» или «no». Если указать -localhost no, то TigerVNC сервер будет прослушивать любые входящие подключения, а не только локальные:
Как поменять порт TigerVNC сервера
Прослушиваемый TCP порт для RFB протокола можно поменять опцией -rfbport ПОРТ.
Порт для внутреннего HTTP сервера устанавливается опцией -httpPort.
Как настроить выключение TigerVNC после отключения клиента
Для этого есть две опции:
- -autokill: завершает работу VNC сервера после завершения X сессии
- -fg: не переводит процесс в статус демона и завершает работу VNC сервера после завершения X сессии
Как использовать SSL сертификаты в TigerVNC для шифрования трафика VNC сессий
Поскольку TLS/SSL шифрование защищает VNC трафик от прослушивания, то нет особого смысла использовать одновременно SSH туннель (который также хорошо зашифрован) и SSL сертификаты. По этой причине при генерации сертификатов в качестве IP адреса указывайте внешний, а не 127.0.0.1.
На сервере сгенерируйте сертификаты (замените оба вхождения «192.168.0.100» на IP-адрес сервера — это может быть как локальный, так и глобальный IP):
Скопируйте файл с сертификатом vnc-server.pem на компьютер с просмотрщиком VNC — то есть клиентам, которые будут подключаться — укажите в клиентском приложении путь до файла сертификата:
На сервере же используйте опцию -X509Key с файлом vnc-server-private.pem и опцию -X509Cert с файлом vnc-server.pem.
По умолчанию в качестве типов безопасности предлагается только VncAuth. С помощью опции -SecurityTypes можно указать любые типы шифрования из списка: None, VncAuth, Plain, TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain.
Для SSL сертификтов (то есть для опций -X509Key и -X509Cert) используются типы безопасности X509None, X509Vnc и X509Plain. Также нужно указать VncAuth, чтобы была возможность выполнять VNC аутентификацию.
Таким образом, собираем все необходимые опции в одну команду:
Управление и остановка процессом TigerVNC
Чтобы вывести список запущенных рабочих столов с VNC выполните следующую команду:
- X DISPLAY # — номер дисплея
- RFB PORT # — номер прослушиваемого порта
- PROCESS ID — идентификатор процесса
Чтобы закрыть дисплей с любым номером, используйте опцию -kill, к примеру, чтобы закрыть дисплей :1:
Имеется утилита vncconfig, которая с использованием опции [-set] Xvnc-param=value позволяет изменять опции запущенного VNC сервера на лету.
Чтобы вывести список опций VNC сервера укажите флаг -list:
Обратите внимание, что также нужно использовать опцию -display после которой указывается номер дисплея.
Как настроить автоматический запуск сервера TigerVNC
Создайте файл /etc/systemd/system/vncserver@.service:
Скопируйте в этот файл
Обратите внимание на строку User=mial — впишите в неё имя вашего пользователя вместо mial.
Сохраните и закройте этот файл.
Теперь перезагрузите конфигурацию менеджера systemctl для чтения свежесозданного файла юнита следующим образом:
Для запуска службы VNC выполните команду:
Обратите внимание, что вместо 1 вы можете указывать любой номер дисплея.