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 карты в системе: команда
    df -h
    
    покажет все примонтированные устройства, среди них нужно найти что-то похожее на  /dev/mmcblk0p1. Причем /dev/mmcblk0 - это имя всего устройства, а дополнительные символы p1 в конце определяют конкретный раздел. Если на SD карте несколько разделов, то в выводе команды df будет несколько записей для каждого раздела, отличающихся последними двумя символами. 
  4. Отмонтируем SD карту командой:
     
    umount /dev/mmcblk0p1
    
    Если разделов несколько - делаем это для всех разделов.
  5. Записываем образ Raspbian на SD карту с помощью команды:
    sudo dd bs=4M if=2016-05-27-raspbian-jessie.img of=/dev/mmcblk0
    
    где то, что идет после if= должно быть путем к файлу образа, а то - что после of= - именем всей SD карты (а не какого-то ее раздела). Если неправильно указать имя устройства, то dd сотрет все данные на этом устройстве и запишет туда Raspbian. Команда dd не выдает ничего в консоль пока не закончит запись, поэтому со стороны может казаться, что она зависла. Чтобы получить текущий статус dd можно в другом терминале выполнить команду
    sudo pkill -USR1 -n -x dd
    
    Вывод появится в терминале, в котором работает dd.
  6. Когда dd запишет образ, синхронизируем данные с помощью команды
    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):
    sudo vim /путь-до-корневого-каталога-на-sd-карте/etc/wpa_supplicant/wpa_supplicant.conf
    
  2. И дописываем в конец файла:
    network={ 
        ssid="название сети"
        psk="пароль"
    }
    
  3. Выполняем sync, извлекаем SD карту, вставляем ее в Raspberry и запускаем.

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

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

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

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

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

  1. Устанавливаем VNC сервер на Raspberry:
    sudo apt-get install tightvncserver
  2. Настраиваем курсор в VNC сервер (обычный указатель мыши вместо крестика): 
    • открываем файл /home/pi/.vnc/xstartup:
      vi /home/pi/.vnc/xstartup
    • и дописываем к xsetroot параметр:
      -cursor_name left_ptr
  3. Настраиваем автозагрузку VNC сервера вместо lightdm (монитора-то все равно нет, lightdm стартовать не имеет смысла). 
    • Переходим в режим superuser:
      sudo su
      
    • Переходим в /etc/init.d/:
      cd /etc/init.d/
    • Создаем новый файл vncboot:
      vi vncboot
    • Копируем туда следующий скрипт:
      #! /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
      
      и сохраняем.
    • Делаем его исполняемым:
      chmod 755 vncboot
      
    • Заменяем выполнение lightdm на vncboot при загрузке:
      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 файл

      Удалить