a3b6bc66c9f5a2ff277574f44396d4861c26e0f7
- backend/ambicapture.py: cattura Wayland via ScreenCast portal + PipeWire - backend/ambilightd.py: demone, 47 zone sul bordo superiore, luminosita/contrasto/ saturazione/banda, invio Adalight su seriale, servizio D-Bus org.enne2.Ambilight - backend/ambilight-ctl: CLI JSON per il plasmoide - backend/ambilight.service: avvio automatico (systemd --user) - package/org.enne2.ambilight: applet vassoio con popup e slider - install.sh / uninstall.sh senza root
ambilight-plasmoid
Ambilight per KDE Plasma 6: cattura il bordo superiore dello schermo su Wayland (portal ScreenCast + PipeWire), calcola il colore medio di 47 zone e pilota una striscia WS2812B collegata a un ESP8266 (Wemos D1 mini) con firmware Adalight via seriale. Il controllo sta in un plasmoide nel vassoio di sistema, con popup per luminosità, contrasto, saturazione e banda campionata.
schermo ──portal──▶ ambilightd ──Adalight/seriale──▶ ESP8266 ──▶ striscia
▲
│ D-Bus org.enne2.Ambilight
│
ambilight-ctl ◀── plasmoide (Plasma 6, QML)
Componenti
| File | Ruolo |
|---|---|
backend/ambicapture.py |
negoziazione ScreenCast portal + pipeline GStreamer (pipewiresrc) |
backend/ambilightd.py |
demone: cattura, calcolo zone, luminosità/contrasto/saturazione, invio Adalight, servizio D-Bus |
backend/ambilight-ctl |
CLI che parla col demone e stampa JSON (usata dal plasmoide) |
backend/ambilight.service |
unit systemd --user (avvio automatico al login) |
package/org.enne2.ambilight/ |
plasmoide Plasma 6 (icona nel vassoio + popup con slider) |
install.sh / uninstall.sh |
installazione e rimozione, senza root |
Hardware
- ESP8266 Wemos D1 mini (clone), firmware Adalight-FastLED con
PIN_DATA 5(= D1/GPIO5),Num_Leds= dimensione buffer (256): il numero reale di LED lo decide il software che invia i frame. - Striscia WS2812B 47 LED sul solo bordo superiore.
- Cablaggio:
D1 → 470 Ω → DIN, alimentatore 5 V separato (~60 mA/LED), massa comune, 1000 µF sull'alimentazione; level shifter 74AHCT125 se il filo dati è lungo.
Installazione
./install.sh # backend + servizio utente + plasmoide
Al primo avvio il desktop chiede il permesso di condividere lo schermo: va concesso
una volta (viene memorizzato in ~/.cache/ambilight/restore_token).
Il plasmoide appare nel vassoio come Ambilight (icona TV); clic per il popup.
Uso da terminale
ambilight-ctl state # JSON con tutto lo stato
ambilight-ctl start | stop | toggle
ambilight-ctl set brightness 0.8 # brightness|contrast|saturation|band|reverse|leds
ambilight-ctl get fps
systemctl --user status ambilight.service
Configurazione
~/.config/ambilight/config.json (scritto dal demone a ogni modifica):
| chiave | range | default | note |
|---|---|---|---|
brightness |
0.05 – 2.0 | 1.0 | moltiplicatore |
contrast |
0.5 – 2.0 | 1.0 | pivot sul grigio 128 |
saturation |
0.0 – 2.0 | 1.0 | 0 = bianco e nero |
band |
0.02 – 0.5 | 0.12 | frazione di altezza campionata |
reverse |
bool | true | LED 0 sul lato destro (verificato a schermo) |
leds |
1 – 256 | 47 | LED della striscia |
port, baud |
– | /dev/ttyUSB0, 115200 |
seriale |
side |
top/bottom | top | bordo campionato |
auto_start |
bool | true | streaming attivo all'avvio del demone |
Prestazioni misurate
- 47 LED, Adalight a 115200: ~78 fps (limite teorico della seriale per 147 byte/frame).
- Cattura: portal + PipeWire, pipeline ridotta a
47×4 × 72px RGB → costo CPU trascurabile.
Note
- Il firmware Adalight manda
Ada\nuna volta al secondo quando non riceve frame: è l'heartbeat del protocollo, non un errore. - Il demone tiene la seriale in esclusiva: Prismatik (o altri programmi Adalight) vanno chiusi.
ModemManagersu Fedora può contendere/dev/ttyUSB0: se la porta risulta occupata serve una regola udev conID_MM_DEVICE_IGNORE.
Licenza
GPL-3.0-or-later (come i componenti KDE con cui interagisce).
Description
Ambilight per KDE Plasma 6: demone Adalight (ESP8266/WS2812B) + applet nel vassoio con slider luminosita, contrasto, saturazione
113 KiB
Languages
Python
62.7%
QML
22.1%
Shell
15.2%