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
GitHub: 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
st7789display driver
App Mapping (V1)
# 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)
# V2: Web control API snippet
@app.route('/set_emoji/<emoji_id>')
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
Author
Juan Raul Rodriguez Gil — Built with passion for Linux & Hardware
jrodriiguezg.link | GitHub | Instagram
© 2026 Juan Raul Rodriguez Gil