Ubuntu vnc не подключается

Обновлено: 07.07.2024

Есть виртуальная машина на ESXi 6.5 с гостевой операционкой Ubuntu Server 17.10. При установке выбрал русскую локаль. Машина почти чистая, сразу после установки ОС. Единственное, что добавил: mc и sshd. Далее нужно добавить возможность VNC-подключения к виртуалке, и чтобы при этом подключении запускался графический интерфейс. Сделал это так:

Задал пароль для VNC-подключений. Пока что прописывать xfce4 в /home/user/.vnc/xtratup не стал. Запустил vncserver, вывод показал, что запущен рабочий стол :1 Пробую подключиться со своего компьютера с помощью TightVNC Viewer, подключается. Если ничего не делать, то подключение остаётся нормальным. Но если начать что-нибудь печатать или двигать мышкой, то либо сразу зависает, либо через несколько секунд. Диапазон времени до зависания разный: от нуля секунд до минуты. Пробовал прописать startxfce4 в xstartup, то тоже самое: подключается и скоро зависает. Пробовал все возможные комбинации настроек в самом TightVNC Veiwer, картина та же. iptables на Ubuntu чистый. На всякий случай добавил туда правило и сохранение настроек при перезагрузке: Не помогло. Из логов: kern.log и syslog не содержат ничего интересного (так мне показалось). По крайней мере наблюдение за этими логами в реальном времени никаких новых записей при подключении и зависании не показало. Лог самого VNC показывает: Подключаюсь я только с виндовых компьютеров. Интересная закономерность: зависает подключение, только если я инициирую его с физического компьютера. Пробовал физические компы под управлением Windows 10 и Windows XP, с обоих зависало. А если подключаюсь с виртуалок, которые стоят у меня же на компе в VMWare Workstation, то подключение НЕ зависает: пробовал виртуалки с операционками Windows 7 и Windows XP. При этом лог VNC не изменяется: ошибки те же.

Не нашёл корректного решения, вышел из положения по деревянному. Причина кроется явно где-то в vmware-tools. Я попробовал установить open-vm-tools, не помогло. Удалить vmware-tools с Ubuntu не сумел, как ни пытался. Пробовал ставить vnc4server сразу после чистой установки, после apt-get update и apt-get upgrade, не помогало. Кончилось тем, что я создал новую виртуалку, но в качестве ОС в параметрах ESXi указал Windows Server 208 R2, чтобы он не смог поставить убунтовские vmware-tools. Поставил на эту витуалку Ubuntu. Правда после этого ESXi стал ругаться на несоответствие гостевой ОС и той, что указана в параметрах, ну да и хрен с ним. накатил в гостевой системе open-vm-tools:

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

Из этого руководства вы узнаете, как настраивать сервер VNC на сервере Ubuntu 18.04 и безопасно подключаться к нему через туннель SSH. Мы будем использовать TightVNC, быстрый и компактный пакет дистанционного управления. Благодаря этому наше соединение VNC будет стабильным и удобным даже при низкой скорости подключения к интернету.

Предварительные требования

Для завершения данного обучающего модуля вам потребуется:

  • Один сервер Ubuntu 18.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 18.04, включая пользователя sudo без прав root и брандмауэр.
  • Локальный компьютер с клиентом VNC, поддерживающий соединения VNC через туннели SSH.
    • В Windows вы можете использовать TightVNC, RealVNC или UltraVNC.
    • В macOS вы можете использовать встроенную программу Screen Sharing или кросс-платформенное приложение, например RealVNC.
    • В Linux вы можете использовать разные решения, в том числе vinagre, krdc, RealVNC или TightVNC.

    Шаг 1 — Установка среды рабочего стола и сервера VNC

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

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

    Установите на свой сервер среду рабочего стола Xfce:

    После завершения установки установите сервер TightVNC:

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

    Вам будет предложено ввести и подтвердить пароль для удаленного доступа к системе:

    Пароль должен иметь длину от 6 до 8 символов. Пароли длиной более 8 символов будут автоматически обрезаны.

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

    Затем процесс создает необходимые файлы конфигурации по умолчанию и данные подключения для сервера:

    Теперь настроим сервер VNC.

    Шаг 2 — Настройка сервера VNC

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

    Эти команды находятся в файле конфигурации xstartup в папке .vnc в каталоге home. Сценарий startup был создан при запуске vncserver на предыдущем шаге, однако мы создадим собственный сценарий для запуска рабочего стола Xfce.

    При начальной настройке VNC запускается экземпляр сервера по умолчанию на порту 5901 . Этот порт называется портом дисплея и учитывается VNC как :1 . Возможен запуск нескольких экземпляров VNC на других портах дисплея, в том числе :2 , :3 и т. д.

    Поскольку мы изменяем настройку сервера VNC, вначале нужно остановить экземпляр сервера VNC, работающий на порту 5901 , с помощью следующей команды:

    Результат должен выглядеть следующим образом, хотя вы увидите другой PID:

    Прежде чем изменять файл xstartup , следует создать резервную копию исходного файла:

    Создайте новый файл xstartup и откройте его в текстовом редакторе:

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

    Первая команда в файле, xrdb $HOME/. Xresources указывает системе графического интерфейса VNC прочитать файл пользователя сервера . Файл Xresources . В файле Xresources пользователь может изменять определенные параметры графического рабочего стола, такие как цвета терминала, темы курсора и рендеринг шрифтов. Вторая команда указывает серверу запустить пакет Xfce, включающий все графическое программное обеспечение для удобного управления сервером.

    Чтобы сервер VNC мог использовать новый файл startup, нужно сделать его исполняемым.

    Перезапустите сервер VNC.

    Результат будет выглядеть примерно так:

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

    Шаг 3 — Безопасная настройка рабочего стола VNC

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

    Создайте на локальном компьютере соединение SSH, которое безопасно перенаправляется в соединение localhost для VNC. Для этого можно ввести черех терминал в Linux или macOS следующую команду:

    Опция -L указывает на привязку портов. В данном случае мы привязываем порт 5901 удаленного подключения к порту 5901 локального компьютера. Опция -C активирует сжатие, а опция -N указывает ssh , что мы не хотим выполнять удаленную команду. Опция -l указывает имя для удаленного входа в систему.

    Не забудьте заменить sammy и your_server_ip именем пользователя sudo без привилегий root и IP-адресом вашего сервера.

    Если вы используете графический клиент SSH (например, PuTTY), используйте your_server_ip как IP-адрес для подключения, и задайте localhost:5901 как новый порт переадресации в настройках туннеля SSH программы.

    После запуска туннеля используйте клиент VNC для подключения к localhost:5901 . Вам будет предложено пройти аутентификацию, используя пароль, заданный на шаге 1.

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

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

    Для доступа к файлам в каталоге home вы можете использовать менеджер файлов или командную строку, как показано здесь:

    Файлы через соединение VNC в Ubuntu 18.04

    Нажмите CTRL+C в терминале, чтобы остановить туннель SSH и вернуться к командной строке. При этом сеанс VNC также будет отключен.

    Теперь настроим сервер VNC как службу.

    Шаг 4 — Запуск VNC в качестве системной службы

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

    Создайте новый файл блока с именем /etc/systemd/system/vncserver@.service в своем любимом текстовом редакторе:

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

    Добавьте в файл следующие строки. Оюязательно измените значения параметров User, Group, WorkingDirectory и username на значения PIDFILE, соответствующие вашему имени пользователя:

    Команда ExecStartPre останавливает сервер VNC, если он уже запущен. Команда ExecStart запускает VNC и устанавливает 24-битную глубину цвета с разрешением 1280x800. Вы можете изменить эти параметры запуска в соответствии со своими потребностями.

    Сохраните и закройте файл.

    Затем сообщите системе о новом файле блока.

    Активируйте файл блока.

    Цифра 1 после символа @ указывает, на каком дисплее должна появляться служба. В данном случае это значение по умолчанию :1 , как говорилось на шаге 2.

    Остановите текущий экземпляр сервера VNC, если он еще работает.

    Запустите его, как любую другую системную службу.

    Вы можете проверить запуск с помощью следующей команды:

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

    Теперь сервер VNC будет доступен при перезагрузке компьютера.

    Запустите туннель SSH еще раз:

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

    Заключение

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

    В статье рассказано о настройке возможности подключения к Ubuntu по удаленному рабочему столу (аналогично RDP в Windows). Примеры команд проверены на Linux Ubuntu 16.04 и 18.04.

    Мы рассмотрим реализацию с помощью сервера VNC (подключиться к нашему компьютеру можно будет как с помощью клиента VNC, который доступен как для Linux, так и Windows). Также мы рассмотрим возможность использования клиента RDP из Windows, настроив xRDP.

    Подготовка системы

    Все действия описанные ниже мы будем выполнять с правами суперпользователя. Для этого переходим в режим sudo:

    . или заходим под root:

    * по умолчанию, в Ubuntu не задан пароль от root и данная команда не сработает. В этом случае сначала задаем пароль руту — passwd root.

    Если используется брандмауэр, добавляем правило:

    iptables -A INPUT -p tcp --dport 5901 -j ACCEPT

    * в данном примере, мы разрешаем входящие соединения на порту 5901. Для работы с несколькими портами, добавляем их по аналогии.

    Установка и настройка VNC сервера

    Рассмотрим два варианта использования графической оболочки — xfce и gnome.

    Если используем XFCE

    Установка

    Установку выполняем следующей командой:

    apt install xfce4 xfce4-goodies tightvncserver

    Задаем пароль для доступа по удаленному рабочему столу. Для этого вводим команду:

    . на запрос пароля вводим его дважды.

    После будет предложено ввод пароля для гостевого доступа — можно согласиться (y) и ввести пароль или отказаться (n).

    Настройка

    Для начала, останавливаем экземпляр VNC сервера:

    vncserver -kill :1

    * экземпляр :1, по умолчанию, слушает на порту 5900+1 (5901).

    Настраиваем VNC сервер:

    Снова запускаем vncserver:

    Если используем Gnome

    Установка

    Установку выполняем следующей командой:

    apt install ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal vnc4server

    Задаем пароль для доступа по удаленному рабочему столу. Для этого вводим команду:

    . на запрос пароля вводим его дважды.

    После будет предложено ввод пароля для гостевого доступа — можно согласиться (y) и ввести пароль или отказаться (n).

    Настройка

    Для начала, останавливаем экземпляр VNC сервера:

    vncserver -kill :1

    * экземпляр :1, по умолчанию, слушает на порту 5900+1 (5901).

    Настраиваем VNC сервер для текущего пользователя:

    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    vncconfig -iconic &
    x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    x-window-manager &

    gnome-panel &
    gnome-settings-daemon &
    metacity &

    Снова запускаем vncserver:

    Подключаемся к удаленному рабочему столу

    Запускаем клиент VNC. Например, в Linux — Remmina, в Windows — TightVNC Viewer или RealVNC. Вводим IP-адрес компьютера с VNC и номер порта:

    Подключение к серверу VNC с помощью TightVNC

    Будет запрошен пароль — вводим тот, что устанавливали при настройке.

    Автозапуск сервиса

    Чтобы VNC сервер запускался после перезагрузки, создаем новый юнит в systemd:

    [Unit]
    Description=VNC server
    After=syslog.target network.target

    [Service]
    Type=forking
    User=root
    PAMName=login
    PIDFile=/root/.vnc/%H:%i.pid
    ExecStartPre=-/usr/bin/vncserver -kill :1 > /dev/null 2>&1
    ExecStart=/usr/bin/vncserver
    ExecStop=/usr/bin/vncserver -kill :1

    Разрешаем автозапуск сервиса:

    systemctl enable vncserver

    Смена пароля

    Для смены пароля на подключения к VNC, вводим команду:

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

    Using password file /root/.vnc/passwd
    Password:
    Warning: password truncated to the length of 8.
    Verify:
    Would you like to enter a view-only password (y/n)? n

    * как видим, файл для хранения пароля в данном примере — /root/.vnc/passwd; требование по минимальной длине пароля — 8 символов; также после ввода нового пароля система предложит ввод пароля на режим «только для чтения».

    Если необходимо указать конкретный файл, в котором должен хранится пароль, вводим, например, такую команду:

    xRDP для подключения из Windows

    Если мы не хотим устанавливать на Windows никакого дополнительного программного обеспечения, а хотим использовать стандартное подключение к удаленному рабочему столу (mstsc), можно установить на Linux xRDP. Для этого вводим:

    Поставил на домашний сервер Xubuntu, ибо нужны иксы. Всё вроде нормально, торренты и шару настроил без проблем.

    Пришёл черёд подключаться через VNC. Настроил VNC подключение к серверу с помощью команды: ssh -X user@remote.machine vino-preferences

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

    Как быть? Идей вообще нету в чём дело :(

    Средствами gnome (vino-preferences) не настраивал.

    Нужно сделать всё, как описано в посте?

    И почему могла появится моя проблема? Раньше же всё сразу работало.

    Апну тему, так и не разобрался :(

    В общем начал копать. Начал с установки x11vnc. Поставил его на сервере, запускаю и появляется ошибка. Среди кучи информации нашёл лог с самой ошибкой, вот:

    [code]28/12/2011 08:48:29 x11vnc version: 0.9.9 lastmod: 2009-12-21 pid: 2669 28/12/2011 08:48:29 XOpenDisplay("") failed. 28/12/2011 08:48:29 Trying again with XAUTHLOCALHOSTNAME=localhost . 28/12/2011 08:48:29 28/12/2011 08:48:29 *** XOpenDisplay failed. No -display or DISPLAY. 28/12/2011 08:48:29 *** Trying ":0" in 4 seconds. Press Ctrl-C to abort. 28/12/2011 08:48:29 *** 1 2 3 4 28/12/2011 08:48:33

    28/12/2011 08:48:33 *************************************** 28/12/2011 08:48:33 *** XOpenDisplay failed (:0) [/code]

    Если вы видите графическое окно, а не текстовую консоль значит X-server у вас запущен, ибо как у вас будет отрисовываться графическое окно без x-server`а, как раз и реализующего графический интерфейс.

    Как вы запускаете x11vnc ?

    Вы целиком прочитали мой пост ?

    Команда запуска x11vnc должны выполняться в X сессии, а не в консоли / ssh. Вам об этом и сообщается ' XOpenDisplay failed', x11vnc не смог подключиться к 'DISPLAY 0'.

    Для реализации этого запуск vnc, к примеру нужно прописать в сценарий запуска DM менеджера, в котором у вас как раз и запрашивается пароль.

    Я использую gdm, в моём случае нужно прописать в сценарий запуска gdm.

    Вот это строку, в конец файла /etc/X11/gdm/Init/Default

    Пароль указывается в файле /root/.vnc/passwd, его сгенерировать можно следующей командой от пользователя root:

    Вам тоже придётся отредактировать сценарий запуска вашего DM менеджера.

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

    Команда vncpasswd скорее всего поставится вместе с vnc сервером tightvnc.

    Сразу скажу, что плохо в этом понимаю что то, поэтому вопрос может показаться глупым.

    Файла /etc/X11/gdm/Init/Default у меня нет. Где ещё можно поискать? Напомню, что у меня Lubuntu 10.04.

    Вы понимаете, что у меня написано?

    kostik87

    Я использую gdm, в моём случае нужно прописать в сценарий запуска gdm.

    Вот это строку, в конец файла /etc/X11/gdm/Init/Default

    Читайте также: