FlipCTL — our graphical framework for embedded Linux systems
⚠️ Это исходный черновик текста на русском языке, до редактуры и перевода. Весь текст написан мною без использования AI. В тексте есть мат, это пометки для редактора, где требуется перефразировать предложение.
Павел Жовнер (автор этой хуйни)
Знаете почему Flipper Zero такой популярный? Не из-за дельфинчика блядь, а потому что им можно пользоваться сразу из коробки. Если бы мы сделали Flipper Zero в формате Proxmark3 без экрана (без обид iceman), им бы пользовались 10 человек, хадркорных профессионалов. Потому что мы все любим простое понятное — нажми на кнопку и получишь результат.
До появления флиппер зиро никто особо не заморачивался с автономностью подобных нишевых устройств для гиков. Все делали отдельно железо + приложение компаньйон. Потому что НИКТО НЕ ХОЧЕТ ПИСАТЬ ПИКСЕЛЬ-ПЕРФЕКТ ИНТЕРФЕЙСЫ на маленькие экраны — это заеб и мы сами охуеваем от того, как это сложно. Но мы научились это делать довольно неплохо и считаем что можем внести вклад в человечество и сделать универсальный графически интерфейс, который все смогут переиспользовать в своих проектах. Мы решили, что раз уж мы все равно это делаем для Flipper One, мы можем дальше сделать инструмент, которые смогут использовать все.
В этом посте:
- FlipCTL — это наш проект феймворка графического интерфейса для встраиваемых систем, который можно использовать на любых Linux устройствах.
- Почему все существующие интерфейсы для встраиваемых систем говно.
- Помогите придумать правильную архитектуру FlipCTL.
GUI - проблема всех сайбердеков

Кибердеки выглядят круто, но пользователься этим тупо невозможно. Главная проблема всех сайбердеков — злоебучий интерфейс. Обычно берут тупо десктопный KDE/GNOME или даже Windows, и пытаются делать вид, будто этим можно пользоваться. Нет нельзя. Это хуета. Потому что невозможно попасть пальцем по микроскопической кнопке на экране, а подключать мышку в этом случае тоже неудобно.
Десктопный интерфейс против специального
Обычно в кибердеках не разрабатывают одновременно графический интерфейс вместе с элементами управления. Зачастую просто примено располагают какие-то кнопки и запускают десктопный интерфейс, который был разработан для управления мышкой+клавиатурой. И это главная проблема.
Какой из интерфейсов вам кажется удобнее на маленьком экране?
Только крупные вендоры могут себе позволить разрабатывать графический интерфейс и железо одновременно: игровые консоли, телефоны, телевизоры. Это требует специализированной команды и долгой неблагодарной работы. Нужно разрабатывать UX-систему, пройти множество итераций. Обычно DIY проекты энтузиастов не могут себе такое позволить. И поэтому мы решили попробовать это изменить, чтобы любой проект мог иметь классный графический интерфейс без больших усилий.
Why we choose grayscale LCD display over fancy color screen?
Because its better во всем для системных GUI, где не нужны цвета. Просто посмотрите на сравнительную фотографию и вопросы отпадут сами собой.


Главные плюсы grayscale LCD screen:
- Low power consumption — наш дисплей без подсветки потребляет Х против Y цветного экрана сравнительного размера. При этом наш экран можно использовать без подсветки от отраженного света, а цветной так нельзя, там все диоды должны хуярить ярко иначе вы ничего не увидите.
- Perfectly visible on direct sunlight — чем ярче солнце, тем лучше выглядит наш grayscale LCD экран. И наоборот для цветных экранов, которые сложно использоваться на солнце. Нам важно, чтобы наш интерфейс можно было разглядеть в настоящих походных условиях, а не только на столе для красивых фоточек для соцсетей.
- Less system load — чтобы получить реальное высокое качество изображения на цветном экране, нужно ставить ОЧЕНЬ дорогой экран высокого разрешения, который будет требовать серьезных вычислительных ресурсов и нагружать систему только для вывода изображения и все равно будет проигрывать по контрастности нашему grayscale.В то время как на грейскейл экране можно получить высокое качество картинки даже на маломощных встраиваемых системах.
Наш кастомный LCD экран

Для Флиппер Ван мы специально разработали свой собственный экран с кастомным разрешением. Эта технология больше не развивается, все промышленные экраны остановились на разрешении вроде 128х64 и производители больше не стремятся инвестировать в эту технологию. Поэтому мы потратили много усилий, чтобы разработать именно такой экран как нам надо. И это вам не хуй собачий.
Что такое FlipCTL
FlipCTL — это наша попытка заебенить универсальный графический интерфейс (GUI) + аппартный ввод (кнопки, тачпады), который можно использовать для любых проектов. Он будет работать на всех встриваемых Linux-системах и максимально легко адаптироваться под конкретный проект. Чтобы не приходилось каждый раз с нуля изобретать интерфейс, а можно было взять нашу хуйню и простым быстро нахуярить гуйцы для своей поделки.

Суть FlipCTL такова:
- FlipCTL — это прослойка которая работает как сервис и преобразует консольные Linux приложения в графический интерфейс
- Управляет выводом изображения и перенаправляет пользовательский ввод (кнопки, тачпады)
- Умеет управлять системными настройками и сервисами Linux
- Оборачивает существующие консольные утилиты через врапперы CLI программа в графический интерфейс
Главная идея — это максимальная простота деплоя самого FlipCTL на любую систему + простота разработки графических интерфейсов для ваших приложений.
Архитектура FlipCTL
FlipCTL — это модульная система состоящая из нескольких блоков: бекенда и фронтенда. При этом в качестве устройства ввода/вывода могут выступать разные устройства кроме Flipper One.

- Бекенд — управляет самой операционной системой, умеет дергать ручки systemd, управлять сервисами операционной системы, конфигурировать сеть через NetworkManager или systemd-networkd. А так же оборачивать существующие консольные программы через врапперы, например утилиты nmap, ping, traceroute и формировать API для передачи на фронтенд.
- UI Фронтент — прямо сейчас мы используем HTML + JS для построения интерфейса. При всем оверхеде, это позволяет очень быстро и компактно проектировать интерфейс и не требует специальных навыков, как в случае с библиотеками для embedded.
- Renderer — он же браузер. В данный момент, во Flipper One, мы используем headless webkit запущенный напрямую внутри DRM (Direct Rendering Manager) без Xorg или Wayland. При этом мы хотим иметь несколько опций рендерера: например TUI, чтобы запускать FlipCTL из консоли.
Почему HTML + webkit?
Можно подумать, что использовать веб на таком маленьком экранчике это оверкил, и правильнее выбрать какую-то графическую специализированную библиотеку для embedded систем. И действительно, веб-движок требует существенное количество ресурсов, по сравнению со специализированными решениями. Но его плюсы неоспоримы:
- Очень быстрая разработка сложных интерфейсов
- Сразу готовый веб-интерфейс, десктопное и мобильное приложение.
Мы считаем, что ничего не может сравниться с простотой и скоростью разработки под веб, и это позволит сообществу создавать много крутых приложений, а не страдать с изучением сложных графических API. Так же существующие инструменты экономии ресурсов в webkit, вроде гибернации, позволяют сильно оптимизировать потребление ресурсов, и мы считаем, что лучше сосредочиться на оптимизации в угоду простоте разработке. Приглашаем вас высказать свое мнение тут >>
FlipCTL on Flipper One
В первую очередь мы разрабатываем FlipCTL для Flipper One. Это основная платформа на которой мы тестируем интерфейсы. При этом мы стараемся учитывать, другие будущие платформы, и приглашаем вас поучаствовать в тестировании интерфейса на других платформах.
FlipCTL demo interface on Flipper One
Дизайн гайды юзер интерфейса для Flipper One мы описываем в документации docs.flipper.net/one/user-interface/about.
FlipCTL Control Board
Чтобы использовать FlipCTL на других платформах, мы решили сделать отдельное устройство — FlipCTL Control Panel. По пусти это такой же экранчик и кнопки как на Flipper One, которые можно отдельно подключить к любому Linux компьютеру, например к Raspberry Pi, серверу или роутеру и получить тот же интерфейс выполнив одну команду apt install flipctl

В данный момент мы ищем оптимальную комбинацию механического дизайна, органов управления и интерефейсов подключения, чтобы панелька получилась максимально универсальной. На данный момент мы планируем 2 интерфейса подключения FlipCTL Control Panel:
- GPIO гребенка — совместимая с Raspberry Pi, чтобы напрямую подключать панель к одноплатным компьютерам без дополнительных кабелей и переходников
- USB 2.0 — для подключения ко всем остальным платформам: к серверам, компьютерам, роутерам и т.д.
[Video] FlipCTL Control Panel prototypes, Raspberry Pi GPIO mount demo
PC/Server mount
Через обычный USB 2.0 можно подключить FlipCTL Control Panel к компьютеру, серверу или роутеру. Так можно добавить графический интерфейс к любому хосту:

Мы собираемся полностью открыть механический дизайн этой панельки, так что любой сможет изготовить под нее крепления: тупо вкрутив на саморезы или распечатав крепления на 3D принтере.
Desktop mount
Есть вариант монтажа просто на стол, например при подключении к WiFi роутеру или десктопному компьютеру. Устройство закрепляется в специальной угловой оснастке.

Зачем делать еще одну HMI ведь их уже много?
Это правда, существует целая куча разных систем для построения HMI: пару штук со ссылками. Однако все они черезчур интерпрайзные и нужно очень заебаться прежде оно заработает на конкретной системе. Вы можете назвать существующую HMI систему, которую можно развернуть на голой Raspberry Pi за одну минуту?
Мы же хотим добиться, чтобы деплой базовой функциональности выглядел так:
- Подключить FlipCTL Control Board к компьютеру — это можно сделать через USB к любому компьюетру, или по SPI в одноплатники совместимые с гребенкой GPIO разбери пай.
- Выполнить одну команду
apt install flipctl— дальше программа сама обнаружит модуль экрана и сразу будет работать как сервис. Если дефолтные настройки устраивают, можно так и оставить. - Готово — вы получаете базовые функции управления системой, которые сразу доступны через экранчик с кнопками: посмотреть IP адрес, сколько занято места на диске, запущенные сервисы, загрузку системы и т.д. Дальше вы можете настраивать flipctl под свое конкретное приложение, ограничить функции которые можно выполнять с экрана или вообще заблокировать кнопки и использовать экранчик только для вывода.
Все это должно занимать не больше 1 минуты: от подключения модуля до получения полнофункциональной системы. Какая существующая система может так же?
Выводы
- Мы ищем архитектора всего проекта FlipCTL. В качестве тестового задания присылайте свой вариант архитектуры FlipCTL пулл-реквестом в этот репозиторий github.com/flipperdevices/flipctl (сделать README)
- Пожелания по хардварным интерфейсам FLipCTL Control Panel присылайте сюда (Сделать issue в репозитории hardware FlipCTL Control Panel hardware disign)