Телевизор + Raspberry PI в качестве информационного видео-табло

Постановка задачи и выбор пути реализации

Наш видео стенд должен непрерывно проигрывать видео ролики по порядку и повторять цикл заново. Поскольку основной задачей было по максимуму снизить бюджет, то именно по этому была выбрана связка ТВ + Raspberry PI. Кроме того, мини-компьютеры Raspberry отличаются очень маленьким энергопотреблением, что тоже явилось небольшим плюсом.

Базовая установка Raspbian Linux (упрощенная версия Debian)

Скачиваем дистрибутив системы с официального сайта:

Raspbian

Я выбрал вариант с использованием рабочего стола («WITH DESKTOP»), чтобы в дальнейшем, к примеру, была возможность использовать функцию удаленного рабочего стола.

Записываем образ системы на SD-карту с помощью программы Win32DiskImager, которую рекомендовал сам разработчик. После этого мы вставляем карту в Raspberry PI и можем приступить к запуску системы.

Первоначальная настройка Raspbian

Настраиваем сетевые параметры, только в том случае, если в нашей сети нет работающего DHCP сервера.

Меняем имя нашего компьютера (по умолчанию стоит «raspberry»):

Запустим небольшой инструмент для настройки нашего Raspberry PI:

Запуск SSH сервера на Raspberry Pi

В открывшемся окне открываем «5 Interfacing Options» -> «P2 SSH» -> Enable

Отключаем заставку, отображаемую при загрузке системы:

«3 Boot Options» -> «B3 Splash Screen» -> No

Устанавливаем часовой пояс для корректного отображения времени:

«4 Localisation Options» -> «I2 Change Timezone» -> Europe -> Moscow

Выставляем разрешение экрана

В моем случае телевизор имел разрешение 1920х1080, поэтому я его и поставил:

«7 Advanced Options» -> «A5 Resolution» -> «CEA Mode 16»

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

Доступ по VNC

Это, пожалуй, самый простой способ настроить удаленный доступ начать визуально управлять удаленным компьютером. Но подойдет он только тем, кто пользуется для управления именно VNC клиентами, такими как UltraVNC и TightVNC для Windows.

Для этого нам необходимо активировать наш VNC Server через все ту же программу raspi-config: «Interfacing Options» -> «P3 VNC» -> Enable, после чего мы увидим сообщение: «The VNC Server is enabled».

Всё, устанавливаем на той машине, с которой мы планируем осуществлять управление, RealVNC Viewer и подключаемся к нашему Raspberry. Единственно, что не получается наблюдать ни какого видео изображения при уже запущенном видеоролике, но в целом это не проблема, главное есть возможность удаленно завершить трансляцию, закрыв окно терминала, из которого происходил запуск управляющего скрипта.

Будьте внимательны при использовании других VNC-клиентов, использующих устаревшую версию протокола, можно получить вот такое сообщение с ошибкой:

Connected to RFB server, using protocol version 3.3
No configured security type is supported by 3.3 VNC Viewer

Microsoft RDP

Так уж повелось, что работая из-под Windows, многие из нас привыкли пользоваться программкой «Подключение к удаленному рабочему столу» для того, чтобы подключаться к удаленным компьютерам и управлять ими так, как-будто мы работаем прямо на них. В операционной системе macOS моей любимейшей программой является Jump Desktop, которая в принципе делает тоже самое, но может также подключаться и по VNC и, самое главное, умеет автоматически примонтировать любые файловые ресурсы в качестве сетевых дисков. Ну да ладно, приступим к установке привычной нам виндовой удалёнки:

Всё, после этого можно подключаться к нашему Raspberry из-под Windows, указав соответствующие ip, логин и пароль. Единственным недостатком такого подключения, как выяснилось позднее, является создание отдельной сессии для нашего подключения, т.е. вы будете работать на удаленном рабочем столе, но вы не будете видеть реально что там происходит на экране у того же самого пользователя, но подключенного напрямую. Т.е. проще говоря, вы будете двигать мышкой, но на удаленном экране (телевизоре) ничего происходить не будет. Это с одной стороны минус, с другой стороны — возможность работать с удаленной системой не прерывая процесса воспроизведения на основном подключенном дисплее.

Устранение неполной развертки

При первом включении я обратил внимание, что изображение не заполняет экран полностью. Как выяснилось, этот эффект называется «сжатая развертка» и он исправляется довольно просто. Чаще всего многие мониторы и телевизоры могут исправлять подобный эффект самостоятельно, поэтому для начала стоит обратиться к документации дисплея и попробовать изменить настройку через экранное меню. После этого открываем наш конфиг для редактирования:

И раскомментируем  «disable_overscan=1», как описано ниже или с помощью программы «raspi-config».

Процедура редактирования конфигурационного файла подробно описана в статье «Звук на Raspberry Pi, OMXPlayer, Chromium и другие«. Повторим основные пункты здесь:

Добавьте следующие строки в конфигурационный файл:

Если корректировка не требуется:

disable_overscan=1
Для увеличения размера изображения:

overscan_left=-20

overscan_right=-20

overscan_top=-20

overscan_bottom=-20
Регулировка размера изображения производится экспериментальным подбором параметров в файле config.txt. Изменяйте параметры с шагом по 5 или 10 за один раз.

Удаление лишнего софта

После загрузки системы первым делом проводим удаление лишнего софта, это желательно сделать именно перед обновлением, чтобы не обновлять то, что в последствии будет удалено. При первоначальном запуске Raspbian Stretch мы имеем следующую картину в файловой системе:

Использование оперативной памяти следующее:

Что ж, запомним эти значения и приступим к нашей оптимизации.

Удаляем софт, который нам никогда не пригодится:

Удалим пакеты для разработчиков:
# aptitude purge sudo dpkg --get-selections | grep "\-dev" | sed s/install//

Удалим raspi-config, он нам больше не понадобится:
# aptitude purge raspi-config

Смотрим какие версии компилятора GCC установлены в системе:

Последняя установленная версия 6, остальные пять удаляем:

Удаляем игры и все, что с ними связано:

Удаляем Wolfram (705 Мб), LibreOffice (245 Мб) и все связанные пакеты (57.3Мб):

Удаляем инструменты для программирования (264.2Мб+75.4Мб):

В итоге мы имеем следующую картину по свободному месту на диске:

Что в целом не плохо. Для фанатиков и ценителей минимализма можно удалить еще кучу пакетов, но я бы это делать не рекомендовал. Во всяком случае не для реализации аналогичного проекта. Если же все-таки хочется заняться чисткой основательно, то советую сохранить список пакетов, которые установлены изначально:

А в случае чего всегда можно заново установить все пакеты из нашего списка:

Ну а чтобы установить пакеты после добавления их в список, используйте команду:

Если мы имеем просто список имен пакетов, то восстановление надо делать  путем передачи всех этих имен команде apt:

В конечном итоге вы можете удалить из системы хоть всё, главное для работоспособности системы оставить список минимально необходимых пакетов для ядра Debian:

Список пакетов
adduser apt apt-utils aptitude bsdmainutils cpio cron debian-archive-keyring debian-backports-keyring debian-multimedia-keyring dhcp3-client dhcp3-common dmidecode ed gnupg gpgv groff-base ifupdown info install-info iproute iptables base-files base-passwd bash bsdutils coreutils debconf debconf-i18n debianutils diffutils dpkg e2fslibs e2fsprogs findutils gcc-4.2-base gcc-4.3-base gcc-4.4-base grep gzip hostname initscripts libacl1 libattr1 libblkid1 libc-bin libc6 libcomerr2 libgcc1 liblocale-gettext-perl libncurses5 libpam-modules libpam-runtime libpam0g libselinux1 libsepol1 libslang2 libss2 libstdc++6 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl libunwind7 libuuid1 libvolume-id1 login lsb-base lzma mawk mount ncurses-base ncurses-bin passwd perl-base procps sed sensible-utils sysv-rc sysvinit sysvinit-utils tar tzdata util-linux zlib1g

Далее все действия производятся при подключенном Интернете, так как для установки и обновления пакетов потребуется доступ к внешним репозиториям.

При желании, так как это совершенно не обязательное условие, устанавливаем и настраиваем пакет русского языка из консоли терминала.

Руссификация Raspberry PI делается следующим образом:

Перезагружаем наш Raspberry и теперь все пункты меню и сообщения в программах будут выводиться на русском языке.
Проверить корректность настроек установленной локализации можно так:

Все выставленные настройки русификации хранятся в файле /etc/console-cyrillic. Вот такой вот получился руссификатор для нашего Raspberry.

Обязательно производим обновление (+86.3Мб):

или по команде

Выбор медиа-плеера

Но в стандартной сборке Raspbian Jessie with Pixel привычного медиа-плеера с графическим интерфейсом нет, поэтому его нужно установить. Мне нравится кросс-платформенный медиа-плеер VLC Player. Он доступен для Windows, MacOS, Linux и мобильных платформ.

Однако, VLC Player для Raspbian меня разочаровал.С VLC действительно есть проблемы, в сети гулял how-to по копмпиляции VLC с поддержкой аппаратного ускорения, но у меня успехом это действо не увенчалось. Он не использует аппаратную акселерацию при декодировании видео, поэтому видео жутко тормозит. Грубо говоря посмотреть видео на YouTube или в VK гораздо удобнее, чем из локального файла с помощью VLC. Таким образом, в Raspbian от VLC остается полезной только функция аудио-проигрывателя. При этом VLC «весит» более 60 Мб.

Для проигрывания видео с аппаратным ускорением декодирования в Raspbian самым лучшим считается плеер Omxplayer. Эта программа не имеет графического интерфейса и управляется с командной строки. Зато она отлично работает. Дополнительная информация доступна в сети, например тут http://elinux.org/Omxplayer. Заметным плюсом является то, что Omxplayer идет в составе дистрибутива Raspbian.

Решение на самом деле гораздо проще — есть omxplayer, который сразу из коробки идет в составе полной версии Raspbian (не Lite).

Подключение сетевого диска

Для удобства мы будем воспроизводить наш контент из сетевой папки. Для этого нужно создать какую-нибудь папку на нашем raspberry и примонтировать к ней наш сетевой диск следующей командой:

Думаю, здесь всё понятно. Но в случае, если мы не прописали имя своей «малины» в файле /etc/hosts, мы получаем вот такое сообщение с ошибкой:

То скорее всего вы не прописали имя своей «малины» в файле /etc/hosts.

Проблемы с использованием это команды: она работает только через sudo, т.е. от привилегированного пользователя и, когда мы пытаемся сделать автоподключение сетевого диска через /etc/fstab, то монтирование работать не будет. Только ручной запуск скрипта и всё, хоть ты тресни.

Все получилось только когда я решил воспользоваться мануалом с сайта raspberry-projects.com и прописал в /etc/rc.local следующую строку:

где sleep — это задержка в 60 секунд, чтобы комп успел за это время получить сетевые настройки, а в map.sh прописан наш код для маппинга, только уже без sudo.

Если вопрос автомонтирования решен, то, в принципе, можно объединить наш маппинг-код со скриптом воспроизведения нашего «медиа проигрывателя», речь о котором пойдет дальше.

Автозапуск видео на Raspberry PI (Raspbian)

Воспользуемся следующим скриптом, который назовем, к примеру, «play»:

1. я бы добавил в скрипт проверку наличия вставленной флешки (if) и увеличил слип секунд до 5.
2. я на таких задачах использую openbox и прописываю скрипт в его автозагрузку, по памяти это где-то в /home/pi/.config/openbox/autostart

Кому надо, можно отключать HDMI:

По идее команда включения с ключом «-p», но у меня почему-то комп из спячки не вернулся, хотя по сути дела можно было даже продолжать в окне терминала что-то повводить, но изображение так и не появлялось. В итоге я «вслепую» ввел «reboot» и комп перезагрузился.

Итог

Все команды автозапуска было решено записать в одном единственном файле /etc/rc.local, где сначала через 60 секунд монтируем наш сетевой диск, а затем начинаем воспроизведение:

Запуск любых дополнительных скриптов, которые не требуют административных прав, делаем через cron в файле /etc/crontab.

Синтаксис cron, напоминаю, следующий:

Как бонус я убрал с рабочего стола все иконки, настроил автоскрытие таскбара и заменил фоновую картинку рабочего стола, которая установлена по умолчанию: /usr/share/rpd-wallpaper, а также установил программку, которая делает курсор мыши невидимым:

Перезагружаем комп и радуемся полученному результату.

Проект реализован. Всем спасибо за внимание!


Категории: Оборудование

Комментирование отключено