2026-08-15 15:19:42 +02:00
2026-08-15 15:17:13 +02:00
2026-08-15 15:19:42 +02:00
2026-08-15 15:17:13 +02:00

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 st7789 display 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"}

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

Author

Juan Raul Rodriguez Gil — Built with passion for Linux & Hardware
jrodriiguezg.link | GitHub | Instagram


© 2026 Juan Raul Rodriguez Gil

S
Description
No description provided
Readme
35 KiB
Languages
HTML 57.5%
CSS 42.5%