Raspberry pi просмотр Youtube по расписанию

Материал из rrv-wiki
Перейти к навигации Перейти к поиску


Просматривать Youtube на малинке будем с помощью VLC.

Предварительная настройка

Обновление системы и прошивки

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update


Отключаем скринсервер

в файле:

  • ~/.config/lxsession/LXDE/autostart

либо в файл если первого нет:

  • /etc/xdg/lxsession/LXDE-pi/autostart

Оставим только:

@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE

Отключение гашения экрана

В файле:

  • /boot/cmdline.txt

установим:

  • consoleblank=0

Скрытие курсора

apt-get install unclutter

добавим в файл:

  • ~/.config/lxsession/LXDE/autostart

либо в файл:

  • /etc/xdg/lxsession/LXDE-pi/autostart

строку

@unclutter -display :0 -idle 3 -root -noevents

raspi-config

Для начала настроим Raspberry Pi запустим raspi-config:

# raspi-config

Проходим по меню:

  • 6 Advanced Options Configure advanced settings
  • A2 GL Driver Enable/disable experimental desktop GL driver

и выбираем:

  • G2 GL (Fake KMS) OpenGL desktop driver with fake KMS

Сохраняем и перезагружаем.

VLC

Запускаем VLC проходим по меню:

  • Инструменты
  • Настройки
  • Вкладка Видео
  • в Output выбираем Модуль вывода видео через MMAL (для Raspberry Pi) (либо MMAL x11 splitter for Raspberry Pi)

Скрипт

Будем запускать скрипт через крон для просмотра трансляции

#!/bin/bash

# Убиваем все vlc
killall -9 vlc

# # Управление телевиром (в часности питанием)
# sudo apt install cec-utils
# # Поиск устройства, нам нужно будет выбрать адресс (В нашем случае address: 0.0.0.0)
# echo 'scan' | cec-client -s -d 1
# # Включение устройства
# echo 'on 0.0.0.0' | cec-client -s -d 1
# # Отправка устройства в режим ожидания
# echo 'standby 0.0.0.0 | cec-client -s -d 1
# # Нам хватит, но получение справки по командам
# echo 'h' | cec-client -s -d 1

# Включаем HDMI (Тут нам не понадобилось)
# /opt/vc/bin/tvservice -p

# Включение TV
echo 'on 0.0.0.0' | cec-client -s -d 1

# Текущее время в секундах
START=$(date +%s)

# Проверяем если скрипт выполняется дольше 45 минут (2700 сек), заканчиваем его
while [ $(($(date +%s) - $START)) -lt 2700 ]
do
 # Запускаем YouTube
 # Переменные XDG_RUNTIME_DIR, DISPLAY, XAUTHORITY берем из консоли через echo, это самый простой путь установить окружение для запуска из cron
 XDG_RUNTIME_DIR=/run/user/1000 DISPLAY=:0 XAUTHORITY=/home/pi/.XauthorityFV cvlc --file-caching=5000 --network-caching=5000 --fullscreen --video-on-top --play-and-exit --preferred-resolution 1080 https://www.youtube.com/c/NsktvRu/live

 # Ждем 5 сек между переподключениями (т.к. мы не знаем когда точно запустится прямая трансляция)
 sleep 5
done

# Убиваем все vlc
killall -9 vlc

# Отправка устройства в режим ожидания
echo 'standby 0.0.0.0' | cec-client -s -d 1

# Выключаем HDMI (Тут нам не понадобилось)
# /opt/vc/bin/tvservice -o

Так же раз в час запускаем маленький скрипт tv-standby.sh который переводит телевизор в "сон"

#!/bin/bash

# Отправка устройства в режим ожидания
echo 'standby 0.0.0.0' | cec-client -s -d 1

Защита флешки

После того как все настройки закончены можно перевести флешку в режим только чтение. Например как описано тут.

Тут упрощенный пересказ.

Создадим файл

  • /usr/local/bin/mount_unionfs

Следующего содержимого

#!/bin/sh

DIR=$1
ROOT_MOUNT=$(awk '$2=="/" {print substr($4,1,2)}' < /etc/fstab)
if [ $ROOT_MOUNT = "rw" ]; then
        /bin/mount --bind ${DIR}.orig ${DIR}
else
  # Для /var 40М выделяем в памяти
  if [ ${DIR} = "/var" ]; then
        /bin/mount -t tmpfs -o size=40M ramdisk ${DIR}.rw
        /usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}.rw=RW:${DIR}.orig=RO ${DIR}
  else
        # Для остального выделяем по 10M памяти
        /bin/mount -t tmpfs -o size=10M ramdisk ${DIR}.rw
        /usr/bin/unionfs-fuse -o cow,allow_other,suid,dev,nonempty ${DIR}.rw=RW:${DIR}.orig=RO ${DIR}
  fi
fi

Дадим права на запуск:

chown root /usr/local/bin/mount_unionfs && chmod 744 /usr/local/bin/mount_unionfs

Настроим параметры старта системы: Приведем файл

  • /boot/cmdline.txt

к виду

logo.nologo dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=8b53c330-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fastboot noswap

Подготовим разделы:

cp -al /etc /etc.orig    # -l, --link Делает жесткие ссылки вместо копирования обычных файлов (не каталогов)
mv /var /var.orig
mv /home /home.orig
mkdir /etc.rw /var /var.rw /home /home.rw

Файл:

  • /etc/fstab

приводим к виду:

proc            /proc           proc    defaults          0       0
#PARTUUID=8b53c330-01  /boot           vfat    defaults          0       2
#PARTUUID=8b53c330-02  /               ext4    defaults,noatime  0       1
#######Перемонтировать / в режим чтения##############   mount -o rw,remount /
PARTUUID=8b53c330-01  /boot           vfat    ro          0       2
PARTUUID=8b53c330-02  /               ext4    ro          0       1
tmpfs   /tmp   tmpfs   defaults,nosuid,mode=1777,size=20M   0 0
mount_unionfs   /etc            fuse    defaults        0       0
mount_unionfs   /var            fuse    defaults        0       0
mount_unionfs   /home            fuse    defaults        0       0

Перезагрузка.

Возвращение в rw режим

Перемонтируем корневую систему в режим записи:

mount -o rw,remount /

Вернем fstab в исходное состояние (раскомментируем до #######Перемонтировать / в режим чтения############## и закомментируем после) и вернем на место каталоги /var.orig и /home.orig со всем содержимым.