Приборкання Raspberry Pi 4 Model B з 8 ГБ оперативної пам’яті
З 2014 року я використовував розумний телевізор LGE webOS. Він працює цілком справно. Крім деяких набридливих дрібниць, як то нездатність програвання Classic FM. Спокусливим вибором приставки до телевізора здається Raspberry Pi 4 з 8 ГБ оперативної пам’яті. Але є одна біда: апаратне декодування відео працює тільки у 32-розрядній операційній системі, як може обслуговувати не більше, ніж 4 ГБ пам’яті. Йдеться не просто про компроміс між пам’яттю і процесорним часом, відео не програються плавно без апаратного декодування взагалі.
То ось як я все налаштував майже без компромісів:
- Встановив
aarch64
Manjaro як основну операційну систему для використання всієї оперативної пам’яті - Встановив 32-розрядний Raspberry Pi OS контейнер, щоб запускати з повною апаратною підтримкою декодування VLC, Kodi, а також інші гостинці Raspberry Pi, такі як Wolfram Mathematica
- Створив кілька сценаріїв оболонки, щоб спростити запускання програм із контейнера.
Хоч завантажити і запустити образ Manjaro дуже просто, потрібно детальніше
описати, як запускати raspios. Спершу потрібно завантажити образ і
скопіювати кореневу файлову систему у /var/lib/machines/raspios
. Таблиця
розділів не підтримується losetup
. Тож доведеться дещо порахувати самостійно
з допомогою таких команд:
fdisk -l
mount -v -o loop,offset=$((512*start2)) -t ext4 raspios.img /mnt
mount -v -o loop,offset=$((512*start1)),sizelimit=$((512*size1)) -t vfat raspios.img /mnt/boot
Тоді файли можна просто скопіювати у потрібне місце:
sudo rsync -raP /mnt/* /var/lib/machines/raspios/
Потрібно створити такі конфігураційні файли для systemd-nspawn, як це записано в репозиторії sakhnik/chbox:
./etc/polkit-1/rules.d/49-nopasswd_limited.rules
./etc/systemd/nspawn/raspios.nspawn
./etc/systemd/system/systemd-nspawn@raspios.service.d/override.conf
Після цього можна запустити машину командою machinectl start raspios
.
Запуск може зайняти трохи часу через повільну службу dhcpcd
. Пізніше можна
буде такі проблеми виявити з допомогою systemd-analyze blame
і виправити.
Можна сконфігурувати, щоб машина запускалася автоматично: systemctl enable
systemd-nspawn@raspios
.
Справжня магія відбувається у сценарії запуску програм з контейнера.
Тут можна визначити все, що потрібно у середовищі, щоб надати доступ до
графіки і звуку основної системи:
pserver=/tmp/pulse-host/$USER
if ! (machinectl -q shell $USER@raspios /bin/mount | grep -q $pserver); then
# Allow Arch accessing pulseaudio
machinectl -q shell $USER@raspios /bin/mkdir -p $pserver
machinectl bind --read-only raspios /run/user/$UID/pulse $pserver
fi
# Allow local connections from the container to the host X11 server
xhost +local: || true
machinectl -q shell \
--setenv=DISPLAY=$DISPLAY \
--setenv=PULSE_SERVER=unix:$pserver/native \
$USER@raspios "$@"
Із визначеним раніше правилом polkit, ми можемо запускати деякі команди machinectl
без підвищення прав. Таким чином, певні користувачі можуть отримувати доступ
до оболонки контейнера і запускати графічні програми. Наприклад,
щоб запустити VLC, який вміє виконувати апаратне декодування, ми можемо створити
такий сценарій у /usr/local/bin/vlc
:
#!/bin/bash -x
# Перетворити параметри в один текстовий рядок для інтерпретації.
input=
for i in "${@}"; do
input="${input} ${i@Q}"
done
$HOME/bin/raspios.sh /bin/bash -xc "cd '$(pwd)'; vlc ${input}"
Ще один крок, можна скопіювати файл vlc.desktop
з контейнера
у основну систему і змінити рядки Exec=
і TryExec=
, щоб вели до
/usr/local/bin/vlc
.
Нарешті, можна створити сценарій оболонки, щоб слідкував за буфером обміну. Коли помічено посилання YouTube (або якоїсь іншої служби, підтримуваної youtube-dl), можна відразу його почати відтворювати. Таким чином з’явився скрипт yt-watch.sh. Тепер можна переглядати список відтворення і просто підсвітити бажане посилання або скопіювати його у буфер обміну, щоб за кілька секунд воно запустилося програватися.