Ubuntu: первоначальная настройка Raspberry Pi без монитора

Самый простой способ запустить и настроить Raspberry Pi - подключить к ней монитор и клавиатуру, вставить SD карту на которую скопирован установщик NOOBS, и включить. Если же лишнего монитора нет, то можно по-прежнему установить самостоятельно установить Raspbian на SD карту, запустить с этой карты Raspberry Pi, подключиться по ssh (включен по умолчанию) и настроить удаленный рабочий стол. Для этого понадобится только компьютер с Ubuntu (просто потому, что у меня Ubuntu - для других дистрибутивов, Windows и OS X процесс не должен принципиально отличаться), сеть ( и возможность подключиться к ней с помощью Ethernet кабеля), чистая SD карта размером больше, чем образ Raspbian (Raspbian Jessie занимает 4 Гб) и сама Raspberry. Ниже приведена пошаговая инструкция, что надо сделать, чтобы все заработало.

Шаг 1: установка Raspbian

  1. Скачиваем самый новый образ Raspbian отсюда. Если скачали zip, то распаковываем.
  2. Вставляем SD карту в кард-ридер.
  3. Определяем имя SD карты в системе: команда
    1
    df -h
    покажет все примонтированные устройства, среди них нужно найти что-то похожее на  /dev/mmcblk0p1. Причем /dev/mmcblk0 - это имя всего устройства, а дополнительные символы p1 в конце определяют конкретный раздел. Если на SD карте несколько разделов, то в выводе команды df будет несколько записей для каждого раздела, отличающихся последними двумя символами. 
  4. Отмонтируем SD карту командой:
    1
    umount /dev/mmcblk0p1
    Если разделов несколько - делаем это для всех разделов.
  5. Записываем образ Raspbian на SD карту с помощью команды:
    1
    sudo dd bs=4M if=2016-05-27-raspbian-jessie.img of=/dev/mmcblk0
    где то, что идет после if= должно быть путем к файлу образа, а то - что после of= - именем всей SD карты (а не какого-то ее раздела). Если неправильно указать имя устройства, то dd сотрет все данные на этом устройстве и запишет туда Raspbian. Команда dd не выдает ничего в консоль пока не закончит запись, поэтому со стороны может казаться, что она зависла. Чтобы получить текущий статус dd можно в другом терминале выполнить команду
    1
    sudo pkill -USR1 -n -x dd
    Вывод появится в терминале, в котором работает dd.
  6. Когда dd запишет образ, синхронизируем данные с помощью команды
    1
    sync
    Теперь Raspbian установлен на SD карту. Если Raspberry будет подключаться с помощью Ethernet кабеля к роутеру, то с SD картой больше ничего делать не нужно - можно вынимать eё из кард-ридера (предварительно выполнив sync) и вставлять в Raspberry (и пропустить шаг 2). Если нужно подключиться сразу к WiFi - переходим к шагу 2.

Шаг 2: Настройка WiFi

  1. Только что записанная SD карта содержит два раздела - boot и раздел с корневой файловой системой (у меня он называется 2f840c69-cecb-4b10-87e4-01b9d28c231c, его имя можно посмотреть в выводе команды df -h, которую мы использовали ранее). Нас интересует файл /etc/wpa_supplicant/wpa_supplicant.conf в разделе корневой файловой системы SD карты. Открываем его c sudo с помощью любого текстового редактора (я использую vim):
    1
    sudo vim /путь-до-корневого-каталога-на-sd-карте/etc/wpa_supplicant/wpa_supplicant.conf
  2. И дописываем в конец файла:
    1
    2
    3
    4
    network={
        ssid="название сети"
        psk="пароль"
    }
  3. Выполняем sync, извлекаем SD карту, вставляем ее в Raspberry и запускаем.

Шаг 3: Подключение к Raspberry по ssh

  1. Устанавливаем nmap (если еще не установлен):
    1
    sudo apt-get install nmap
  2. Выясняем параметры своего подключения к сети с помощью команды:
    1
    ifconfig
  3. Сканируем сеть, чтобы выяснить адрес Raspberry Pi (чуть более подробно о том, как это делать, я писал здесь):
    1
    nmap -sn 192.168.178.0/24
  4. Подключаемся к Raspberry Pi по ssh (в моем случае Raspberry достался адрес 192.168.178.42):
    1
    ssh pi@192.168.178.42
    Имя пользователя по умолчанию - pi, пароль для этого пользователя - raspberry.

Шаг 4: Первоначальная настройка и обновление

  1. Если все было сделано правильно, у нас сейчас в терминале должна быть открыта ssh-сессия с RaspberryPi. Я сразу после подключения делаю первоначальную настройку с помощью встроенной утилиты raspi-config:
    1
    sudo raspi-config
    Я сразу выбираю пункты Expand filesystem - это позволит Raspberry использовать всю SD карту, а не только то пространство куда был записан образ Raspbian, и Enable camera - позволит использовать камеру. Там же можно поменять пароль для пользовтаеля pi и, например, настроить локаль. После завершения работы утилита попросит автоматически перезагрузить Raspberry. Ждем немного и подключаемся к ней снова по ssh.
  2. Затем имеет смысл обновить пакеты:
    1
    sudo apt-get update && sudo apt-get upgrade

Шаг 5: Настройка удаленного рабочего стола

  1. Устанавливаем VNC сервер на Raspberry:
    1
    sudo apt-get install tightvncserver
  2. Настраиваем курсор в VNC сервер (обычный указатель мыши вместо крестика): 
    • открываем файл /home/pi/.vnc/xstartup:
      1
      vi /home/pi/.vnc/xstartup
    • и дописываем к xsetroot параметр:
      1
      -cursor_name left_ptr
  3. Настраиваем автозагрузку VNC сервера вместо lightdm (монитора-то все равно нет, lightdm стартовать не имеет смысла). 
    • Переходим в режим superuser:
      1
      sudo su
    • Переходим в /etc/init.d/:
      1
      cd /etc/init.d/
    • Создаем новый файл vncboot:
      1
      vi vncboot
    • Копируем туда следующий скрипт:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      #! /bin/sh# /etc/init.d/vncboot
       
      ### BEGIN INIT INFO
      # Provides: vncboot
      # Required-Start: $remote_fs $syslog
      # Required-Stop: $remote_fs $syslog
      # Default-Start: 2 3 4 5
      # Default-Stop: 0 1 6
      # Short-Description: Start VNC Server at boot time
      # Description: Start VNC Server at boot time.
      ### END INIT INFO
       
      USER=pi
      HOME=/home/pi
       
      export USER HOME
       
      case "$1" in
       start)
       echo "Starting VNC Server"
       #Здесь можно использовать свои любимые настройки VNC
       su - $USER -c "/usr/bin/vncserver :1 -geometry 1366x768 -depth 24"
       ;;
       
       stop)
       echo "Stopping VNC Server"
       /usr/bin/vncserver -kill :1
       ;;
       
       *)
       echo "Usage: /etc/init.d/vncboot {start|stop}"
       exit 1
       ;;
      esac
       
      exit 0
      и сохраняем.
    • Делаем его исполняемым:
      1
      chmod 755 vncboot
    • Заменяем выполнение lightdm на vncboot при загрузке:
      1
      2
      update-rc.d -f lightdm remove
      update-rc.d vncboot defaults
  4. Теперь можно перезагрузить Raspberry и, когда она загрузится, подключиться к ней из под Ubuntu с помощью, например, Remmina Remote Desktop Client (который в Ubuntu установлен по умолчанию).

Теперь у нас есть работающая и обновленная Raspberry Pi, к которой мы можем подключаться через ssh или через VNC. 

4 комментария :

  1. Добрый день,
    Уточните как добавить sh скрипт в автозагрузку. Гуглил, пробывал разные варианты, но ни как не срабатывает автозагрузка. Подскажите пожалуйста как это сделать.
    из консоли под рутом запускаю скрипт двумя командами:
    cd /home/pi/package/
    nohup sh /home/pi/package/nix.runNis.sh >/dev/null &

    ОтветитьУдалить
    Ответы
    1. В первой строке скрипта попробуйте удалить часть кода, т.е. первая строка должна выглядеть так "#! /bin/sh" без кавычек и решетки в конце.
      Я в линуксе не сильно силен, но зачем после #! /bin/sh идет указание пути до папки, в которой лежит скрипт, если он и так там лежит...
      Возможно опечатка, а может я чего-то не понимаю.

      Удалить
  2. Не знаю, может сюда кто-то и зайдет, надеюсь, прочитает это сообщение. Все хорошо, НО, ssh по-умолчанию в raspberry pi не работает c 2016 года, соединение будет обрываться. Причина: https://www.raspberrypi.org/documentation/remote-access/ssh/ Решение: создать пустой файл без всяких расширений /boot/ssh тогда ssh соединение будет разрешено. Статья, видно, вышла немногим раньше нововведения и этой важной детали нету. Надеюсь я помог и позволил вам избежать очень неприятной процедуры: выдергивание кабеля питания без возможности безопасно выключить устройство.

    ОтветитьУдалить
    Ответы
    1. ВАЖНАЯ ПОПРАВКА: под boot имеется ввиду загрузочный диск. Смотрится через lsblk - обычно первый раздел вашего устройства на несколько mb. В корне этого раздела и надо создавать ssh файл

      Удалить