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

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

Предполагается, что на Raspberry Pi установлена операционная система Raspbian (специальная версия 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. Для этого необходимо набрать команду sudo 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/N]?). Понадобится ответить «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 непосредственно (локально).

 

При подготовке статьи использованы материалы сайта http://myraspberrypiexperience.blogspot.co.uk/

Изображения с сайтов http://blogs.foomatic.org и http://myraspberrypiexperience.blogspot.co.uk/

Настраиваем VNC: 17 комментариев

  1. А как настроить на рабочий стол суперпользователя?

    • Нужно добавить перед запуском команду sudo, т.е.:
      либо sudo vncserver для запуска виртуального рабочего стола, либо sudo startx

  2. как с этими параметрами сделать автозапуск vncserver?

  3. после набора команды
    vncserver :1 -geometry 1280×800 -depth 16 -pixelformat rgb565
    выходит сообщение
    vncserver: geometry 1280×800 is invalid
    =( что делать? под видеопамять в Ra-Pi выделено стандартные 64 кБ

    • Наберите команду руками. Движок блога зачем то исправляет символ «x» в 1280×800 на что то своё, а вы похоже просто копируете команду.

  4. Спасибо, помогло =)
    Правда теперь после задания паролей для подключения к десктопу появляется вот это
    sh: 1: Syntax error: «(» unexpected
    sh: 1: Syntax error: «(» unexpected
    sh: 1: Syntax error: «(» unexpected
    sh: 1: Syntax error: «(» unexpected
    Couldn’t start Xtightvnc; trying default font path.
    Please set correct fontPath in the vncserver script.
    sh: 1: Syntax error: «(» unexpected
    sh: 1: Syntax error: «(» unexpected
    Couldn’t start Xtightvnc process.

    • Похоже в команде при запуске сервера где то ошибка. Проверьте параметры повнимательнее.

  5. Понимаю, что вопрос, скорее всего глупый, но обязательно ли оба устройства должны быть подключены к одной сети?

    • Конечно нет. Но у них должна быть возможность соединения (соответствующие настройки маршрутизации).

  6. Спасибо,полезная статья, очень подробное описание программного подключения. А нельзя ли так же подробно- как аппаратно подключиться? Читал, что нужен кроссоверный кабель- что это? Как настроить подключение через WiFi? желательно, вообще без использования клавы и монитора для Малинки? (только через ноут с Win7) Спасибо еще раз!

    • Дополню вопрос- для соединения по WiFi нужен роутер, или можно соединяться напрямую?

    • Нужен преобразователь уровней, поищите по ключевым словам «usb ttl конвертер». Стоит совсем недорого.
      Нужно подключить выводы Tx и Rx к контактам GPIO14 и GPIO15, а также соединить соответственно линии +5В преобразователя и Raspberry Pi и, аналогично GND. В интернете масса картинок с расположением выводов.
      После этого, на скорости 115200 бод можно подключиться с помощью программы Putty.

      Настройка wifi с помощью командной строки описана например здесь http://www.howtogeek.com/167425/how-to-setup-wi-fi-on-your-raspberry-pi-via-the-command-line/
      Если коротко, то:
      1. Откройте файл /etc/network/interfaces
      командой sudo nano /etc/network/interfaces
      и добавьте такие строки:
      allow-hotplug wlan0
      iface wlan0 inet dhcp
      wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
      iface default inet dhcp
      2. Откройте /etc/wpa_supplicant/wpa_supplicant.conf
      командой sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
      и приведите его к такому виду:

      ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
      update_config=1

      network={
      ssid="YOURSSID"
      psk="YOURPASSWORD"

      # Protocol type can be: RSN (for WP2) and WPA (for WPA1)
      proto=WPA

      # Key management type can be: WPA-PSK or WPA-EAP (Pre-Shared or Enterprise)
      key_mgmt=WPA-PSK

      # Pairwise can be CCMP or TKIP (for WPA2 or WPA1)
      pairwise=TKIP

      #Authorization option should be OPEN for both WPA1/WPA2 (in less commonly used are SHARED and LEAP)
      auth_alg=OPEN
      }

      Где YOURSSID — название беспроводной сети и YOURPASSWORD — пароль доступа к ней.

      После перезагрузки Raspberry Pi должна подключиться к точке доступа.

  7. Так. Вай фай пока откладываем. Разбираемся с проводками. Конвертор USB-TTL нужен только для определения IP малинки, а вся работа будет через интернет-порты? Маршрутизатор нужен- для сети только из двух устройств? Если нет- то контакты сетевого кабеля нужно перекрещивать? Типа нуль -модемного кабеля для СОМ? Зачем нужно соединять линии +5 вольт преобразователя (это с разъёма USB ноута напрямую, как правило) и +5 вольт малинки?

    • Работа по ssh через последовательное соединение (с помощью конвертера) и через сеть почти ничем не отличаются. Можно настроить сеть и дальше подключаться по сети, а можно и работать дальше через конвертер.
      По сетям прочтите любой учебник, сразу отпадут вопросы — нужен ли маршрутизатор и про кабель «компьютер-компьютер». Без этих знаний дальше будет очень тяжело.
      Сигнал +5В нужен чтобы уровнять потенциалы последовательной линии с обоих сторон соединения, без него передача будет идти с большим процентом ошибок. Сигнал 0 — общий провод. Про устройство UART можно почитать например здесь http://habrahabr.ru/post/109395/

Обсуждение закрыто.