- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| core | ||
| lcd | ||
| screens | ||
| services | ||
| .gitignore | ||
| main.py | ||
| pyproject.toml | ||
| README.md | ||
| setup_wizard.py | ||
| smoke_test.py | ||
laura / girlcdfailure
A multi-screen dashboard for the Logitech G15:
Spotify now-playing, a clock, a system monitor, a Discord voice-activity screen and an aggregated notifications feed (Twitch going live, Signal / Discord / Steam / Telegram / Tumblr interactions / Mastodon).
Screens rotate automatically (can be disabled); the G15's 4 LCD soft buttons (G1-G4) control it:
| Button | Action |
|---|---|
| G1 | Previous screen (on Alerts: page to older alerts; leaves at the oldest page) |
| G2 | Next screen (on Alerts: page back to newer alerts; leaves at the newest page) |
| G3 | Toggle auto-rotate on/off |
| G4 | Screen-specific action (Spotify: play/pause; Alerts: mark read + jump to newest) |
Install
- Install Python 3.10+ and Logitech Gaming Software (G HUB is not supported because it doesn't even support this Keyboard!).
uv syncuv run main.py --setupand answer the questions (everything optional). It writesconfig.yamlfor you.uv run main.py
First-run tip: if you enabled QR logins (Discord, Steam) plus other console logins (Telegram code, Steam Guard), do them one at a time -- temporarily disable the others. QR codes expire after ~2 minutes and the terminal gets confusing with several printed at once. After the first successful login each token/session is cached, so later starts are quiet.
Troubleshooting
- "Could not load LogitechLcd.dll": search your machine for that
filename (it's inside your LGS install folder, usually under
...\Logitech Gaming Software\SDK\LCD\x64or\x86-- pick the one matching your Python: 64-bit Python needs thex64build), then setapp.lgs_dll_pathinconfig.yamlto the exact path you found. The olderLogitechLcdEnginesWrapper.dllworks too if you have it. LogiLcdInit failed: make sure LGS is actually running, the G15 shows up in it, and no other LCD applet currently has focus.- Screen looks garbled/inverted: try flipping
app.invertinconfig.yaml. - Fonts look huge/tiny/off: the app tries a few common Windows fonts
(Consolas, Tahoma, Arial) at small point sizes and falls back to PIL's
built-in bitmap font if none are found; exact layout may need a pixel or
two of tweaking in
screens/*.pydepending on which font actually loads on your system.
Project layout
main.py entry point / main loop (--setup runs the wizard)
setup_wizard.py first-time setup: writes config.yaml interactively
core/
renderer.py drawing helpers (fonts, marquee text, bars)
screen_manager.py screen rotation + button handling + popover overlay
alerts.py shared notification feed
popover.py top-right push popover (alerts + voice activity)
qr_display.py QR codes as terminal ASCII + PNG files
lcd/
lgs_backend.py real G15 hardware via Logitech's LCD SDK
preview_backend.py on-screen test window, no hardware needed
screens/ one file per screen (rendering only)
services/
discord_qr.py Discord QR login (remote-auth gateway)
steam_qr.py Steam QR login (mobile approval + CM token logon)
... one file per integration (polling/background threads)
Add a new screen by creating a screens/your_screen.py (subclass
screens.base.Screen) and adding it to the screens = [...] list in
main.py.