• Raspberry Pi 4 Model B – это компактный одноплатный компьютер на базе 4-ядерного процессора Broadcom BCM2711, Cortex-A72 @ 1.5GHz с 4GB оперативной памяти (есть так же версии с 1GB, 2GB и 8GB). Разработчики добавили в Raspberry Pi 4 такие востребованные интерфейсы как USB 3.0, Gigabit Ethernet, Bluetooth 5.0, micro HDMI и реализовали поддержку видео 4К. Также появился новый разъем питания USB Type-C вместо старого разъема micro USB.
  • Вместо полноразмерного разъема HDMI в Raspberry Pi реализованы 2 порта micro HDMI, что дает возможность подключить 2 монитора с разрешением 4K.
  • 40-пиновый GPIO-разъём позволяет подключать к микрокомпьютеру разнообразные датчики, индикацию, элементы управления, программируемые микроконтроллеры, исполняющие устройства и использовать Raspberry Pi в самых различных сферах, таких как – «умный дом», автоматизация процессов, робототехника и т.п.

Техническая спецификация

  • Процессор: Broadcom BCM2711 (4-core), ARMv8 Cortex-A72 64-bit @ 1.5GHz;
  • Память: 1GB/2GB/4GB/8GB LPDDR4-3200;
  • Связь: 10/100/1000M Ethernet, Bluetooth 5.0 Low Energy (BLE), WiFi 2.4GHz/5GHz IEEE 802.11 b/g/n/ac;
  • USB Host: USB 2.0 х 2, USB 3.0 х 2;
  • Слот MicroSD: MicroSD x 1 для системного загрузчика и данных;
  • LED: Power LED x 1, System LED x 1;
  • GPIO: 2.54mm pitch 40-пиновая колодка с поддержкой 4 × UART, 4 × SPI и 4 × I2C;
  • USB Type-C: Power Input (5V/3A) (блок питания в комплект не входит);
  • HDMI: Micro HDMI x 2;
  • A/V-выходы: 3.5mm jack 4 pin, разъем MIPI DSI, разъем MIPI CSI;
  • Размеры: 88 x 58 x 17mm;
  • Рабочая температура: -20℃ to 70℃;
  • Вес платы: 48g.

Распаковка и сборка

  • Приклеиваем термопроводящие прокладки на чипы, соединяем две части радиатора и прикручиваем их друг к другу винтиками из комплекта;

  • Собирается всё предельно просто.

Программное обеспечение (Ubuntu Mate 20.04)

Открываем ссылку https://ubuntu-mate.org/download/arm64/focal/ и скачиваем образ диска. Далее открываем ссылку https://www.balena.io/etcher/ и скачиваем программу balena Etcher.

  • Запускаем balena Etcher;
  • Нажимаем на кнопку Flash from file и выбираем из списка файлов скачанный ранее файл с образом;
  • Далее нажимаем на кнопку Select target, отмечаем галочкой диск /dev/mmcblk0 и нажимаем на кнопку Select;
  • Затем нажимаем на кнопку Flash!;
  • После того как образу будет записан на MicroSD-карту и отобразится сообщение Flash Complete! закрываем balena Etcher.

  • В записанном образе, по умолчанию размер основного раздела равен около 5ГБ, это очень мало, и если оставить его таким, то при первом запуске, во время первоначальной настройки Ubuntu Mate будут возникать ошибки. Поэтому первым делом необходимо увеличить размер этого раздела хотя бы до 8ГБ. Проще всего воспользоваться для этой процедурой программой GParted.

Запуск Ubuntu Mate без монитора (headless)

  • При первом запуске Ubuntu Mate на Raspberry Pi, запускается программа-установщик, в которой указывается имя компьютера, временная зона. Во время первого запуска создаётся пользователь для работы, а так же устанавливается и обновляется ряд программ. Если к Raspberry Pi не подключен монитор, клавиатура и мышь – завершить установку почти невозможно.

  • Для того, чтобы закончить процесс установки Ubuntu Mate без монитора – воспользуемся UART-портом на Raspberry Pi и маленьким USB-донглом USB2UART от компании FriendlyELEC.

  • Перед тем как запускать Raspberry Pi с MicroSD-карточки, которую мы записали ранее, нам необходимо включить отображение на консольном порту логов запуска ядра и включить возможность логина с консольного порта:
wakko@radio:~$ sudo su
[sudo] password for wakko: 
radio:~$# partprobe /dev/mmcblk0

radio:~$# mount /dev/mmcblk0p1 /mnt/
radio:~$# cp -p /mnt/cmdline.txt /mnt/cmdline.txt.orig
radio:~$# sed -i 's/ plymouth.ignore-serial-consoles//' /mnt/cmdline.txt
radio:~$# nano -w /mnt/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait fixrtc quiet splash
radio:~$# nano -w /mnt/usercfg.txt
enable_uart=1
radio:~$# umount /mnt/

radio:~$# mount /dev/mmcblk0p2 /mnt/
radio:~$# ln -s /lib/systemd/system/serial-getty@.service /mnt/etc/systemd/system/oem-config.target.wants/serial-getty@ttyS0.service
radio:~$# umount /mnt/

radio:~$# exit
  • Первый блок команд отключает запрет отображения логов запуска ядра на консольном порту, а второй блок команд добавляет запуск сервиса serial-getty для порта ttyS0 в oem-config.target SystemD. При первом запуске Ubuntu Mate будет загружаться таргет oem-config.target.

  • После того как мы подготовили карточку с Ubuntu Mate к загрузке – подключим консоль нашего Raspberry Pi к имеющемуся компьютеру. На официальной странице документации есть понятные картинки, показывающие как нужно подключаться к UART-порту Raspberry Pi.

  • Обратимся к официальной схеме распиновки GPIO-разъёма со страницы:

Рекомендую обратить внимание на сайт https://pinout.xyz/. Данный сайт в удобной форме содержит описание всех пинов GPIO-разъёма.

  • На схеме видно, что нам нужно будет подключаться к пинам 6 (GND), 8 (TXD) и 10 (RXD).

  • На фотографии видно, что я взял небольшой кабель, и подготовил один разъём для подключения к USB-донглу USB2UART, а второй разъём для подключения к Raspberry Pi. Основная идея в том, что пины GND (земля) должны совпадать у обоих устройств (чёрный провод), а пины TXD и RXD должны быть соединены "крест-накрест". Т.е. пин TXD у Raspberry Pi должен быть подключён к пину RX у USB2UART (белый провод), а пин RXD у Raspberry Pi должен быть подключён к пину TX у USB2UART (жёлтый провод). Это необходимо для того, чтобы данные передаваемые (transmit) на стороне Raspberry Piпринимались (receive) на стороне USB2UART и наоборот.

  • Теперь подключаем USB-донгл к компьютеру, определяем под каким портом он определился (обычно ttyUSB0) и подключаемся к нему при помощи программы picocom:
wakko@radio:~$ dmesg -T
[Wed Oct 14 17:52:56 2020] usb 1-2: new full-speed USB device number 8 using xhci_hcd
[Wed Oct 14 17:52:57 2020] usb 1-2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
[Wed Oct 14 17:52:57 2020] usb 1-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[Wed Oct 14 17:52:57 2020] usb 1-2: Product: USB2.0-Serial
[Wed Oct 14 17:52:57 2020] usbcore: registered new interface driver usbserial_generic
[Wed Oct 14 17:52:57 2020] usbserial: USB Serial support registered for generic
[Wed Oct 14 17:52:57 2020] usbcore: registered new interface driver ch341
[Wed Oct 14 17:52:57 2020] usbserial: USB Serial support registered for ch341-uart
[Wed Oct 14 17:52:57 2020] ch341 1-2:1.0: ch341-uart converter detected
[Wed Oct 14 17:52:57 2020] usb 1-2: ch341-uart converter now attached to ttyUSB0

wakko@radio:~$ lsusb | grep Serial
Bus 001 Device 008: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

wakko@radio:~$ ls -alh /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 2020-10-14 /dev/ttyUSB0

wakko@radio:~$ picocom --baud 115200 /dev/ttyUSB0
picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        : 
omap is        : 
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready
  • Теперь подключаем к Raspberry Pi сетевой кабель и кабель питания USB Type-C.

  • Если бы мы не вносили изменения в файл cmdline.txt и не создавали симлинк на сервис serial-getty, то в консоли мы бы увидели только:
MMC:   mmcnr@7e300000: 1, emmc2@7e340000: 0
Loading Environment from FAT... *** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
starting USB...
No working controllers found
## Info: input data size = 6 = 0x6
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
2569 bytes read in 17 ms (147.5 KiB/s)
## Executing script at 02400000
8390521 bytes read in 544 ms (14.7 MiB/s)
Total of 1 halfword(s) were the same
Decompressing kernel...
Uncompressed size: 25907712 = 0x18B5200
29530201 bytes read in 1871 ms (15.1 MiB/s)
Booting Ubuntu (with booti) from mmc 0:...
## Flattened Device Tree blob at 02600000
   Booting using the fdt blob at 0x2600000
   Using Device Tree in place at 0000000002600000, end 000000000260eb69

Starting kernel ...

[    1.378684] spi-bcm2835 fe204000.spi: could not get clk: -517
[    7.097717] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    7.347071] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    7.368459] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Mar 23 2020 02:19:54 version 7.45.206 (r725000 CY) FWID 01-88ee44ea
[   16.187898] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
  • А после наших изменений, вывод в консоли должен выглядеть примерно так:
MMC:   mmcnr@7e300000: 1, emmc2@7e340000: 0
Loading Environment from FAT... *** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
starting USB...
No working controllers found
## Info: input data size = 6 = 0x6
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
2569 bytes read in 16 ms (156.3 KiB/s)
## Executing script at 02400000
8390521 bytes read in 544 ms (14.7 MiB/s)
Total of 1 halfword(s) were the same
Decompressing kernel...
Uncompressed size: 25907712 = 0x18B5200
29530201 bytes read in 1883 ms (15 MiB/s)
Booting Ubuntu (with booti) from mmc 0:...
## Flattened Device Tree blob at 02600000
   Booting using the fdt blob at 0x2600000
   Using Device Tree in place at 0000000002600000, end 000000000260eb49

Starting kernel ...

[    1.372766] spi-bcm2835 fe204000.spi: could not get clk: -517
ext4
Thu Jan  1 00:00:05 UTC 1970
-.mount
etc-machine\x2did.mount
dev-mqueue.mount
sys-kernel-debug.mount
sys-kernel-tracing.mount
kmod-static-nodes.service
systemd-remount-fs.service
systemd-journald.service
keyboard-setup.service
systemd-random-seed.service
systemd-modules-load.service
sys-fs-fuse-connections.mount
sys-kernel-config.mount
systemd-journal-flush.service
systemd-sysctl.service
systemd-sysusers.service
systemd-tmpfiles-setup-dev.service
systemd-udev-trigger.service
systemd-udevd.service
[    8.357099] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    8.626219] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    8.649101] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Mar  2 2020 23:30:41 version 7.45.202 (r724630 CY) FWID 01-72f6ece2
systemd-fsckd.service
systemd-rfkill.service
systemd-fsck@dev-disk-by\x2dlabel-system\x2dboot.service
boot-firmware.mount
[  OK  ] Finished Tell Plymouth To Write Out Runtime Data.
[  OK  ] Started Network Service.
systemd-networkd.service
[  OK  ] Finished Commit a transient machine-id on disk.
systemd-machine-id-commit.service
[  OK  ] Finished Create Volatile Files and Directories.
systemd-tmpfiles-setup.service
         Starting Network Name Resolution...
         Starting Network Time Synchronization...
         Starting Update UTMP about System Boot/Shutdown...
[  OK  ] Finished Update UTMP about System Boot/Shutdown.
systemd-update-utmp.service
systemd-timesyncd.service
[  OK  ] Started Network Time Synchronization.
[  OK  ] Reached target System Time Set.
[  OK  ] Reached target System Time Synchronized.
[  OK  ] Started Network Name Resolution.
[  OK  ] Reached target Host and Network Name Lookups.
systemd-resolved.service
[  OK  ] Finished Load AppArmor profiles.
[  OK  ] Reached target System Initialization.
apparmor.service
[  OK  ] Started Trigger anacron every hour.
[  OK  ] Started Daily apt download activities.
[  OK  ] Started Daily apt upgrade and clean activities.
[  OK  ] Started Periodic ext4 Onli…ata Check for All Filesystems.
[  OK  ] Started Discard unused blocks once a week.
[  OK  ] Started Refresh fwupd metadata regularly.
[  OK  ] Started Daily rotation of log files.
[  OK  ] Started Daily man-db regeneration.
[  OK  ] Started Message of the Day.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Paths.
[  OK  ] Reached target Timers.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Listening on CUPS Scheduler.
[  OK  ] Listening on D-Bus System Message Bus Socket.
         Starting Socket activation for snappy daemon.
[  OK  ] Listening on UUID daemon activation socket.
[  OK  ] Listening on Socket activation for snappy daemon.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting Save/Restore Sound Card State...
[  OK  ] Started D-Bus System Message Bus.
dbus.service
         Starting Network Manager...
         Starting Remove Stale Onli…t4 Metadata Check Snapshots...
         Starting End-user configur…er initial OEM installation...
[  OK  ] Finished Save/Restore Sound Card State.
alsa-restore.service
[  OK  ] Reached target Sound Card.
[  OK  ] Finished Remove Stale Onli…ext4 Metadata Check Snapshots.
[  OK  ] Started Network Manager.
NetworkManager.service
[  OK  ] Reached target Network.
         Starting Permit User Sessions...
[  OK  ] Finished Permit User Sessions.
systemd-user-sessions.service
[  OK  ] Started Serial Getty on ttyS0.
serial-getty@ttyS0.service
         Starting Set console scheme...
         Starting Hostname Service...
[  OK  ] Finished Set console scheme.
setvtrgb.service
[  OK  ] Started Hostname Service.
systemd-hostnamed.service
         Starting Network Manager Script Dispatcher Service...
[  OK  ] Started Network Manager Script Dispatcher Service.
NetworkManager-dispatcher.service
[   27.174511] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
         Starting WPA supplicant...
wpa_supplicant.service
[  OK  ] Started WPA supplicant.

Ubuntu 20.04.1 LTS ubuntu ttyS0

ubuntu login: ext4
Thu Jan  1 00:00:05 UTC 1970
[  OK  ] Finished Tell Plymouth To Write Out Runtime Data.
[  OK  ] Started Network Service.
[  OK  ] Finished Commit a transient machine-id on disk.
[  OK  ] Finished Create Volatile Files and Directories.
         Starting Network Name Resolution...
         Starting Network Time Synchronization...
         Starting Update UTMP about System Boot/Shutdown...
[  OK  ] Finished Update UTMP about System Boot/Shutdown.
[  OK  ] Started Network Time Synchronization.
[  OK  ] Reached target System Time Set.
[  OK  ] Reached target System Time Synchronized.
[  OK  ] Started Network Name Resolution.
[  OK  ] Reached target Host and Network Name Lookups.
[  OK  ] Finished Load AppArmor profiles.
[  OK  ] Reached target System Initialization.
[  OK  ] Started Trigger anacron every hour.
[  OK  ] Started Daily apt download activities.
[  OK  ] Started Daily apt upgrade and clean activities.
[  OK  ] Started Periodic ext4 Onli…ata Check for All Filesystems.
[  OK  ] Started Discard unused blocks once a week.
[  OK  ] Started Refresh fwupd metadata regularly.
[  OK  ] Started Daily rotation of log files.
[  OK  ] Started Daily man-db regeneration.
[  OK  ] Started Message of the Day.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Paths.
[  OK  ] Reached target Timers.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Listening on CUPS Scheduler.
[  OK  ] Listening on D-Bus System Message Bus Socket.
         Starting Socket activation for snappy daemon.
[  OK  ] Listening on UUID daemon activation socket.
[  OK  ] Listening on Socket activation for snappy daemon.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting Save/Restore Sound Card State...
[  OK  ] Started D-Bus System Message Bus.
         Starting Network Manager...
         Starting Remove Stale Onli…t4 Metadata Check Snapshots...
         Starting End-user configur…er initial OEM installation...
[  OK  ] Finished Save/Restore Sound Card State.
[  OK  ] Reached target Sound Card.
[  OK  ] Finished Remove Stale Onli…ext4 Metadata Check Snapshots.
[  OK  ] Started Network Manager.
[  OK  ] Reached target Network.
         Starting Permit User Sessions...
[  OK  ] Finished Permit User Sessions.
[  OK  ] Started Serial Getty on ttyS0.
         Starting Set console scheme...
         Starting Hostname Service...
[  OK  ] Finished Set console scheme.
[  OK  ] Started Hostname Service.
         Starting Network Manager Script Dispatcher Service...
[  OK  ] Started Network Manager Script Dispatcher Service.
         Starting WPA supplicant...
[  OK  ] Started WPA supplicant.

ubuntu login: 

Т.е. во-первых отображается процесс загрузки операционной системы, а во-вторых появилось приглашение для логина. Если планируете в дальнейшем использовать эту консоль для работы – обратите внимание на эту заметку (раздел Облагораживание консоли).

Первый вход в систему

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

ubuntu login: oem
Password: oem

Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-1015-raspi aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 updates can be installed immediately.
0 of these updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
  • Проверим, что Raspberry Pi получила IP-адрес от DHCP-сервера, и что есть доступ в Интернет:
oem@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:6d:e3:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.255.16/24 brd 192.168.255.255 scope global dynamic noprefixroute eth0
       valid_lft 86148sec preferred_lft 86148sec
    inet6 fe80::5f46:5802:de04:6a9d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether dc:a6:32:6d:e3:b4 brd ff:ff:ff:ff:ff:ff

oem@ubuntu:~$ ping ya.ru -c 4
PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=55 time=15.5 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=55 time=15.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=55 time=15.4 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=4 ttl=55 time=15.4 ms

--- ya.ru ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 15.355/15.514/15.764/0.154 ms
  • Далее нам необходимо установить SSH-сервер. Если сразу после загрузки Raspberry Pi попытаться его установить – мы получим ошибку:
oem@ubuntu:~$ sudo apt install openssh-server
[sudo] password for oem: 
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1581 (unattendedWaiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1581 (unattended-upgr)
  • Нам пишут, что в данный момент запущен механизм автоматических обновлений, поэтому ручная установка программ недоступна. Для того, чтобы узнать, когда автоматические обновления завершатся – запустим просмотр соответствующих логов:
oem@ubuntu:~$ tail -f /var/log/unattended-upgrades/unattended-upgrades.log 
2020-10-15 11:16:49,298 INFO Starting unattended upgrades script
2020-10-15 11:16:49,300 INFO Allowed origins are: o=Ubuntu,a=focal, o=Ubuntu,a=focal-security, o=UbuntuESMApps,a=focal-apps-security, o=UbuntuESM,a=focal-infra-security
2020-10-15 11:16:49,301 INFO Initial blacklist: 
2020-10-15 11:16:49,301 INFO Initial whitelist (not strict): 
2020-10-15 11:19:22,970 INFO Starting unattended upgrades script
2020-10-15 11:19:22,972 INFO Allowed origins are: o=Ubuntu,a=focal, o=Ubuntu,a=focal-security, o=UbuntuESMApps,a=focal-apps-security, o=UbuntuESM,a=focal-infra-security
2020-10-15 11:19:22,973 INFO Initial blacklist: 
2020-10-15 11:19:22,974 INFO Initial whitelist (not strict): 
2020-10-15 11:21:44,831 INFO Packages that will be upgraded: aptdaemon aptdaemon-data bind9-dnsutils bind9-host bind9-libs busybox-initramfs busybox-static cpp-9 cryptsetup cryptsetup-bin cryptsetup-initramfs cryptsetup-run firefox g++-9 gcc-10-base gcc-9 gcc-9-base ghostscript ghostscript-x gir1.2-packagekitglib-1.0 libasan5 libatomic1 libbrotli1 libcc1-0 libcryptsetup12 libcurl3-gnutls libcurl4 libgcc-9-dev libgcc-s1 libgnutls30 libgomp1 libgs9 libgs9-common libgssdp-1.2-0 libgupnp-1.2-0 libitm1 libldb2 liblsan0 libnss3 libpackagekit-glib2-18 libproxy1-plugin-gsettings libproxy1-plugin-networkmanager libproxy1v5 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libsane libsane-common libsmbclient libsnmp-base libsnmp35 libstdc++-9-dev libstdc++6 libtsan0 libubsan1 libuv1 libwbclient0 libx11-6 libx11-data libx11-xcb1 linux-headers-raspi linux-image-raspi linux-libc-dev linux-raspi packagekit packagekit-tools python3-aptdaemon python3-aptdaemon.gtk3widgets python3-distutils python3-gdbm python3-ldb python3-lib2to3 python3-samba python3-software-properties python3-urllib3 python3.8 python3.8-minimal samba-common samba-common-bin samba-dsdb-modules samba-libs sane-utils smbclient software-properties-common software-properties-gtk xserver-common xserver-xorg-core xserver-xorg-legacy
2020-10-15 11:21:44,832 INFO Writing dpkg log to /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
  • На последней строчке написано, что теперь запущено обновление пакетов (dpkg), поэтому нажмём Ctrl+C и запустим просмотр другого лог-файла:
oem@ubuntu:~$ tail -f /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
...
Log started: 2020-10-15  11:48:26
(Reading database ... 240077 files and directories currently installed.)
Preparing to unpack .../libpackagekit-glib2-18_1.1.13-2ubuntu1.1_arm64.deb ...
Unpacking libpackagekit-glib2-18:arm64 (1.1.13-2ubuntu1.1) over (1.1.13-2ubuntu1) ...
Setting up libpackagekit-glib2-18:arm64 (1.1.13-2ubuntu1.1) ...
Processing triggers for libc-bin (2.31-0ubuntu9) ...
Log ended: 2020-10-15  11:48:53
  • Через какое-то время (в моём случае это заняло около получаса) – добавление новых записей в лог-файл прекратится и мы сможем продолжить работу. Нажмём Ctrl+C, обновим систему и установим SSH-сервер:
oem@ubuntu:~$ sudo apt update
oem@ubuntu:~$ sudo apt upgrade
oem@ubuntu:~$ sudo apt install openssh-server -y
  • Теперь попробуем подключиться к нашему Raspberry Pi через ssh:
wakko@Wakko-iMBP:~$ ssh oem@rpi.acmelabs.spb.ru
oem@rpi.acmelabs.spb.ru's password: 
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-1015-raspi aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 updates can be installed immediately.
0 of these updates are security updates.

*** System restart required ***
Last login: Wed Apr  1 18:24:24 2020
  • SSH-сервер работает, теперь установим и запустим RDP-сервер, для подключения к Raspberry Pi в графическом режиме:
oem@ubuntu:~$ sudo apt install xrdp
oem@ubuntu:~$ sudo adduser xrdp ssl-cert
oem@ubuntu:~$ sudoedit /etc/xrdp/sesman.ini
[Security]
AllowRootLogin=false
oem@ubuntu:~$ sudoedit /etc/xrdp/xrdp_keyboard.ini
[default_rdp_layouts]
rdp_layout_us=0x00000409
rdp_layout_ru=0x00000419

[layouts_map_ru]
rdp_layout_us=ru,us
rdp_layout_ru=ru,us

[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
oem@ubuntu:~$ sudo systemctl restart xrdp.service xrdp-sesman.service
  • После запуска RDP-сервера, подключимся к нему используя логин и пароль oem. На рабочем столе нажмём правой кнопкой мыши и кликнем по пункту Open Terminal. Далее в терминале выполним следующие команды:
oem@ubuntu:~$ xhost +
access control disabled, clients can connect from any host
oem@ubuntu:~$ sudo oem-config

Команду xhost + необходимо выполнять перед sudo oem-config, в противном случае программе oem-config не хватит прав для отображения под учётной записью oem.

  • Таким образом мы запустим графический процесс установки Ubuntu Mate. Нужно будет выбрать язык, временную зону, указать название компьютера и создать пользовательскую учётную запись:

  • После завершения программы oem-config необходимо восстановить нормальную загрузку Ubuntu Mate (в настоящее время симлинк default.target указывает на oem-config.target):
oem@ubuntu:~$ sudo rm -f /etc/systemd/system/default.target
oem@ubuntu:~$ sudo reboot

Удаление программы oem-config:

  • После перезагрузки логинимся под пользовательской учётной записью, которую создали на предыдущем шаге и выполняем следующую команду:
wakko@rpi:~$ sudo oem-config-remove

Удаление сервисной учётной записи oem:

wakko@rpi:~$ sudo deluser oem
Removing user `oem` ...
Warning: group `oem` has no more members.
Done.
wakko@rpi:~$ sudo rm -rf /home/oem/

Установка дополнительных утилит и настройка рабочего окружения в bash:

wakko@rpi:~$ sudo apt install mc bash-completion curl htop pinfo screen usbutils

Далее можно настроить рабочее окружение в bash по этой заметке. А графическую часть Ubuntu Mate можно настроить по этой заметке (читать начиная с пункта Настройка после установки).


Следующая запись Предыдущая запись