FlipCTL
flipper's universal control interface flipctl logic scheme flipctl is a lightweight gui framework for embedded and headless linux systems , designed as a modern replacement for traditional hmi (human machine interface) solutions originally built for flipper one, it runs on any linux system, from servers and routers to single board computers, with no desktop environment required the core idea instead of running a desktop gui (gnome, kde) on a tiny screen, flipctl provides a pixel rendered, navigation friendly interface β similar in spirit to nmtui or midnight commander, but graphically richer and hardware aware the problem flipctl solves existing gui solutions for embedded computers, also known as hmi (human machine interface), have several pain points need a graphical desktop (xorg or wayland) to run β don't work on headless servers, routers, or embedded devices desktop uis are hard to use with a d pad or joystick cli tools have no unified wrapper β you need a keyboard and a terminal to run interactive commands like ping or nmap existing control panels are complex to install and configure the flipctl concept vision on any linux system, with or without a display, flipctl should be immediately useful plug in the flipctl control panel via usb, install and run the service, and you instantly have a working interface β no xorg, no desktop, no configuration flipctl is installed with a single command for debian based systems apt install flipctl β and everything works once installed, flipctl provides a default dashboard with system data and actions cpu load & uptime disk usage network configuration system reboot / shutdown β supported frontends flipctl can work with different frontends for input and output frontend description flipper one the primary target device is an arm linux computer with a built in 256Γ144 px lcd and physical controls includes boot menu functionality as part of the flipctl package flipctl control panel a compact standalone module with a screen and buttons, connecting via usb or spi β designed to add a physical hmi to any embedded system, server, single board computer, or router tui (text ui) a pseudo graphical interface rendered in any linux terminal β usable locally or over ssh, similar to nmtui or midnight commander web ui a browser based interface β renders the same layout and navigation accessible from any device on the network desktop app a native desktop application for linux, useful for development, testing, or general use on a workstation physical interface flipper one controls screen diagonal 2 39 inch resolution 256 Γ 144 px depth 6 bit grayscale (64 shades) β soft keys flipper one has five app defined buttons button default role escape exit app / cancel / go back view help, tooltips, toggle view mode power opens power menu overlay (sleep, backlight, reboot); hold = hardware shutdown regardless of system state edit edit fields, switch view types run confirm / ok / next step / start the power button is intercepted at the mcu level β it works even if the os is frozen, similar to a hardware power button on a standard pc β d pad + back button the d pad is used for standard directional navigation up / down / left / right / center (ok) back button returns to the previous screen; functionally mirrors escape in most contexts β app switcher button the app switcher button shows all running applications and allows switching between them β similar to a double tap home button on older phones β touchpad (optional) only exist on flipper one, completely optional and can be used to speed up scrolling and navigation it duplicates the functions of the d pad scrolling through lists navigating the on screen keyboard quick directional input (left / right / up / down) β ptt button (optional) a ptt (push to talk) button is a programmable button originally designed for walkie talkie use (press and hold to transmit audio) on flipper one it may serve secondary ui functions like screen lock flipctl control panel flipctl control panel a compact device featuring the same display as the flipper one and the same set of controls, except for the touchpad and the ptt (push to talk) button flipctl control panel can be placed on a desk mounted directly to a single board computer, such as a raspberry pi mounted on a server or server rack flipctl control panel connects to any linux based system via usb or spi (or i2c?), providing a physical humanβmachine interface (hmi) for headless servers, routers, and embedded devices, without requiring a desktop environment the hardware design for this project hasn't been finalized yet β you can join the open discussion flipctl control panel hardware design https //github com/flipperdevices/flipperone hardware/issues/133 flipctl architecture flipctl core components backend is responsible for managing the operating system itself it can interact with systemd, control os services, configure networking through networkmanager or systemd networkd, and wrap existing command line utilities such as nmap, ping, and traceroute the backend exposes these capabilities through apis that are consumed by the frontend frontend ui is currently built using html and javascript despite the associated overhead, this approach enables rapid ui development and compact implementation, while avoiding the need for specialized expertise required by many embedded ui frameworks renderer is a web browser on flipper one, we currently use a headless webkit instance running directly on top of drm (direct rendering manager), without xorg or wayland we also want to support multiple renderer options β for example, a tui (text user interface) for use directly from the console frontend description flipper one the primary target device is an arm linux computer with a built in 256Γ144 px lcd and physical controls includes boot menu functionality as part of the flipctl package flipctl control panel a compact standalone module with a screen and buttons, connecting via usb, spi, or uart β designed to add a physical hmi to any embedded system, server, single board computer, or router tui (terminal ui) a pseudo graphical interface rendered in any linux terminal β usable locally or over ssh, similar to nmtui or midnight commander may be built using react + ink for component based terminal rendering web ui a browser based interface served by the flipctl daemon β renders the same layout and navigation accessible from any device on the network can share the same react codebase as the desktop app desktop app a native desktop application for linux, useful for development, testing, or general use on a full workstation can share the same react codebase as the web ui β rendering approach the 256Γ144 px screen requires pixel level rendering , which standard tui libraries (ncurses, etc ) cannot provide the proposed solution is an html/css rendering engine running as a background daemon β a lightweight browser based renderer that draws menus, popups, and ui components the key principle data and ui logic are separated from the renderer the same data can be displayed differently depending on the frontend pixel rendered on the lcd character rendered in a terminal (react + ink) html in a browser (react) β backend + plugin system flipctl runs as a system daemon with a plugin architecture the core daemon handles input, routing, rendering communication, and the plugin api plugins are wrappers around cli tools or services, written in any language developers can write wrappers in whatever language they prefer python β e g , a wrapper for nmap or nginx stats bash β quick scripts for simple tools rust, node js, go β for performance critical or complex plugins example a ping plugin presents a menu to enter a host/ip, runs the underlying ping command, and displays live output β all navigable with the d pad example plugins ping Β· nmap Β· traceroute Β· nginx status Β· iptables Β· disk manager how to contribute this page outlines the flipctl vision and its architecture at a high level we believe there are many good ways to bring this architecture to life, and we invite the community to share ideas and propose implementation approaches our goal is to collaboratively discover the best solutions for flipctl we have created a dedicated flipctl repository http //github com/flipperdevices/flipctl where contributors can submit pull requests, discuss design proposals, and collaborate on implementation ideas a pull request should include a description of your proposed flipctl architecture implementation, including the components you would use and how they would interact with each other a description of your vision for the plugin system and the wrappers for standard command line utilities like ping or nmap a minimal working flipctl prototype capable of driving multiple frontends one frontend should be a web ui, while another should be a tui
Have a question?
Our support team and an awesome community will get you an answer in a flash. Please leave your questions in English.
To ask a question or participate in discussions, you'll need to authenticate first.