# enne2-caffeine Widget per il pannello di **KDE Plasma 6** che impedisce lo spegnimento dello schermo, il blocco schermo e la sospensione automatica: l'equivalente Plasma di **Caffeine** di GNOME. ![tazza piena = attivo, tazza vuota = inattivo](contents/icons/caffeine-on.svg) ## Funzioni - **Clic sinistro sull'icona** → attiva/disattiva immediatamente (come Caffeine su GNOME). Tazza piena = inibizione attiva, tazza vuota = inibizione assente. - **Clic centrale** → popup con le opzioni rapide. - **Due modalità**: - *Schermo + sospensione* (default, come Caffeine): blocca spegnimento/dim dello schermo, blocco schermo e sospensione automatica; - *Solo sospensione* (come Amphetamine): il computer non si sospende ma lo schermo può spegnersi normalmente. - **Timer di disattivazione automatica** (5/15/30/60/120/240 minuti, oppure mai), con countdown nel tooltip e nell'icona di pannello; notifica opzionale alla scadenza. - Il widget è "stateless": dopo un riavvio Caffeine è spento, come ci si aspetta. ## Come funziona Il backend sono due unità **systemd utente** che lanciano `systemd-inhibit` (logind) e restano vive finché l'inibizione è attiva: | Modalità | Unità | systemd-inhibit | |---|---|---| | schermo + sospensione | `enne2-caffeine-screen.service` | `--what=sleep:idle` | | solo sospensione | `enne2-caffeine-sleep.service` | `--what=sleep` | PowerDevil/PolicyAgent traduce le inibizioni logind in policy interne: - `sleep` → `InterruptSession` (niente sospensione automatica); - `idle` → `ChangeScreenSettings` (niente dim/spegnimento dello schermo, niente blocco schermo). Perché non si usa direttamente `org.kde.Solid.PowerManagement.PolicyAgent.AddInhibition`? Perché il cookie di quell'API è legato al chiamante D-Bus: una chiamata da un processo effimero verrebbe rilasciata subito (e l'inibizione ha 5 s di delay prima di essere applicata). Usando unità systemd l'inibizione sopravvive anche al riavvio di plasmashell e si rilascia da sola alla fine della sessione. ## Installazione ```bash git clone ssh://git@git.enne2.net:222/enne2/kde-caffeine.git cd kde-caffeine ./install.sh ``` Poi: tasto destro sul pannello → *Aggiungi widget* → **Caffeine** (categoria *Utilità*). Per averlo vicino all'orologio trascinalo a sinistra dell'orologio. ## CLI e scorciatoia da tastiera ```bash bin/enne2-caffeine status # state=on|off, mode=screen|sleep, deadline= bin/enne2-caffeine on 30 # attiva per 30 minuti (modalità schermo + sospensione) bin/enne2-caffeine toggle # inverti bin/enne2-caffeine sleep on 60 # solo sospensione, 60 minuti bin/enne2-caffeine off ``` Per una scorciatoia globale: *Impostazioni di sistema → Tastiera → Scorciatoie → Aggiungi → Comando o script*, comando `enne2-caffeine toggle` (o il percorso completo dello script). ## Verifica ```bash systemd-inhibit --list | grep enne2-caffeine busctl --user get-property org.kde.Solid.PowerManagement \ /org/kde/Solid/PowerManagement/PolicyAgent \ org.kde.Solid.PowerManagement.PolicyAgent ActiveInhibitions | grep -i caffeine ``` La seconda mostra che PowerDevil ha recepito l'inibizione logind (`what=idle:sleep`). ## Configurazione del widget Tasto destro sull'icona → *Configura Caffeine…*: - **Impedisci anche lo spegnimento e il blocco dello schermo** (default: attivo); - **Disattiva automaticamente dopo N minuti** (0 = mai); - **Notifica quando scade il timer**. ## Licenza MIT — vedi [LICENSE](LICENSE).