pyLCI — внешний интерфейс для Raspberry Pi и других Linux-устройств

Привет!

Сегодня я хочу показать вам проект, над которым я работал последние пару лет и наконец выпускаю первую пригодную для использования версию. Это pyLCI — Python-based Linux Control Interface, внешний интерфейс для компьютеров с Linux, который позволяет взаимодействовать с системой посредством символьных дисплеев и кнопок. С помощью написанных под этот интерфейс приложений можно выполнять большое количество задач, связанных с администрированием и настройкой системы, а также запускать различные скрипты и выполнять команды. И всё это — не завися от монитора с клавиатурой!

А ещё мой интерфейс:

  • Дешёвый
  • Простой
  • Легко расширяемый
  • Универсальный

Заинтересованы? Прошу под кат.

Про К^W^W Как всё начиналось

В моей самой первой статье на Хабре я планировал выпустить цикл статей о конфигурировании различных сервисов под Linux на примере EEE Pc 701 с разбитым экраном, который я тогда приобрёл (и успешно использую до сих пор для решения различных задач). Мне не удалось завершить тот цикл, в основном из-за неорганизованности, но ещё и потому, что передо мной остро встала проблема отсутствия нормального интерфейса для упрощения всех моих задач. Я начал писать свою панель управления с веб-интерфейсом, что вылилось в несколько месяцев экспериментирования, которые закончились из-за изначально неверной архитектуры моего творения, как и из-за недостатка знаний о лучших решениях о её выборе (ну и ограниченность денежных средств, чтобы купить дополнительное железо для некоторых ключевых функций). Тем не менее, идея надолго засела у меня в голове и я потихоньку присматривался к уже существующим решениям.

Через год-два я наконец-таки смог начать работать с Raspberry Pi. Это было интересно, и я придумал для себя новый проект — устройство с Raspberry Pi и множеством дополнений, которые бы превращали её в более-менее сравнимый по функционалу компьютер. Его планировалось вставлять в отсек 5.25 персонального компьютера, вывести провода на заднюю панель, подключить HDMI-кабелем к монитору и использовать как плеер/лёгкий браузер/т.п. Довести проект до логического завершения не получилось — не хватало лёгкого интерфейса управления этим добром. Были безуспешные попытки подключить экран от Нокии 3310 для вывода хоть чего-то, но одного лишь экрана всё равно не хватало…

Что ж, не вышло — так не вышло. Через какое-то время я заинтересовался носимыми компьютерами. Не в последнюю очередь из-за Fallout с извечным Pip-Boy, в интерфейсе которого я тогда проводил много времени 😉 Pip-Boy меня заинтересовал, но не только тем, что с его помощью можно было вылечиться перед очередной перестрелкой. Я уже какое-то время чувствовал, сколько скрытого потенциала есть в Linux-устройствах — Android тому примером. Проблемы начинаются около UI.
UI — одна из проблем, из-за которой я забросил свою панель управления. UI с нуля определять не так и просто — нужно знать, где дать свободу, а где ограничить пользователя твоего UI и того, кто будет на его основе создавать приложения.
А ещё UI сейчас в основном приспособлены под графические дисплеи. Которые огромны, неудобны и легко бьются, ну и так далее. Везёт, если есть тачскрин. Если нет — вози мышкой. Возвращаясь к носимым компьютерам — какая, к чёрту, носимость с огромным дисплеем?

Через какое-то время я полностью погряз в Raspberry Pi. Сейчас у меня в комнате под разные задачи приспособлены 4 штуки, ещё 2 свободны. Проблемы с их настройкой — нужно либо по сети лезть, либо по UART. По сети — какой там IP? Он вообще получен? А то что-то роутер молчит… UART? Ага, если только он не отключен. Был случай, когда пришлось монтировать SD-карту под другим компьютером и править параметры загрузчика… Как по мне, слишком сложно. Неоправданно сложно.

Что делать? Где брать вдохновение для решения всех этих проблем?

image

Вот здесь.
Да, в старых мобильных телефонах. Максимально простые системы меню для конфигурации, которые мы использовали в мобильниках и куче других устройств задолго до появления Raspberry Pi, но почему-то не перенесли дальше, туда, где их сейчас не хватает.

Для чего можно использовать этот интерфейс?

  • Подключение к беспроводным и проводным сетям, получение информации о сетевых подключениях и их настройка
  • Подключение Bluetooth-устройств
  • Управление медиаплеерами и настройка звука
  • Сканирование/печать документов, съёмка фото с помощью камеры
  • Управление запущенными сервисами
  • Резервное копирование данных
  • GPS и навигация
  • Пентестинг

Где можно использовать этот интерфейс?

  • Raspberry Pi и другие SBC под Linux. Замечательная штука, так как отпадает необходимость во втором компьютере для множества рутинных и порой недоступных иначе задач. Подключиться к WiFi без UART и клавиатуры? Без проблем. Выполнить команду shutdown для того, чтобы не попортить SD-карту? Тоже. Запустить какой-то скрипт? Да пожалуйста.
  • Домащние сервера и роутеры. Просматривать список DHCP-клиентов на таком достаточно удобно. Отключить точку доступа WiFi или же запросить новый адрес по DHCP? Зачем для этого лезть в веб-интерфейс? Ещё, к примеру, можно легко блокировать на роутере сайты по списку, когда садишься работать. А ещё можно бекапить внешние носители по команде, сканировать документы, да куча всего — только сделай pyLCI-обёртку для своих скриптов.
  • HTPC. Удобно, чтобы быстро поменять громкость музыки, промотать/переключить трек, приостановить воспроизведение, ну или подключить Bluetooth-колонки.
  • Стационарные компьютеры. Особенно если в качестве стационарного компьютера используется Raspberry Pi =) Даже если нет, это вполне себе хорошее дополнение для изменения настроек системы.
  • Ноутбуки и планшеты под Линукс… Не, ну никто не запрещает 😉

Недавно я решил сделать pyLCI более доступным для всеобщего использования, и, как результат моей работы, представляю вам версию 1.0.

Что она умеет из коробки?

  • Подключаться к беспроводным сетям (больше информации здесь)
  • Просматривать IP/MAC адреса интерфейсов
  • Менять громкость
  • Переключать треки в консольном плеере (как пример, я использую MOCP).
  • Сканировать I2C шину на наличие девайсов
  • Выключать и перезагружать компьютер

Пока это довольно маленький список, но его очень легко пополнять. pyLCI — это своего рода фреймворк, который легко расширяем «приложениями» на Python для добавления в него той или иной функции. Этим приложениям он предоставляет устройства ввода-вывода, которые можно использовать для общения с пользователем, как и набор основных элементов UI — вроде элемента меню. Таким образом, при написании приложения можно не концентрироваться на железе или логике UI и полностью посвятить себя решению основной цели =)

Какое железо нужно для начала использования?

Нужен HD44780-совместимый дисплей. Типа такого:
image
Постоянный обитатель всяческих starter kits, сам стоимостью около 2$ (eBay).
Ещё нужны кнопки. Типа таких:
image
Или даже в составе этого:
image
Ещё 1-5$. Даже используя I2C-экспандеры (1$ штука), реально уложиться в 7-10$/комплект.
Если точнее, сейчас поддерживаются в основном GPIO-подключённые устройства (для Raspberry Pi) и I2C->GPIO экспандеры, как и USB HID устройства ввода. В планах:

  • Поддержка комбинации Arduino + LCD&button shield для создания простого устройства ввода-вывода, подключающегося по USB. Делов-то — прошивка для Arduino и соответствующий драйвер.
  • Создание беспроводного терминала с LCD и кнопками для управления без тянущихся повсюду проводов (ESP8266?).


Всем заинтересованным предлагаю ознакомиться с документацией, ну и инструкцией по установке. Интересует разработка своего приложения? У меня есть небольшой crash course и примеры в качестве кода уже написанных приложений.

Из недостатков:

  1. Вся система на данный момент — это один процесс, включая и приложения. В связи с этим и возможным количеством настроек, которые система должна иметь возможность менять, среднестатистическому пользователю её легче запустить под рутом, чем настраивать все необходимые пермишены. Если есть необходимость, могу перечислить, какие groups/permissions нужны для конкретных приложений и способов подключения IO.
  2. Я написал скрипты установки только для Debian/Raspbian. Буду признателен, если кто-то сможет помочь с добавлением поддержки других дистрибутивов в install.sh, config.sh и update.sh.
  3. Также нет скрипта для sysvinit — на данный момент всё заточено под systemd. Если у кого есть подходящий проверенный скрипт для переделки, прошу поделиться =)
  4. Если давать pyLCI клавиатуру, оно захватывает её всю. Это печально, ведь было бы круто использовать одну клавиатуру и для X, и для pyLCI — использовать стрелки нумпада (активны, когда отключён NumLock) для навигации и поставить рядом экранчик. Думаю скоро добавить возможность «выбрасывать» обратно в систему неиспользуемые активным приложением коды клавиш, если используется драйвер HID =)

Пожалуй, на этом на сегодня закончу. Меня очень интересует ваше мнение о моей идее/реализации, как и то, заинтересованы ли вы её использовать для своих Linux-устройств. Здесь можно оценить планы на ближайшее будущее системы, как и примерный список приложений, которые будут добавлены в стандартную поставку в будущем.

Вы бы использовали такой интерфейс на своём Linux-устройстве?

Проголосовал 1 человек. Воздержавшихся нет.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Источник

linux, pylci, raspberry pi, ui

Читайте также