# PRRPC — Pico Real Rich Presence > Physical status monitor for Linux environments. Displays contextual active application information on a secondary LCD screen powered by RP2040. **Live:** [prrpc.jrodriiguezg.link](https://prrpc.jrodriiguezg.link) **GitHub:** [jrodriiguezg/PRRPC](https://github.com/jrodriiguezg/PRRPC) --- ## Overview PRRPC is an open-source hardware/software project that bridges your Linux desktop with a physical secondary display. A Python service running on the host PC detects the currently active application via GNOME's accessibility API and sends that information over USB serial to an RP2040 microcontroller, which renders a graphical icon on a 1.69" IPS LCD screen. It operates in two distinct modes: | Version | Mode | Description | |---|---|---| | V1 | Auto Monitoring | Automatic active-app detection and display | | V2 | MacroDeck | Interactive mode with browser-based emoji control | ## Architecture ``` Host PC (Linux / GNOME / Wayland) │ │ pyatspi focus events ▼ Python Service (monitor_pc.py) │ │ Serial (USB-C) ▼ RP2040-Zero (MicroPython) │ │ SPI ▼ 1.69" IPS LCD (ST7789, 240×280) ``` **Key property:** The serial communication model means **zero CPU polling** on the host — events are pushed only when the active window changes. ## Features ### V1 — Auto Monitoring - GNOME window focus detection via `pyatspi` - Event-driven serial communication (no polling, near-zero CPU impact) - Real-time application switching reflected on the LCD - Session time tracking per application ### V2 — MacroDeck - Flask web server on `localhost:5000` - Browser-accessible emoji selector UI - Manual display override from any device on the LAN - Multi-threaded architecture - Optimized 100×100px RGB565 image assets ## Hardware Specifications | Component | Specification | |---|---| | Microcontroller | RP2040-Zero (or compatible Raspberry Pi Pico) | | Firmware | MicroPython | | Display | 1.69" IPS LCD, ST7789 controller, 240×280px | | Interface | SPI (display) + USB-C (data + power) | | Host OS | Linux with GNOME desktop (Wayland/X11) | | Host Language | Python + pyatspi | ## Software Requirements - **Host:** Python 3, `pyatspi`, `pyserial` - **V2 additionally:** `flask` - **Microcontroller:** MicroPython with `st7789` display driver ## App Mapping (V1) ```python # Example: Adding a new app in monitor_pc.py APPS_MAPPING = { "Code": "VSCODE", "Firefox": "FIREFOX", # Map window focus keyword to an internal ID "Obsidian": "NOTAS" } ``` ## Web Control API (V2) ```python # V2: Web control API snippet @app.route('/set_emoji/') def set_emoji(emoji_id): # Sends manual Emoji command via serial send_to_serial(emoji_id.upper()) return {"status": "success"} ``` ## Gallery The device has been tested and demonstrated with the following applications on Fedora Linux: - **VS Code** — Development environment detection - **Firefox** — Web browsing session tracking - **Terminal** — System shell activity - **YouTube Music** — Media playback tracking ## Tested On - **OS:** Fedora Linux (GNOME, Wayland) - **Hardware:** RP2040-Zero + 1.69" ST7789 LCD ## Support ☕ [Support on Ko-fi](https://ko-fi.com/jrodriiguezg) ## Author **Juan Raul Rodriguez Gil** — Built with passion for Linux & Hardware [jrodriiguezg.link](https://jrodriiguezg.link) | [GitHub](https://github.com/jrodriiguezg) | [Instagram](https://www.instagram.com/jrodriiguezg.link/?hl=es) --- © 2026 Juan Raul Rodriguez Gil