From d4902b0b7276bc1324cee3ee90fbbd86cfbeb081 Mon Sep 17 00:00:00 2001 From: enne2 Date: Sun, 25 Oct 2026 20:42:52 +0100 Subject: [PATCH] Plasmoide CPU Frequency Control: governor, limiti, EPP, boost e profili per task Widget KDE Plasma 6 (org.enne2.cpufreq) per pilotare il profilo energetico della CPU: governor, limiti min/max, energy_performance_preference, boost/turbo, quattro profili pronti (Silenzioso, Risparmio, Bilanciato, Performance) e task con profilo dedicato che ripristina lo stato precedente alla fine del comando. Privilegi separati: il widget resta non privilegiato e l'unica operazione root passa da un helper a interfaccia ristretta in /usr/local/libexec/enne2-cpufreq/ (comandi a elenco chiuso, argomenti validati su sysfs, rilettura di verifica), invocato via pkexec con l'azione polkit dedicata org.enne2.cpufreq.set. La regola in /etc/polkit-1/rules.d/ concede il consenso senza prompt a utenti locali in sessione attiva nel gruppo wheel; senza la regola la policy chiede la password. Dettagli verificati su frigate (Plasma 6.7.5, kernel 7.2, amd-pstate-epp): - con boost disattivato cpuinfo_max_freq scende alla frequenza nominale, quindi il tetto hardware si legge da amd_pstate_max_freq e i profili applicano il boost prima dei limiti; - scrittura dei limiti in ordine sicuro (mai min > max intermedio); - baseline e contatore di riferimento per i task paralleli; - syncControls protetto da uiReady e try/catch: un ReferenceError su un id della rappresentazione non deve interrompere l'aggiornamento dello stato; - implicitWidth/Height costanti, altrimenti il containment riduce il widget a 68x68. Include install.sh/uninstall.sh (widget, backend, dry-run), README con modello di sicurezza e diagnostica, screenshot docs/widget.png. Licenza MIT. --- .gitignore | 12 + LICENSE | 21 + README.md | 163 ++++ bin/cpufreq-helper | 410 ++++++++++ contents/scripts/cpufreq-state.sh | 175 ++++ contents/scripts/enne2-cpufreq-task | 274 +++++++ contents/scripts/profiles.sh | 145 ++++ contents/ui/ChoicePill.qml | 55 ++ contents/ui/main.qml | 1139 +++++++++++++++++++++++++++ docs/widget.png | Bin 0 -> 230505 bytes install.sh | 147 ++++ metadata.json | 19 + polkit/50-org.enne2.cpufreq.rules | 22 + polkit/org.enne2.cpufreq.set.policy | 28 + uninstall.sh | 64 ++ 15 files changed, 2674 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100755 bin/cpufreq-helper create mode 100755 contents/scripts/cpufreq-state.sh create mode 100755 contents/scripts/enne2-cpufreq-task create mode 100755 contents/scripts/profiles.sh create mode 100644 contents/ui/ChoicePill.qml create mode 100644 contents/ui/main.qml create mode 100644 docs/widget.png create mode 100755 install.sh create mode 100644 metadata.json create mode 100644 polkit/50-org.enne2.cpufreq.rules create mode 100644 polkit/org.enne2.cpufreq.set.policy create mode 100755 uninstall.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0346a7c --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# Artefatti Plasma / Qt +*.plasmoid +*.qmlc +*.jsc +build/ +package/ + +# Editor e sistema +*~ +*.swp +.DS_Store +*.backup-* diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..35c73b3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 enne2 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c32fe1 --- /dev/null +++ b/README.md @@ -0,0 +1,163 @@ +# CPU Frequency Control (org.enne2.cpufreq) + +Plasmoide KDE Plasma 6 per pilotare il profilo energetico della CPU: governor, +limiti di frequenza (min/max), `energy_performance_preference` (EPP), boost/turbo, +quattro profili pronti e **task con profilo dedicato** che ripristina lo stato +precedente quando il comando finisce. + +Verificato su **frigate** (Fedora 44, Plasma 6.7.5 Wayland, kernel 7.2, AMD +Ryzen 7 H 255, driver `amd-pstate-epp` in modalità `active`, 16 policy). + +![widget](docs/widget.png) + +## Cosa fa + +| Area | Azione | +|---|---| +| Profili | **Silenzioso** (EPP power, boost off, tetto 35%), **Risparmio** (balance_power, boost off, tetto 60%), **Bilanciato** (balance_performance, boost on, nessun tetto), **Performance** (governor performance, EPP performance, boost on) | +| Governor | pillole con i valori realmente disponibili in `scaling_available_governors` | +| EPP | pillole con i valori di `energy_performance_available_preferences` | +| Limiti | due slider min/max in kHz con validazione e rilettura; il valore applicato è arrotondato a 10 MHz | +| Boost | pillole `on`/`off` (per-policy su kernel recenti, altrimenti globale, altrimenti `intel_pstate/no_turbo`) | +| Task | elenco configurabile: ogni task applica un profilo, esegue il comando **come utente** e ripristina la baseline all'uscita | +| Footer | messaggio dell'ultima azione e pulsante **Reset** (default hardware: boost on, nessun tetto) | + +La vista compatta (pannello) mostra frequenza corrente e un badge `no boost`. +La frequenza è la massima fra le policy (core più attivo), con la media sotto. + +## Architettura e modello di sicurezza + +``` +org.enne2.cpufreq (QML, non privilegiato) + ├─ contents/scripts/cpufreq-state.sh lettura sysfs, /proc, hwmon (nessun privilegio) + ├─ contents/scripts/enne2-cpufreq-task launcher task (utente) + └─ pkexec /usr/local/libexec/enne2-cpufreq/cpufreq-helper (root) + ├─ comandi a elenco chiuso, argomenti validati contro sysfs + ├─ ogni scrittura riletta per verifica + └─ /var/lib/enne2-cpufreq/{baseline,refcount} (root:root 0755/0644) + +polkit + ├─ /usr/share/polkit-1/actions/org.enne2.cpufreq.set.policy azione dedicata + └─ /etc/polkit-1/rules.d/50-org.enne2.cpufreq.rules allow senza prompt +``` + +- Il widget non è mai root: l'unica operazione privilegiata è l'helper, con + sottocomandi fissi (`set-governor`, `set-epp`, `set-limits`, `set-boost`, + `apply`, `reset`, `task-begin`, `task-end`, `save-state`, `restore-state`). +- L'annotazione `org.freedesktop.policykit.exec.path` lega l'azione polkit a quel + solo binario: nessun altro programma eredita il permesso. +- La regola in `/etc/polkit-1/rules.d/` concede `polkit.Result.YES` solo a utenti + **locali**, con sessione **attiva**, nel gruppo **wheel**. Senza quel file la + `.policy` chiede la password a ogni modifica (`auth_admin_keep`). +- I comandi dei task girano come utente (`setsid sh -c`), mai come root. + +## Installazione + +```sh +cd ~/Dev/kde-cpufreq-dashboard +./install.sh # widget (utente) + backend (sudo) +./install.sh --widget # solo il plasmoide +./install.sh --backend # solo helper + polkit (root) +./install.sh --no-polkit-rule # backend senza la regola "nessun prompt" +./install.sh --dry-run # mostra le operazioni +``` + +Il widget si aggiunge da *Aggiungi widget → «CPU Frequency Control»* oppure via +scripting Plasma: + +```js +desktops()[0].addWidget("org.enne2.cpufreq") +``` + +Disinstallazione: `./uninstall.sh` (ripristina la baseline prima di rimuovere +l'helper). I task configurati restano in `~/.config/enne2-cpufreq/tasks.json`. + +## Task con profilo dedicato + +Dall'interfaccia: **Nuovo** → nome, comando, profilo. Da terminale: + +```sh +enne2-cpufreq-task list +enne2-cpufreq-task add "Render Blender" performance "blender -b scena.blend -f 1" +enne2-cpufreq-task run render-blender +enne2-cpufreq-task stop render-blender +enne2-cpufreq-task active +``` + +Sequenza di `run`: + +1. `helper task-begin `: salva la baseline (solo al primo task) e applica il profilo +2. il comando parte staccato (`setsid`) e scrive il proprio pid in + `$XDG_RUNTIME_DIR/enne2-cpufreq/.pid` +3. un watcher attende l'uscita del pid e chiama `helper task-end`, che decrementa + un contatore e ripristina la baseline a zero (con `notify-send` di conferma) + +Più task in parallelo sono contati: il ripristino avviene solo quando l'ultimo +termina. `enne2-cpufreq-task remove` rifiuta di rimuovere un task in esecuzione. + +## Comportamento sui driver + +- **amd-pstate-epp (active)**: `powersave`/`performance` sono policy del driver; + `powersave` *non* blocca la frequenza al minimo, EPP è il vero bias. + Con `boost=0` il kernel abbassa `cpuinfo_max_freq` alla frequenza nominale + (3.80 GHz invece di 4.97 GHz): il tetto reale viene letto da + `amd_pstate_max_freq`, e per questo `apply` imposta **prima** il boost e poi i + limiti. +- **intel_pstate**: boost tramite `intel_pstate/no_turbo` (invertito). +- **Altri driver cpufreq**: governor e limiti restano validi; EPP e boost + compaiono solo se le interfacce esistono. + +## Servizi concorrenti + +Se `tuned`, `power-profiles-daemon` o `tlp` sono attivi il widget lo segnala: il +profilo `balanced` di tuned scrive esattamente `governor`, `energy_performance_preference` +e `boost`, quindi un `tuned-adm profile` o il boot possono sovrascrivere le +impostazioni. Su frigate `tuned` è attivo: le modifiche valgono fino al prossimo +apply di tuned. + +## Diagnosi + +```sh +/usr/local/libexec/enne2-cpufreq/cpufreq-helper status # stato, baseline, refcount +~/.local/share/plasma/plasmoids/org.enne2.cpufreq/contents/scripts/cpufreq-state.sh +pkexec /usr/local/libexec/enne2-cpufreq/cpufreq-helper apply balanced +journalctl --user -u plasma-plasmashell.service -f | grep cpufreq +``` + +| Sintomo | Causa | +|---|---| +| banner rosso «Backend non installato» | manca `/usr/local/libexec/enne2-cpufreq/` → `./install.sh --backend` | +| dialog password a ogni modifica | manca la regola polkit (o utente fuori da `wheel`) | +| «autorizzazione negata da polkit» | regola non caricata: `systemctl try-reload-or-restart polkit` | +| valori che tornano indietro | servizio concorrente (tuned/power-profiles-daemon/tlp) | +| il widget resta 68×68 | `implicitWidth/Height` del plasmoide non validi: verificare `main.qml` | + +## Note di implementazione Plasma 6 + +- `metadata.json` con `X-Plasma-API-Minimum-Version: "6.0"`, senza chiavi Plasma 5. +- Comandi via `org.kde.plasma.plasma5support` (`engine: "executable"`); ogni + azione usa un source univoco (contatore in coda) perché il motore non riesegue + un source già noto. +- `syncControls()` è protetto: `applyState()` gira ogni 2 s e la rappresentazione + piena può non esistere (popup chiuso) → senza guardia il `ReferenceError` su un + id interrompeva la sincronizzazione dei controlli. +- `implicitWidth/implicitHeight` del `Flickable` sono costanti: se dipendono dal + layout il containment riduce il widget alla dimensione minima (68×68). +- Nessun `Switch` per il boost: `toggled` scatta anche quando il valore viene + riallineato dallo stato. Le pillole sono prive di stato interno. + +## File + +``` +metadata.json +contents/ui/main.qml interfaccia (compact + full, Flickable) +contents/ui/ChoicePill.qml pillola selezionabile +contents/scripts/profiles.sh tabella profili condivisa (unica fonte) +contents/scripts/cpufreq-state.sh lettura stato non privilegiata +contents/scripts/enne2-cpufreq-task launcher task (utente) +bin/cpufreq-helper helper privilegiato (root) +polkit/*.policy, polkit/*.rules azione e regola polkit +install.sh, uninstall.sh +``` + +Licenza MIT. diff --git a/bin/cpufreq-helper b/bin/cpufreq-helper new file mode 100755 index 0000000..6e753f4 --- /dev/null +++ b/bin/cpufreq-helper @@ -0,0 +1,410 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT +# enne2-cpufreq — helper privilegiato a interfaccia ristretta. +# +# Installato come /usr/local/libexec/enne2-cpufreq/cpufreq-helper (root:root 0755), +# invocato dal plasmoide org.enne2.cpufreq tramite pkexec e una azione polkit +# dedicata (org.enne2.cpufreq.set). Non accetta comandi arbitrari: solo i +# sottocomandi elencati in usage() e con argomenti validati contro sysfs. +# +# Uscita: righe key=value; ok=1 in caso di successo, ok=0 + error= + exit 2 +# in caso di rifiuto. Ogni scrittura viene riletta per verifica. +set -u + +PATH=/usr/sbin:/usr/bin:/sbin:/bin +export PATH +umask 022 + +CMD=${1:-status} +[ "$#" -gt 0 ] && shift + +SELF_DIR=$(dirname "$0") +if [ -r "$SELF_DIR/profiles.sh" ]; then + # shellcheck source=../../contents/scripts/profiles.sh + . "$SELF_DIR/profiles.sh" +else + printf 'ok=0\nerror=profiles.sh mancante accanto all helper\n' + exit 2 +fi + +CPUFREQ=/sys/devices/system/cpu/cpufreq +INTEL_PSTATE=/sys/devices/system/cpu/intel_pstate +STATE_DIR=/var/lib/enne2-cpufreq +BASELINE=$STATE_DIR/baseline +REFCOUNT=$STATE_DIR/refcount + +usage() { + cat <<'EOF' +uso: cpufreq-helper [argomenti] + status stato corrente (leggibile anche senza root) + set-governor powersave | performance | ... + set-epp default | performance | balance_performance | balance_power | power + set-limits + set-boost <0|1> + apply quiet | powersave | balanced | performance + reset ripristina i default hardware (boost on, nessun tetto) + save-state salva lo stato corrente come baseline + restore-state ripristina la baseline salvata + task-begin salva la baseline (se serve) e applica il profilo + task-end [--all] decrementa il contatore e ripristina la baseline a zero +EOF +} + +fail() { + printf 'ok=0\nerror=%s\n' "$*" + exit 2 +} + +readf() { # readf -> valore o exit 1 + [ -r "$1" ] || return 1 + _val= + IFS= read -r _val < "$1" 2>/dev/null || [ -n "$_val" ] || return 1 + printf '%s\n' "$_val" +} + +policies() { + for _p in "$CPUFREQ"/policy[0-9]*; do + [ -d "$_p" ] && printf '%s\n' "$_p" + done +} + +write_one() { # write_one + [ -w "$1" ] || return 1 + printf '%s\n' "$2" > "$1" 2>/dev/null +} + +# Scrive un attributo su TUTTE le policy. Imposta WROTE e FAILED. +write_all() { + _attr=$1 + _val=$2 + WROTE=0 + FAILED=0 + for _p in $(policies); do + if write_one "$_p/$_attr" "$_val"; then + WROTE=$((WROTE + 1)) + else + FAILED=$((FAILED + 1)) + fi + done + [ "$FAILED" -eq 0 ] && [ "$WROTE" -gt 0 ] +} + +# Valori distinti letti per un attributo, spazio-separati. +attr_values() { + for _p in $(policies); do + readf "$_p/$1" + done | sort -u | tr '\n' ' ' | sed 's/ *$//' +} + +p0=$(policies | head -n 1) +[ -n "$p0" ] || fail "nessuna policy cpufreq in $CPUFREQ" + +driver=$(readf "$p0/scaling_driver" || echo unknown) +hw_min=$(readf "$p0/cpuinfo_min_freq" || echo 0) +hw_max=$(cf_hw_max_khz "$p0") # indipendente dallo stato del boost +floor=$(readf "$p0/amd_pstate_lowest_nonlinear_freq" || echo "") +[ -n "$floor" ] && [ "$floor" -gt "$hw_min" ] || floor=$hw_min + +boost_global=$CPUFREQ/boost +[ -w "$boost_global" ] || [ -r "$boost_global" ] || boost_global="" + +boost_read() { + for _p in $(policies); do + readf "$_p/boost" && return 0 + done + [ -n "$boost_global" ] && readf "$boost_global" && return 0 + readf "$INTEL_PSTATE/no_turbo" >/dev/null 2>&1 || return 1 + _nt=$(readf "$INTEL_PSTATE/no_turbo") || return 1 + [ "$_nt" = "1" ] && echo 0 || echo 1 +} + +print_state() { + printf 'driver=%s\n' "$driver" + printf 'mode=%s\n' "$(readf /sys/devices/system/cpu/amd_pstate/status || echo n/a)" + printf 'governor=%s\n' "$(attr_values scaling_governor)" + printf 'epp=%s\n' "$(attr_values energy_performance_preference)" + printf 'min_khz=%s\n' "$(readf "$p0/scaling_min_freq")" + printf 'max_khz=%s\n' "$(readf "$p0/scaling_max_freq")" + printf 'hw_min_khz=%s\n' "$hw_min" + printf 'hw_max_khz=%s\n' "$hw_max" + printf 'floor_khz=%s\n' "$floor" + printf 'boost=%s\n' "$(boost_read || echo n/a)" + printf 'policies=%s\n' "$(policies | wc -l | tr -d ' ')" + printf 'baseline=%s\n' "$([ -r "$BASELINE" ] && echo present || echo absent)" + printf 'refcount=%s\n' "$([ -r "$REFCOUNT" ] && readf "$REFCOUNT" || echo 0)" +} + +set_governor() { + _g=${1:-} + [ -n "$_g" ] || fail "governor mancante" + case "$_g" in *[!a-z_-]*) fail "governor non valido: $_g" ;; esac + _avail=$(readf "$p0/scaling_available_governors") || fail "governor non leggibili" + case " $_avail " in + *" $_g "*) ;; + *) fail "governor '$_g' non disponibile ($_avail)" ;; + esac + write_all scaling_governor "$_g" || fail "scrittura scaling_governor fallita su $FAILED policy" + _now=$(attr_values scaling_governor) + [ "$_now" = "$_g" ] || fail "verifica governor fallita: letto '$_now'" + printf 'governor=%s\n' "$_g" +} + +set_epp() { + _e=${1:-} + [ -n "$_e" ] || fail "preferenza EPP mancante" + case "$_e" in *[!a-z_]*) fail "preferenza EPP non valida: $_e" ;; esac + _avail=$(readf "$p0/energy_performance_available_preferences") \ + || fail "questo driver non espone energy_performance_preference" + case " $_avail " in + *" $_e "*) ;; + *) fail "EPP '$_e' non disponibile ($_avail)" ;; + esac + if write_all energy_performance_preference "$_e"; then + printf 'epp=%s\n' "$_e" + return 0 + fi + # Con governor "performance" il driver EPP può ignorare la preferenza: non è + # un errore fatale, viene segnalato come warning. + if [ "$(attr_values scaling_governor)" = "performance" ]; then + printf 'warning=EPP non applicato con governor performance\n' + return 0 + fi + fail "scrittura EPP fallita su $FAILED policy" +} + +set_boost() { + _b=${1:-} + case "$_b" in 0|1) ;; *) fail "boost deve essere 0 o 1" ;; esac + _count=0 + for _p in $(policies); do + if [ -w "$_p/boost" ] && write_one "$_p/boost" "$_b"; then + _count=$((_count + 1)) + fi + done + if [ -n "$boost_global" ] && write_one "$boost_global" "$_b"; then + _count=$((_count + 1)) + fi + if [ -w "$INTEL_PSTATE/no_turbo" ] && write_one "$INTEL_PSTATE/no_turbo" $((1 - _b)); then + _count=$((_count + 1)) + fi + [ "$_count" -gt 0 ] || fail "nessun controllo boost scrivibile su questo sistema" + _now=$(boost_read || echo "") + [ "$_now" = "$_b" ] || printf 'warning=lettura boost dopo la scrittura: %s\n' "${_now:-n/d}" + printf 'boost=%s\n' "$_b" +} + +set_limits() { + _min=${1:-} + _max=${2:-} + case "$_min$_max" in *[!0-9]*) fail "limiti non numerici (kHz interi)" ;; esac + [ -n "$_min" ] && [ -n "$_max" ] || fail "servono min_khz e max_khz" + [ "$_min" -ge "$hw_min" ] || fail "minimo $_min sotto il limite hardware $hw_min" + [ "$_max" -le "$hw_max" ] || fail "massimo $_max sopra il limite hardware $hw_max" + [ "$_min" -le "$_max" ] || fail "minimo $_min maggiore del massimo $_max" + _cur_min=$(readf "$p0/scaling_min_freq" || echo "$hw_min") + _cur_max=$(readf "$p0/scaling_max_freq" || echo "$hw_max") + # Ordine di scrittura sicuro: mai uno stato intermedio con min > max. + if [ "$_min" -gt "$_cur_max" ]; then + write_all scaling_max_freq "$_max" || fail "pre-allargamento del tetto fallito" + fi + if [ "$_max" -lt "$_cur_min" ]; then + write_all scaling_min_freq "$_min" || fail "pre-abbassamento del minimo fallito" + fi + write_all scaling_min_freq "$_min" || fail "scrittura scaling_min_freq fallita su $FAILED policy" + write_all scaling_max_freq "$_max" || fail "scrittura scaling_max_freq fallita su $FAILED policy" + printf 'min_khz=%s\n' "$(readf "$p0/scaling_min_freq")" + printf 'max_khz=%s\n' "$(readf "$p0/scaling_max_freq")" +} + +apply_profile() { + _pr=${1:-} + cf_profile_known "$_pr" || fail "profilo '$_pr' sconosciuto ($(cf_profiles | tr '\n' ' '))" + _gov=$(cf_profile_gov "$_pr") + _epp=$(cf_profile_epp "$_pr") + _bst=$(cf_profile_boost "$_pr") + _maxf=$(cf_profile_max_khz "$_pr" "$floor" "$hw_max") + [ "$_maxf" -gt "$hw_max" ] && _maxf=$hw_max + [ "$_maxf" -lt "$floor" ] && _maxf=$floor + printf 'profile=%s\n' "$_pr" + # Ordine: 1) boost, 2) governor, 3) limiti, 4) EPP. + # Il boost viene per primo perché con boost disattivato il kernel riduce il + # tetto nominale e una scrittura di scaling_max_freq oltre quel valore + # verrebbe rifiutata o limitata. + set_boost "$_bst" || return 1 + if readf "$p0/scaling_available_governors" | grep -qw -- "$_gov"; then + set_governor "$_gov" || return 1 + else + printf 'warning=governor %s non disponibile, mantenuto %s\n' \ + "$_gov" "$(attr_values scaling_governor)" + fi + set_limits "$floor" "$_maxf" || return 1 + if readf "$p0/energy_performance_available_preferences" >/dev/null 2>&1; then + set_epp "$_epp" || return 1 + fi + printf 'profile_label=%s\n' "$(cf_profile_label "$_pr")" +} + +ensure_state_dir() { + if [ ! -d "$STATE_DIR" ]; then + mkdir -p "$STATE_DIR" || fail "impossibile creare $STATE_DIR" + chmod 755 "$STATE_DIR" + fi +} + +save_state() { + ensure_state_dir + { + printf 'governor=%s\n' "$(readf "$p0/scaling_governor")" + printf 'epp=%s\n' "$(readf "$p0/energy_performance_preference" || echo "")" + printf 'min_khz=%s\n' "$(readf "$p0/scaling_min_freq")" + printf 'max_khz=%s\n' "$(readf "$p0/scaling_max_freq")" + printf 'boost=%s\n' "$(boost_read || echo "")" + printf 'saved_at=%s\n' "$(date +%s)" + } > "$BASELINE" || fail "scrittura baseline fallita" + chmod 644 "$BASELINE" + printf 'baseline=saved\n' + cat "$BASELINE" +} + +restore_state() { + [ -r "$BASELINE" ] || fail "nessuna baseline salvata" + _gov=$(sed -n 's/^governor=//p' "$BASELINE") + _epp=$(sed -n 's/^epp=//p' "$BASELINE") + _min=$(sed -n 's/^min_khz=//p' "$BASELINE") + _max=$(sed -n 's/^max_khz=//p' "$BASELINE") + _bst=$(sed -n 's/^boost=//p' "$BASELINE") + if [ -n "$_gov" ]; then + if readf "$p0/scaling_available_governors" | grep -qw -- "$_gov"; then + write_all scaling_governor "$_gov" || printf 'warning=governor non ripristinato\n' + fi + fi + if [ -n "$_min" ] && [ -n "$_max" ]; then + case "$_min$_max" in + *[!0-9]*) ;; + *) set_limits "$_min" "$_max" || printf 'warning=limiti non ripristinati\n' ;; + esac + fi + if [ -n "$_epp" ] && readf "$p0/energy_performance_available_preferences" >/dev/null 2>&1; then + write_all energy_performance_preference "$_epp" || printf 'warning=EPP non ripristinato\n' + fi + if [ -n "$_bst" ]; then + case "$_bst" in + 0|1) set_boost "$_bst" >/dev/null || printf 'warning=boost non ripristinato\n' ;; + esac + fi + printf 'restored=1\n' + print_state +} + +reset_cmd() { + _gov=powersave + if ! readf "$p0/scaling_available_governors" | grep -qw -- "$_gov"; then + _gov=$(readf "$p0/scaling_available_governors" | awk '{print $1}') + fi + printf 'profile=reset\n' + [ -n "$_gov" ] && set_governor "$_gov" + set_limits "$floor" "$hw_max" || return 1 + if readf "$p0/energy_performance_available_preferences" >/dev/null 2>&1; then + _epp=balance_performance + if ! readf "$p0/energy_performance_available_preferences" | grep -qw -- "$_epp"; then + _epp=default + fi + set_epp "$_epp" || return 1 + fi + set_boost 1 || return 1 +} + +task_begin() { + _pr=${1:-} + cf_profile_known "$_pr" || fail "profilo '$_pr' sconosciuto" + ensure_state_dir + _rc=0 + [ -r "$REFCOUNT" ] && _rc=$(readf "$REFCOUNT") + case "${_rc:-0}" in *[!0-9]*|"") _rc=0 ;; esac + if [ "$_rc" -eq 0 ] || [ ! -r "$BASELINE" ]; then + save_state >/dev/null || fail "salvataggio dello stato corrente fallito" + fi + apply_profile "$_pr" || fail "applicazione del profilo '$_pr' fallita" + _rc=$((_rc + 1)) + printf '%s\n' "$_rc" > "$REFCOUNT" + chmod 644 "$REFCOUNT" + printf 'refcount=%s\n' "$_rc" +} + +task_end() { + ensure_state_dir + _rc=0 + [ -r "$REFCOUNT" ] && _rc=$(readf "$REFCOUNT") + case "${_rc:-0}" in *[!0-9]*|"") _rc=0 ;; esac + if [ "${1:-}" = "--all" ]; then + _rc=0 + else + _rc=$((_rc - 1)) + [ "$_rc" -lt 0 ] && _rc=0 + fi + printf '%s\n' "$_rc" > "$REFCOUNT" + chmod 644 "$REFCOUNT" + if [ "$_rc" -eq 0 ] && [ -r "$BASELINE" ]; then + restore_state >/dev/null || printf 'warning=ripristino della baseline fallito\n' + rm -f "$BASELINE" + printf 'restored=1\n' + fi + printf 'refcount=%s\n' "$_rc" +} + +case "$CMD" in + status) + print_state + ;; + usage|-h|--help|help) + usage + ;; + set-governor) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + set_governor "${1:-}" + ;; + set-epp) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + set_epp "${1:-}" + ;; + set-limits) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + set_limits "${1:-}" "${2:-}" + ;; + set-boost) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + set_boost "${1:-}" + ;; + apply) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + apply_profile "${1:-}" + ;; + reset) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + reset_cmd + ;; + save-state) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + save_state + ;; + restore-state) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + restore_state + ;; + task-begin) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + task_begin "${1:-}" + ;; + task-end) + [ "$(id -u)" -eq 0 ] || fail "operazione privilegiata: usare pkexec" + task_end "${1:-}" + ;; + *) + printf 'ok=0\nerror=comando sconosciuto: %s\n' "$CMD" + usage + exit 2 + ;; +esac + +printf 'ok=1\n' +exit 0 diff --git a/contents/scripts/cpufreq-state.sh b/contents/scripts/cpufreq-state.sh new file mode 100755 index 0000000..936b43d --- /dev/null +++ b/contents/scripts/cpufreq-state.sh @@ -0,0 +1,175 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT +# enne2-cpufreq — lettore di stato NON privilegiato per il plasmoide. +# Legge solo attributi world-readable di sysfs, /proc e hwmon; non scrive nulla. +# Uscita: righe key=value (formato usato dagli altri widget org.enne2.*). +set -u + +SELF_DIR=$(dirname "$0") +if [ -r "$SELF_DIR/profiles.sh" ]; then + # shellcheck source=profiles.sh + . "$SELF_DIR/profiles.sh" +else + printf 'helper=missing\nerror=profiles.sh mancante\n' + exit 2 +fi + +CPUFREQ=/sys/devices/system/cpu/cpufreq +HELPER=/usr/local/libexec/enne2-cpufreq/cpufreq-helper +POLICY_POLKIT=/usr/share/polkit-1/actions/org.enne2.cpufreq.set.policy +RULE_POLKIT=/etc/polkit-1/rules.d/50-org.enne2.cpufreq.rules +CONF_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/enne2-cpufreq +TASKS=$CONF_DIR/tasks.json +RUN=${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/enne2-cpufreq + +readf() { + [ -r "$1" ] || return 1 + _val= + IFS= read -r _val < "$1" 2>/dev/null || [ -n "$_val" ] || return 1 + printf '%s\n' "$_val" +} + +policies() { + for _p in "$CPUFREQ"/policy[0-9]*; do + [ -d "$_p" ] && printf '%s\n' "$_p" + done +} + +attr_values() { + for _p in $(policies); do + readf "$_p/$1" + done | sort -u | tr '\n' ' ' | sed 's/ *$//' +} + +p0=$(policies | head -n 1) +if [ -z "$p0" ]; then + printf 'helper=missing\nerror=nessuna policy cpufreq (driver non cpufreq?)\n' + exit 2 +fi + +driver=$(readf "$p0/scaling_driver" || echo unknown) +hw_min=$(readf "$p0/cpuinfo_min_freq" || echo 0) +hw_max=$(cf_hw_max_khz "$p0") # indipendente dallo stato del boost +floor=$(readf "$p0/amd_pstate_lowest_nonlinear_freq" || echo "") +[ -n "$floor" ] && [ "$floor" -gt "$hw_min" ] || floor=$hw_min +min_khz=$(readf "$p0/scaling_min_freq" || echo 0) +max_khz=$(readf "$p0/scaling_max_freq" || echo 0) +governor=$(attr_values scaling_governor) +governors=$(readf "$p0/scaling_available_governors" || echo "") +epp=$(attr_values energy_performance_preference) +epps=$(readf "$p0/energy_performance_available_preferences" || echo "") +epp_supported=0 +[ -n "$epps" ] && epp_supported=1 + +# boost: per-policy (kernel recenti) → globale → intel_pstate/no_turbo invertito +boost=$(readf "$p0/boost" || readf "$CPUFREQ/boost" || echo "") +boost_supported=0 +[ -n "$boost" ] && boost_supported=1 +if [ "$boost_supported" -eq 0 ] && [ -r /sys/devices/system/cpu/intel_pstate/no_turbo ]; then + _nt=$(readf /sys/devices/system/cpu/intel_pstate/no_turbo) + [ "$_nt" = "1" ] && boost=0 || boost=1 + boost_supported=1 +fi + +# frequenza istantanea: massima fra le policy (core più attivo) e media +sum=0 +cnt=0 +curmax=0 +for _p in $(policies); do + _f=$(readf "$_p/scaling_cur_freq") || continue + case "$_f" in ''|*[!0-9]*) continue ;; esac + sum=$((sum + _f)) + cnt=$((cnt + 1)) + [ "$_f" -gt "$curmax" ] && curmax=$_f +done +[ "$cnt" -gt 0 ] || cnt=1 +cur_avg=$((sum / cnt)) + +temp=$(readf /sys/class/hwmon/hwmon0/temp1_input 2>/dev/null || echo "") +for _h in /sys/class/hwmon/hwmon*; do + [ -r "$_h/name" ] || continue + case "$(readf "$_h/name")" in + k10temp|coretemp|zenpower) + temp=$(readf "$_h/temp1_input" || echo "") + break + ;; + esac +done + +model=$(sed -n 's/^model name[[:space:]]*: //p' /proc/cpuinfo | head -n 1) +load1=$(awk '{print $1}' /proc/loadavg) + +helper_state=missing +[ -x "$HELPER" ] && helper_state=ok +polkit_state=missing +if [ -r "$POLICY_POLKIT" ] && [ -r "$RULE_POLKIT" ]; then + polkit_state=ok +elif [ -r "$POLICY_POLKIT" ]; then + polkit_state=ask +fi + +conflicts="" +for _svc in tuned power-profiles-daemon tlp; do + if systemctl is-active --quiet "$_svc" 2>/dev/null; then + conflicts="$conflicts $_svc" + fi +done +conflicts=${conflicts# } + +profile=$(cf_detect_profile "${governor:-}" "${epp:-}" "${boost:-0}" "$max_khz" "$floor" "$hw_max") +printf 'driver=%s\n' "$driver" +printf 'mode=%s\n' "$(readf /sys/devices/system/cpu/amd_pstate/status || echo n/a)" +printf 'model=%s\n' "$model" +printf 'policies=%s\n' "$cnt" +printf 'governor=%s\n' "$governor" +printf 'governors=%s\n' "$governors" +printf 'epp=%s\n' "$epp" +printf 'epps=%s\n' "$epps" +printf 'epp_supported=%s\n' "$epp_supported" +printf 'boost=%s\n' "$boost" +printf 'boost_supported=%s\n' "$boost_supported" +printf 'hw_min_khz=%s\n' "$hw_min" +printf 'hw_max_khz=%s\n' "$hw_max" +printf 'floor_khz=%s\n' "$floor" +printf 'min_khz=%s\n' "$min_khz" +printf 'max_khz=%s\n' "$max_khz" +printf 'cur_khz=%s\n' "$curmax" +printf 'cur_avg_khz=%s\n' "$cur_avg" +printf 'temp_mdegc=%s\n' "$temp" +printf 'load1=%s\n' "$load1" +printf 'profile=%s\n' "$profile" +printf 'profile_label=%s\n' "$(cf_profile_label "$profile")" +printf 'helper=%s\n' "$helper_state" +printf 'polkit=%s\n' "$polkit_state" +printf 'conflicts=%s\n' "$conflicts" +[ -r /var/lib/enne2-cpufreq/baseline ] && printf 'baseline=present\n' || printf 'baseline=absent\n' + +# ---- task configurati (un file JSON gestito da enne2-cpufreq-task) ---------- +# Formato di ogni riga: task= +# Il JSON (jq -c, una riga) evita ogni ambiguità su spazi, tabulazioni e pipe +# dentro i comandi definiti dall'utente. +if command -v jq >/dev/null 2>&1 && [ -r "$TASKS" ]; then + _count=$(jq -r '.tasks | length' "$TASKS" 2>/dev/null || echo 0) + printf 'task_count=%s\n' "${_count:-0}" + _i=0 + jq -c '.tasks[] | {name: .name, profile: .profile, command: .command, slug: .slug}' \ + "$TASKS" 2>/dev/null | + while IFS= read -r _line; do + [ -n "$_line" ] || continue + _slug=$(printf '%s' "$_line" | jq -r '.slug // ""' 2>/dev/null) + _running=0 + if [ -n "$_slug" ] && [ -r "$RUN/$_slug.pid" ]; then + _pid=$(readf "$RUN/$_slug.pid") + case "$_pid" in + ''|*[!0-9]*) _running=0 ;; + *) kill -0 "$_pid" 2>/dev/null && _running=1 ;; + esac + fi + printf 'task=%s\t%s\t%s\n' "$_i" "$_running" "$_line" + _i=$((_i + 1)) + done +else + printf 'task_count=0\n' +fi + +printf 'ts=%s\n' "$(date +%s)" diff --git a/contents/scripts/enne2-cpufreq-task b/contents/scripts/enne2-cpufreq-task new file mode 100755 index 0000000..65b210f --- /dev/null +++ b/contents/scripts/enne2-cpufreq-task @@ -0,0 +1,274 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT +# enne2-cpufreq-task — launcher di task con profilo CPU dedicato. +# +# Gira SEMPRE come utente: il comando del task non viene mai eseguito come root. +# Solo il cambio di profilo passa dall'helper privilegiato via pkexec. +# +# Flusso di "run": +# 1. helper task-begin → salva la baseline (una sola volta) e applica +# 2. il comando parte staccato (setsid) e scrive il proprio pid nel file di stato +# 3. un watcher staccato attende l'uscita del pid e chiama helper task-end, che +# ripristina la baseline quando non ci sono altri task attivi +# +# Il plasmoide invoca "add-hex" con gli argomenti codificati in esadecimale +# (UTF-8): così nomi, comandi con spazi, virgolette o newline attraversano +# l'exec engine di Plasma senza dipendere dal parsing delle virgolette. +set -u + +PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin +export PATH + +SELF_DIR=$(dirname "$0") +HELPER=/usr/local/libexec/enne2-cpufreq/cpufreq-helper +CONF_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/enne2-cpufreq +TASKS=$CONF_DIR/tasks.json +RUN=${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/enne2-cpufreq + +mkdir -p "$CONF_DIR" "$RUN" 2>/dev/null + +fail() { + printf 'ok=0\nerror=%s\n' "$*" + exit 2 +} + +readf() { + [ -r "$1" ] || return 1 + _val= + IFS= read -r _val < "$1" 2>/dev/null || [ -n "$_val" ] || return 1 + printf '%s\n' "$_val" +} + +# Decodifica esadecimale UTF-8 senza dipendenze (xxd/od non sempre presenti). +hex_decode() { + [ -n "${1:-}" ] || return 0 + case "$1" in *[!0-9a-fA-F]*) fail "payload esadecimale non valido" ;; esac + _esc=$(printf '%s' "$1" | sed 's/\(..\)/\\x\1/g') + printf '%b' "$_esc" +} + +need_jq() { + command -v jq >/dev/null 2>&1 || fail "jq non installato (serve per gestire tasks.json)" +} + +init_tasks() { + [ -r "$TASKS" ] && return 0 + printf '{"version":1,"tasks":[]}\n' > "$TASKS" || fail "impossibile creare $TASKS" +} + +slugify() { + printf '%s' "$1" | tr 'A-Z' 'a-z' | tr -c 'A-Za-z0-9._-' '-' \ + | sed -e 's/--*/-/g' -e 's/^-//' -e 's/-$//' +} + +# Accetta indifferentemente il nome visualizzato o lo slug. +resolve_slug() { + jq -r --arg q "$1" '.tasks[] | select(.name == $q or .slug == $q) | .slug' \ + "$TASKS" 2>/dev/null | head -n 1 +} + +field_of_slug() { # field_of_slug + jq -r --arg s "$1" --arg f "$2" \ + '.tasks[] | select(.slug == $s) | .[$f] // empty' "$TASKS" 2>/dev/null | head -n 1 +} + +is_running() { # is_running + _pid=$(readf "$RUN/$1.pid") || return 1 + case "$_pid" in ''|*[!0-9]*) return 1 ;; esac + kill -0 "$_pid" 2>/dev/null +} + +helper_ready() { + [ -x "$HELPER" ] || fail "helper non installato in $HELPER (eseguire install.sh)" + command -v pkexec >/dev/null 2>&1 || fail "pkexec non disponibile (installare polkit)" +} + +do_add() { # do_add + init_tasks + need_jq + _name=${1:-} + _prof=${2:-} + _cmd=${3:-} + [ -n "$_name" ] || fail "nome del task mancante" + [ -n "$_cmd" ] || fail "comando del task mancante" + case $_prof in + quiet|powersave|balanced|performance) ;; + *) fail "profilo non valido: $_prof (quiet|powersave|balanced|performance)" ;; + esac + _slug=$(slugify "$_name") + [ -n "$_slug" ] || fail "nome non utilizzabile come slug: $_name" + if [ -n "$(resolve_slug "$_name")" ]; then + fail "esiste già un task chiamato '$_name'" + fi + _tmp=$TASKS.tmp.$$ + jq --arg n "$_name" --arg p "$_prof" --arg c "$_cmd" --arg s "$_slug" \ + '.tasks += [{name: $n, profile: $p, command: $c, slug: $s}]' "$TASKS" > "$_tmp" \ + && mv "$_tmp" "$TASKS" || { rm -f "$_tmp"; fail "scrittura tasks.json fallita"; } + printf 'ok=1\nname=%s\nprofile=%s\nslug=%s\n' "$_name" "$_prof" "$_slug" +} + +cmd_add() { # add + _name=${1:-} + _prof=${2:-} + [ "$#" -ge 3 ] || fail "servono nome, profilo e comando" + shift 2 + do_add "$_name" "$_prof" "$*" +} + +cmd_add_hex() { # add-hex + [ "$#" -ge 3 ] || fail "servono tre argomenti esadecimali" + do_add "$(hex_decode "$1")" "$(hex_decode "$2")" "$(hex_decode "$3")" +} + +cmd_list() { + init_tasks + need_jq + printf 'ok=1\n' + [ -x "$HELPER" ] && printf 'helper=ok\n' || printf 'helper=missing\n' + printf 'count=%s\n' "$(jq -r '.tasks | length' "$TASKS" 2>/dev/null || echo 0)" + _i=0 + jq -c '.tasks[] | {name: .name, profile: .profile, command: .command, slug: .slug}' \ + "$TASKS" 2>/dev/null | + while IFS= read -r _line; do + [ -n "$_line" ] || continue + _slug=$(printf '%s' "$_line" | jq -r '.slug') + _run=0 + is_running "$_slug" && _run=1 + printf 'task=%s\t%s\t%s\n' "$_i" "$_run" "$_line" + _i=$((_i + 1)) + done +} + +cmd_remove() { # remove + init_tasks + need_jq + _slug=$(resolve_slug "${1:-}") + [ -n "$_slug" ] || fail "task '${1:-}' inesistente" + is_running "$_slug" && fail "il task è in esecuzione: fermarlo prima di rimuoverlo" + _tmp=$TASKS.tmp.$$ + jq --arg s "$_slug" '.tasks |= map(select(.slug != $s))' "$TASKS" > "$_tmp" \ + && mv "$_tmp" "$TASKS" || { rm -f "$_tmp"; fail "scrittura tasks.json fallita"; } + rm -f "$RUN/$_slug.pid" "$RUN/$_slug.info" + printf 'ok=1\nremoved=%s\n' "$_slug" +} + +cmd_run() { # run + init_tasks + need_jq + helper_ready + _slug=$(resolve_slug "${1:-}") + [ -n "$_slug" ] || fail "task '${1:-}' inesistente" + _name=$(field_of_slug "$_slug" name) + _prof=$(field_of_slug "$_slug" profile) + _cmd=$(field_of_slug "$_slug" command) + [ -n "$_cmd" ] || fail "comando vuoto per '$_name'" + is_running "$_slug" && fail "il task '$_name' è già in esecuzione" + + _out=$(pkexec "$HELPER" task-begin "$_prof" 2>&1) \ + || fail "profilo '$_prof' non applicato: $(printf '%s' "$_out" | tr '\n' ' ')" + case "$_out" in + *"ok=0"*) fail "profilo '$_prof' non applicato: $(printf '%s' "$_out" | tr '\n' ' ')" ;; + esac + + rm -f "$RUN/$_slug.pid" "$RUN/$_slug.info" + # Il figlio scrive il proprio pid e poi exec il comando: il pid resta valido, + # così il watcher può attenderne davvero la fine. + setsid sh -c 'printf "%s\n" "$$" > "$1"; shift; exec sh -c "$1"' \ + sh "$RUN/$_slug.pid" "$_cmd" /dev/null 2>&1 & + _launcher=$! + + _n=0 + while [ ! -s "$RUN/$_slug.pid" ] && [ "$_n" -lt 25 ]; do + sleep 0.1 2>/dev/null || sleep 1 + _n=$((_n + 1)) + kill -0 "$_launcher" 2>/dev/null || break + done + if [ ! -s "$RUN/$_slug.pid" ]; then + pkexec "$HELPER" task-end >/dev/null 2>&1 + fail "avvio del comando fallito: $_cmd" + fi + _pid=$(readf "$RUN/$_slug.pid") + printf 'name=%s\nprofile=%s\nslug=%s\nstarted=%s\n' \ + "$_name" "$_prof" "$_slug" "$(date +%s)" > "$RUN/$_slug.info" + + setsid "$SELF_DIR/$(basename "$0")" watch "$_slug" /dev/null 2>&1 & + + printf 'ok=1\nname=%s\nslug=%s\nprofile=%s\npid=%s\n' "$_name" "$_slug" "$_prof" "$_pid" +} + +cmd_stop() { # stop + init_tasks + need_jq + _slug=$(resolve_slug "${1:-}") + [ -n "$_slug" ] || fail "task '${1:-}' inesistente" + is_running "$_slug" || fail "il task '$_slug' non è in esecuzione" + _pid=$(readf "$RUN/$_slug.pid") + kill -TERM -- "-$_pid" 2>/dev/null || kill -TERM "$_pid" 2>/dev/null + printf 'ok=1\nstopped=%s\npid=%s\n' "$_slug" "$_pid" +} + +cmd_watch() { # watch (interno) + _slug=${1:-} + [ -n "$_slug" ] || exit 2 + _pid=$(readf "$RUN/$_slug.pid" 2>/dev/null) || exit 0 + while kill -0 "$_pid" 2>/dev/null; do + sleep 2 + done + _name=$(sed -n 's/^name=//p' "$RUN/$_slug.info" 2>/dev/null) + _prof=$(sed -n 's/^profile=//p' "$RUN/$_slug.info" 2>/dev/null) + rm -f "$RUN/$_slug.pid" "$RUN/$_slug.info" + if [ -x "$HELPER" ]; then + pkexec "$HELPER" task-end >/dev/null 2>&1 + fi + if command -v notify-send >/dev/null 2>&1; then + notify-send -a "CPUFreq" -i cpu \ + "Task concluso: ${_name:-$_slug}" \ + "Profilo CPU '${_prof:-?}' chiuso, stato precedente ripristinato" + fi +} + +cmd_active() { + printf 'ok=1\n' + _found=0 + for _f in "$RUN"/*.pid; do + [ -r "$_f" ] || continue + _pid=$(readf "$_f") + case "$_pid" in ''|*[!0-9]*) continue ;; esac + kill -0 "$_pid" 2>/dev/null || continue + _slug=$(basename "$_f" .pid) + _name=$(sed -n 's/^name=//p' "$RUN/$_slug.info" 2>/dev/null) + _prof=$(sed -n 's/^profile=//p' "$RUN/$_slug.info" 2>/dev/null) + printf 'act=%s\t%s\t%s\t%s\n' "$_slug" "${_name:-$_slug}" "${_prof:-?}" "$_pid" + _found=$((_found + 1)) + done + printf 'active=%s\n' "$_found" +} + +usage() { + cat <<'EOF' +uso: enne2-cpufreq-task [argomenti] + list elenco dei task configurati + add + add-hex argomenti in esadecimale UTF-8 (usato dal widget) + remove + run salva lo stato, applica il profilo, esegue, ripristina + stop termina il task (il watcher ripristina il profilo) + active task attualmente in esecuzione +EOF +} + +[ "$#" -gt 0 ] || { usage; exit 2; } +_CMD=$1 +shift +case "$_CMD" in + list) cmd_list ;; + add) cmd_add "$@" ;; + add-hex) cmd_add_hex "$@" ;; + remove|rm) cmd_remove "$@" ;; + run|start) cmd_run "$@" ;; + stop) cmd_stop "$@" ;; + watch) cmd_watch "$@" ;; + active) cmd_active ;; + -h|--help|help) usage ;; + *) printf 'ok=0\nerror=comando sconosciuto: %s\n' "$_CMD"; usage; exit 2 ;; +esac diff --git a/contents/scripts/profiles.sh b/contents/scripts/profiles.sh new file mode 100755 index 0000000..afab301 --- /dev/null +++ b/contents/scripts/profiles.sh @@ -0,0 +1,145 @@ +# shellcheck shell=sh +# Profili di frequenza condivisi fra helper privilegiato, lettore di stato e plasmoide. +# Sorgente unica di verità: NON scrive nulla su sysfs, contiene solo la tabella dei +# profili e l'aritmetica dei limiti (kHz). Copiato da install.sh accanto all'helper +# in /usr/local/libexec/enne2-cpufreq/. +# +# Ogni profilo agisce su: governor, energy_performance_preference (EPP), boost e +# tetto di frequenza espresso come percentuale dello span utile +# (floor_khz .. cpuinfo_max_freq). + +# Lettura minimale (il file è già stato validato dal chiamante dove serve). +cf_read() { + _cfout= + [ -r "$1" ] || return 1 + IFS= read -r _cfout < "$1" 2>/dev/null || [ -n "$_cfout" ] || return 1 + printf '%s\n' "$_cfout" +} + +# Tetto hardware reale (kHz), indipendente dallo stato del boost: +# con boost disattivato il kernel riporta in cpuinfo_max_freq la frequenza +# nominale (es. 3.80 GHz invece di 4.97 GHz su amd-pstate). amd_pstate_max_freq +# conserva il massimo effettivo; su altri driver cpuinfo_max_freq è già corretto. +cf_hw_max_khz() { + _cfp0=$1 + _cfmax=$(cf_read "$_cfp0/cpuinfo_max_freq" || echo 0) + case "$_cfmax" in ''|*[!0-9]*) _cfmax=0 ;; esac + _cfamd=$(cf_read "$_cfp0/amd_pstate_max_freq" || echo 0) + case "$_cfamd" in ''|*[!0-9]*) _cfamd=0 ;; esac + [ "$_cfamd" -gt "$_cfmax" ] && _cfmax=$_cfamd + printf '%s\n' "$_cfmax" +} + +cf_profiles() { + printf '%s\n' quiet powersave balanced performance +} + +cf_profile_known() { + case "$1" in + quiet|powersave|balanced|performance) return 0 ;; + *) return 1 ;; + esac +} + +cf_profile_gov() { + case "$1" in + quiet|powersave|balanced) echo powersave ;; + performance) echo performance ;; + *) return 1 ;; + esac +} + +cf_profile_epp() { + case "$1" in + quiet) echo power ;; + powersave) echo balance_power ;; + balanced) echo balance_performance ;; + performance) echo performance ;; + *) return 1 ;; + esac +} + +cf_profile_boost() { + case "$1" in + quiet|powersave) echo 0 ;; + balanced|performance) echo 1 ;; + *) return 1 ;; + esac +} + +cf_profile_max_pct() { + case "$1" in + quiet) echo 35 ;; + powersave) echo 60 ;; + balanced|performance) echo 100 ;; + *) return 1 ;; + esac +} + +cf_profile_label() { + case "$1" in + quiet) echo "Silenzioso" ;; + powersave) echo "Risparmio" ;; + balanced) echo "Bilanciato" ;; + performance) echo "Performance" ;; + custom) echo "Personalizzato" ;; + *) echo "$1" ;; + esac +} + +cf_profile_desc() { + case "$1" in + quiet) echo "EPP power, boost off, tetto 35% dello span" ;; + powersave) echo "EPP balance_power, boost off, tetto 60%" ;; + balanced) echo "EPP balance_performance, boost on, nessun tetto" ;; + performance) echo "governor performance, EPP performance, boost on" ;; + *) echo "" ;; + esac +} + +# cf_profile_max_khz +cf_profile_max_khz() { + _cfp=$(cf_profile_max_pct "$1") || return 1 + _cfl=$2 + _cfh=$3 + [ "$_cfh" -gt "$_cfl" ] || { echo "$_cfh"; return 0; } + # un profilo al 100% non deve avere tetto: nessun arrotondamento + [ "$_cfp" -ge 100 ] && { echo "$_cfh"; return 0; } + cf_round50 $(( _cfl + (_cfh - _cfl) * _cfp / 100 )) +} + +# Arrotonda a 50 MHz: valori leggibili e stabili fra una lettura e l'altra. +cf_round50() { + echo $(( ($1 + 25000) / 50000 * 50000 )) +} + +# cf_detect_profile +# Stampa il nome del profilo se lo stato coincide (tolleranza sul tetto) oppure "custom". +cf_detect_profile() { + _dg=$1 + _de=$2 + _db=$3 + _dmax=$4 + _dfloor=$5 + _dhwmax=$6 + _span=$(( _dhwmax - _dfloor )) + [ "$_span" -gt 0 ] || _span=1 + _tol=$(( _span / 40 )) # 2.5% dello span + [ "$_tol" -lt 80000 ] && _tol=80000 + for _dp in $(cf_profiles); do + [ "$_dg" = "$(cf_profile_gov "$_dp")" ] || continue + [ "$_db" = "$(cf_profile_boost "$_dp")" ] || continue + _dp_max=$(cf_profile_max_khz "$_dp" "$_dfloor" "$_dhwmax") + _diff=$(( _dmax - _dp_max )) + [ "$_diff" -lt 0 ] && _diff=$(( -_diff )) + [ "$_diff" -le "$_tol" ] || continue + # L'EPP può non essere scrivibile con governor "performance": in quel caso + # accettiamo il profilo anche se l'EPP letto non coincide. + [ "$_de" = "$(cf_profile_epp "$_dp")" ] && { echo "$_dp"; return 0; } + if [ "$_dg" = "performance" ] && [ "$_dp" = "performance" ]; then + echo "$_dp" + return 0 + fi + done + echo custom +} diff --git a/contents/ui/ChoicePill.qml b/contents/ui/ChoicePill.qml new file mode 100644 index 0000000..8645fa4 --- /dev/null +++ b/contents/ui/ChoicePill.qml @@ -0,0 +1,55 @@ +/* + * SPDX-FileCopyrightText: 2026 enne2 + * SPDX-License-Identifier: MIT + * + * Pillola selezionabile usata per governor ed EPP: alternativa compatta a una + * ComboBox, senza stato interno (attivo/inattivo derivano dalle proprietà). + */ + +import QtQuick +import org.kde.plasma.components 3.0 as PlasmaComponents +import org.kde.kirigami as Kirigami + +Rectangle { + id: pill + + property string text: "" + property bool active: false + property color accent: "#55c5c0" + signal clicked() + + implicitWidth: label.implicitWidth + 16 + implicitHeight: label.implicitHeight + 8 + radius: 4 + color: active + ? Qt.rgba(accent.r, accent.g, accent.b, 0.22) + : (pillMouse.containsMouse ? Qt.rgba(1, 1, 1, 0.10) : Qt.rgba(1, 1, 1, 0.05)) + border.width: 1 + border.color: active + ? Qt.rgba(accent.r, accent.g, accent.b, 0.8) + : Qt.rgba(1, 1, 1, 0.10) + opacity: enabled ? 1.0 : 0.5 + + Behavior on color { + ColorAnimation { duration: 120 } + } + + PlasmaComponents.Label { + id: label + anchors.centerIn: parent + text: pill.text + font.family: "monospace" + font.pointSize: 8 + font.bold: pill.active + color: pill.active ? pill.accent : Kirigami.Theme.textColor + opacity: pill.active ? 1.0 : 0.78 + } + + MouseArea { + id: pillMouse + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: pill.clicked() + } +} diff --git a/contents/ui/main.qml b/contents/ui/main.qml new file mode 100644 index 0000000..ee63f89 --- /dev/null +++ b/contents/ui/main.qml @@ -0,0 +1,1139 @@ +/* + * SPDX-FileCopyrightText: 2026 enne2 + * SPDX-License-Identifier: MIT + * + * CPU Frequency Control — plasmoide KDE Plasma 6 per governor, limiti di + * frequenza, EPP, boost e profili per singolo task. + * Backend: helper privilegiato /usr/local/libexec/enne2-cpufreq/cpufreq-helper + * eseguito via pkexec con azione polkit dedicata (org.enne2.cpufreq.set). + */ + +import QtQuick +import QtQuick.Layouts +import org.kde.plasma.plasmoid +import org.kde.plasma.core as PlasmaCore +import org.kde.plasma.components 3.0 as PlasmaComponents +import org.kde.plasma.plasma5support as P5Support +import org.kde.kirigami as Kirigami + +PlasmoidItem { + id: root + + // ------------------------------------------------------------------ percorsi + readonly property string scriptsDir: Qt.resolvedUrl("../scripts").toString().replace("file://", "") + readonly property string stateScript: scriptsDir + "/cpufreq-state.sh" + readonly property string taskScript: scriptsDir + "/enne2-cpufreq-task" + readonly property string helperPath: "/usr/local/libexec/enne2-cpufreq/cpufreq-helper" + + readonly property int updateMs: 2000 + + // ------------------------------------------------------------------- palette + readonly property color accentBalanced: "#55c5c0" + readonly property color accentQuiet: "#7aa2d6" + readonly property color accentSaving: "#8bbf6a" + readonly property color accentPerf: "#e0a34e" + readonly property color accentCustom: "#b08ccc" + readonly property color dim: "#8293a8" + readonly property color okColor: "#62c98b" + readonly property color warnColor: "#d9a84e" + readonly property color critColor: "#e5645f" + + readonly property var presetModel: [ + { key: "quiet", label: "Silenzioso", hint: "boost off · max 35%", color: accentQuiet }, + { key: "powersave", label: "Risparmio", hint: "boost off · max 60%", color: accentSaving }, + { key: "balanced", label: "Bilanciato", hint: "nessun tetto · boost on", color: accentBalanced }, + { key: "performance", label: "Performance", hint: "governor performance", color: accentPerf } + ] + + // --------------------------------------------------------------------- stato + property string driver: "" + property string cpuMode: "" + property string cpuModel: "" + property int policies: 0 + + property string governor: "" + property var governors: [] + property string epp: "" + property var epps: [] + property bool eppSupported: false + + property int boostState: -1 + property bool boostSupported: false + + property int hwMin: 0 + property int hwMax: 0 + property int floorKhz: 0 + property int minKhz: 0 + property int maxKhz: 0 + property int curKhz: 0 + property int curAvgKhz: 0 + property real tempC: NaN + property real load1: NaN + + property string profile: "custom" + property string profileLabel: "" + property string helperState: "unknown" // ok | missing + property string polkitState: "unknown" // ok | ask | missing + property string conflicts: "" + property bool baselinePresent: false + property var tasks: [] + property bool stateReady: false + property bool uiReady: false + + // ---------------------------------------------------------------- azioni UI + property bool busy: false + property string message: "" + property bool messageIsError: false + property bool addFormOpen: false + property string newTaskName: "" + property string newTaskCommand: "" + property int newTaskProfile: 2 + property string lastActionSource: "" + property int actionCounter: 0 + + // ------------------------------------------------------------- presentazione + Plasmoid.backgroundHints: PlasmaCore.Types.DefaultBackground + Plasmoid.icon: "cpu" + preferredRepresentation: fullRepresentation + toolTipMainText: "CPU Frequency Control" + toolTipTextFormat: Text.PlainText + toolTipSubText: { + if (!root.stateReady) { + return "Lettura dello stato in corso…" + } + var lines = [] + lines.push(root.ghz(root.curKhz) + " · governor " + (root.governor || "n/d")) + if (root.eppSupported) { + lines.push("EPP " + (root.epp || "n/d") + " · boost " + root.boostText()) + } + lines.push("Profilo: " + (root.profileLabel || root.profile)) + lines.push("Limiti " + root.ghzShort(root.minKhz) + " – " + root.ghzShort(root.maxKhz) + " GHz") + if (root.tasks.length > 0) { + lines.push("Task configurati: " + root.tasks.length) + } + return lines.join("\n") + } + + readonly property color profileColor: { + switch (root.profile) { + case "quiet": return accentQuiet + case "powersave": return accentSaving + case "balanced": return accentBalanced + case "performance": return accentPerf + default: return accentCustom + } + } + + // ---------------------------------------------------------------- formattazione + function ghz(khz) { + if (!khz || isNaN(khz) || khz <= 0) { + return "—" + } + return (khz / 1000000).toFixed(2) + " GHz" + } + + function ghzShort(khz) { + if (!khz || isNaN(khz) || khz <= 0) { + return "—" + } + return (khz / 1000000).toFixed(2) + } + + // Etichette compatte per le pillole EPP (il valore completo resta nel chip in alto) + function eppShort(name) { + switch (name) { + case "balance_performance": return "bal_perf" + case "balance_power": return "bal_power" + default: return name + } + } + + function boostText() { + if (!root.boostSupported || root.boostState < 0) { + return "n/d" + } + return root.boostState === 1 ? "on" : "off" + } + + function tempText() { + return isNaN(root.tempC) ? "n/d" : Math.round(root.tempC) + " °C" + } + + function tempColor() { + if (isNaN(root.tempC)) { + return root.dim + } + if (root.tempC >= 85) { + return root.critColor + } + if (root.tempC >= 70) { + return root.warnColor + } + return root.okColor + } + + // Un solo riquadro di avviso: il problema più grave in ordine di priorità. + function setupWarning() { + if (root.helperState !== "ok") { + return "Backend non installato: esegui ./install.sh --backend (helper in " + + root.helperPath + ")" + } + if (root.polkitState === "missing") { + return "Azione polkit assente: senza org.enne2.cpufreq.set le modifiche verranno rifiutate" + } + if (root.conflicts !== "") { + return "Servizio concorrente attivo (" + root.conflicts + + ") che gestisce la CPU: può sovrascrivere queste impostazioni" + } + return "" + } + + function setupWarningColor() { + if (root.helperState !== "ok" || root.polkitState === "missing") { + return root.critColor + } + return root.warnColor + } + + // ------------------------------------------------------------- lettura stato + P5Support.DataSource { + id: stateSource + engine: "executable" + interval: root.updateMs + connectedSources: [root.stateScript] + onNewData: function(sourceName, data) { + root.applyState(data ? String(data["stdout"] || "") : "") + } + } + + // Comandi una tantum: ogni invocazione usa un source univoco (contatore) + // perché il motore "executable" non riesegua lo stesso source già noto. + P5Support.DataSource { + id: actionSource + engine: "executable" + connectedSources: [] + onNewData: function(sourceName, data) { + root.finishAction(String(data["stdout"] || ""), String(data["stderr"] || ""), + Number(data["exit code"])) + actionSource.disconnectSource(sourceName) + root.refreshState() + } + } + + function applyState(output) { + var values = {} + var taskList = [] + String(output || "").split("\n").forEach(function(rawLine) { + if (rawLine.length === 0) { + return + } + if (rawLine.indexOf("task=") === 0) { + var parts = rawLine.substring(5).split("\t") + if (parts.length >= 3) { + try { + var task = JSON.parse(parts[2]) + task.running = parts[1] === "1" + taskList.push(task) + } catch (error) { + console.warn("enne2-cpufreq: task JSON non valido:", parts[2]) + } + } + return + } + var separator = rawLine.indexOf("=") + if (separator > 0) { + values[rawLine.substring(0, separator)] = rawLine.substring(separator + 1).trim() + } + }) + + if (values["driver"] !== undefined) { + driver = values["driver"] + } + if (values["mode"] !== undefined) { + cpuMode = values["mode"] + } + if (values["model"] !== undefined) { + cpuModel = values["model"] + } + policies = Number(values["policies"] || 0) + + governor = values["governor"] || "" + governors = (values["governors"] || "").split(" ").filter(function(item, index, array) { + return item.length > 0 && array.indexOf(item) === index + }) + epp = values["epp"] || "" + epps = (values["epps"] || "").split(" ").filter(function(item, index, array) { + return item.length > 0 && array.indexOf(item) === index + }) + eppSupported = values["epp_supported"] === "1" + + boostSupported = values["boost_supported"] === "1" + boostState = boostSupported ? Number(values["boost"] || -1) : -1 + + hwMin = Number(values["hw_min_khz"] || 0) + hwMax = Number(values["hw_max_khz"] || 0) + floorKhz = Number(values["floor_khz"] || 0) + minKhz = Number(values["min_khz"] || 0) + maxKhz = Number(values["max_khz"] || 0) + curKhz = Number(values["cur_khz"] || 0) + curAvgKhz = Number(values["cur_avg_khz"] || 0) + + var temp = parseFloat(values["temp_mdegc"]) + tempC = isNaN(temp) ? NaN : temp / 1000 + var load = parseFloat(values["load1"]) + load1 = isNaN(load) ? NaN : load + + profile = values["profile"] || "custom" + profileLabel = values["profile_label"] || "" + helperState = values["helper"] || "unknown" + polkitState = values["polkit"] || "unknown" + conflicts = values["conflicts"] || "" + baselinePresent = values["baseline"] === "present" + tasks = taskList + stateReady = values["error"] === undefined + + if (values["error"] !== undefined && message === "") { + message = values["error"] + messageIsError = true + } + + syncControls() + } + + function refreshState() { + stateSource.disconnectSource(root.stateScript) + stateSource.connectSource(root.stateScript) + } + + // ------------------------------------------------------------------ azioni + function privileged(args) { + return "timeout 90 /usr/bin/pkexec " + root.helperPath + " " + args + } + + function runAction(command) { + if (root.busy) { + return + } + root.busy = true + if (root.lastActionSource !== "") { + actionSource.disconnectSource(root.lastActionSource) + } + root.actionCounter += 1 + // argomento extra ignorato dagli script: rende univoco il source + var source = command + " " + root.actionCounter + root.lastActionSource = source + actionSource.connectSource(source) + } + + function finishAction(output, stderr, exitCode) { + root.busy = false + var errorText = "" + var warningText = "" + output.split("\n").forEach(function(line) { + if (line.indexOf("error=") === 0) { + errorText = line.substring(6) + } else if (line.indexOf("warning=") === 0) { + warningText = line.substring(8) + } + }) + if (errorText !== "") { + root.setMessage(errorText, true) + return + } + if (exitCode !== 0 && exitCode !== undefined && exitCode !== 0) { + var detail = stderr.trim() + if (detail === "") { + detail = "exit code " + exitCode + if (exitCode === 124) { + detail = "timeout in attesa di polkit" + } else if (exitCode === 126) { + detail = "autorizzazione negata da polkit" + } else if (exitCode === 127) { + detail = "helper non trovato: eseguire install.sh" + } + } + root.setMessage(detail, true) + return + } + if (warningText !== "") { + root.setMessage(warningText, false) + } else if (output.indexOf("ok=1") !== -1) { + root.setMessage("Applicato.", false) + } + } + + function setMessage(text, isError) { + root.message = text + root.messageIsError = isError + messageTimer.restart() + } + + // Sincronizza i controlli senza rompere i binding durante l'interazione. + // uiReady evita ReferenceError quando la rappresentazione piena non è ancora + // istanziata (avvio del widget, popup del pannello chiuso): applyState gira + // ogni 2 s e senza guardia interrompeva la sincronizzazione dei controlli. + function syncControls() { + if (!root.uiReady) { + return + } + try { + if (!minSlider.pressed) { + minSlider.value = root.minKhz + } + if (!maxSlider.pressed) { + maxSlider.value = root.maxKhz + } + } catch (error) { + // la rappresentazione piena non è istanziata in questo momento + // (popup chiuso, widget in pannello): ReferenceError atteso + root.uiReady = false + } + } + + function roundKhz(value) { + return Math.max(root.hwMin, Math.min(root.hwMax, Math.round(value / 10000) * 10000)) + } + + // "which" è il cursore rilasciato: serve solo a decidere quale estremo + // spostare se l'utente ha trascinato min oltre max (o viceversa). + function applyLimits(which) { + var lo = roundKhz(minSlider.value) + var hi = roundKhz(maxSlider.value) + if (lo > hi) { + if (which === "min") { + hi = lo + } else { + lo = hi + } + } + runAction(privileged("set-limits " + lo + " " + hi)) + } + + function hexEncode(text) { + var input = String(text) + var output = "" + function byte(value) { + return (value < 16 ? "0" : "") + value.toString(16) + } + for (var i = 0; i < input.length; i++) { + var code = input.charCodeAt(i) + if (code < 0x80) { + output += byte(code) + } else if (code < 0x800) { + output += byte(0xc0 | (code >> 6)) + byte(0x80 | (code & 0x3f)) + } else if (code >= 0xd800 && code <= 0xdbff && i + 1 < input.length) { + var low = input.charCodeAt(i + 1) + var point = 0x10000 + ((code - 0xd800) << 10) + (low - 0xdc00) + i++ + output += byte(0xf0 | (point >> 18)) + byte(0x80 | ((point >> 12) & 0x3f)) + + byte(0x80 | ((point >> 6) & 0x3f)) + byte(0x80 | (point & 0x3f)) + } else { + output += byte(0xe0 | (code >> 12)) + byte(0x80 | ((code >> 6) & 0x3f)) + + byte(0x80 | (code & 0x3f)) + } + } + return output + } + + function addTask() { + var name = root.newTaskName.trim() + var command = root.newTaskCommand.trim() + if (name === "") { + root.setMessage("Il nome del task è obbligatorio.", true) + return + } + if (command === "") { + root.setMessage("Il comando del task è obbligatorio.", true) + return + } + var profileKey = root.presetModel[root.newTaskProfile].key + runAction(root.taskScript + " add-hex " + hexEncode(name) + " " + + hexEncode(profileKey) + " " + hexEncode(command)) + root.addFormOpen = false + root.newTaskName = "" + root.newTaskCommand = "" + } + + Timer { + id: messageTimer + interval: 6000 + repeat: false + onTriggered: root.message = "" + } + + // ------------------------------------------------- rappresentazione compatta + compactRepresentation: MouseArea { + id: compact + implicitWidth: compactRow.implicitWidth + Kirigami.Units.smallSpacing * 2 + implicitHeight: compactRow.implicitHeight + Kirigami.Units.smallSpacing + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: root.expanded = !root.expanded + + RowLayout { + id: compactRow + anchors.centerIn: parent + spacing: 4 + + Kirigami.Icon { + source: "cpu" + implicitWidth: Kirigami.Units.iconSizes.smallMedium + implicitHeight: Kirigami.Units.iconSizes.smallMedium + color: root.profileColor + } + PlasmaComponents.Label { + text: root.ghzShort(root.curKhz) + font.family: "monospace" + font.pointSize: 8 + color: Kirigami.Theme.textColor + } + Rectangle { + visible: root.boostState === 0 && root.boostSupported + implicitWidth: boostLabel.implicitWidth + 6 + implicitHeight: boostLabel.implicitHeight + 2 + radius: 3 + color: Qt.rgba(root.warnColor.r, root.warnColor.g, root.warnColor.b, 0.22) + PlasmaComponents.Label { + id: boostLabel + anchors.centerIn: parent + text: "no boost" + font.pointSize: 6.5 + color: root.warnColor + } + } + } + } + + // ------------------------------------------------------- rappresentazione piena + fullRepresentation: Flickable { + id: fullItem + implicitWidth: Kirigami.Units.gridUnit * 23 + implicitHeight: Kirigami.Units.gridUnit * 38 + Component.onCompleted: { + root.uiReady = true + root.syncControls() + } + Component.onDestruction: root.uiReady = false + contentWidth: width + contentHeight: content.implicitHeight + Kirigami.Units.smallSpacing * 2 + clip: true + boundsBehavior: Flickable.StopAtBounds + interactive: contentHeight > height + flickableDirection: Flickable.VerticalFlick + + ColumnLayout { + id: content + x: Kirigami.Units.smallSpacing + y: Kirigami.Units.smallSpacing + width: fullItem.width - Kirigami.Units.smallSpacing * 2 + spacing: 4 + + // ---------------------------------------------------------- intestazione + RowLayout { + Layout.fillWidth: true + spacing: 6 + + Kirigami.Icon { + source: "cpu" + implicitWidth: Kirigami.Units.iconSizes.small + implicitHeight: Kirigami.Units.iconSizes.small + color: root.profileColor + } + PlasmaComponents.Label { + text: "CPU FREQ" + font.family: "monospace" + font.bold: true + font.pointSize: 8 + color: root.profileColor + } + PlasmaComponents.Label { + Layout.fillWidth: true + text: root.driver + (root.cpuMode !== "" && root.cpuMode !== "n/a" ? " · " + root.cpuMode : "") + font.family: "monospace" + font.pointSize: 7.5 + color: root.dim + elide: Text.ElideRight + horizontalAlignment: Text.AlignRight + } + } + + // ------------------------------------------------------- frequenza e temperatura + RowLayout { + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + ColumnLayout { + spacing: 0 + PlasmaComponents.Label { + text: root.ghz(root.curKhz) + font.family: "monospace" + font.bold: true + font.pointSize: 16 + color: Kirigami.Theme.textColor + } + PlasmaComponents.Label { + text: "media " + root.ghz(root.curAvgKhz) + " · " + root.policies + " policy" + font.family: "monospace" + font.pointSize: 7 + color: root.dim + } + } + + Item { Layout.fillWidth: true } + + ColumnLayout { + spacing: 0 + PlasmaComponents.Label { + Layout.alignment: Qt.AlignRight + text: root.tempText() + font.family: "monospace" + font.bold: true + font.pointSize: 13 + color: root.tempColor() + } + PlasmaComponents.Label { + Layout.alignment: Qt.AlignRight + text: isNaN(root.load1) ? "load n/d" : "load " + root.load1.toFixed(2) + font.family: "monospace" + font.pointSize: 7.5 + color: root.dim + } + } + } + + // Barra: intervallo hardware, finestra consentita (min–max), cursore corrente + Item { + id: freqBar + Layout.fillWidth: true + Layout.preferredHeight: 16 + + readonly property real rangeMin: root.hwMin > 0 ? root.hwMin : 1 + readonly property real rangeMax: root.hwMax > rangeMin ? root.hwMax : rangeMin + 1 + + function positionOf(khz) { + var ratio = (khz - rangeMin) / (rangeMax - rangeMin) + return Math.max(0, Math.min(1, ratio)) + } + + Rectangle { + anchors.fill: parent + radius: 3 + color: Qt.rgba(1, 1, 1, 0.07) + } + + Rectangle { + id: allowedWindow + anchors.verticalCenter: parent.verticalCenter + height: parent.height - 6 + radius: 2 + x: freqBar.width * freqBar.positionOf(root.minKhz) + width: Math.max(2, freqBar.width * (freqBar.positionOf(root.maxKhz) + - freqBar.positionOf(root.minKhz))) + color: Qt.rgba(root.profileColor.r, root.profileColor.g, root.profileColor.b, 0.30) + border.width: 1 + border.color: Qt.rgba(root.profileColor.r, root.profileColor.g, root.profileColor.b, 0.55) + } + + Rectangle { + width: 3 + height: parent.height + radius: 1 + color: Kirigami.Theme.textColor + x: Math.min(freqBar.width - width, + Math.max(0, freqBar.width * freqBar.positionOf(root.curKhz) - width / 2)) + } + } + + // ------------------------------------------------------------ chip di stato + Flow { + Layout.fillWidth: true + Layout.preferredHeight: childrenRect.height + spacing: 4 + + Rectangle { + implicitWidth: govLabel.implicitWidth + 10 + implicitHeight: govLabel.implicitHeight + 4 + radius: 4 + color: Qt.rgba(0, 0, 0, 0.28) + border.width: 1 + border.color: Qt.rgba(1, 1, 1, 0.10) + PlasmaComponents.Label { + id: govLabel + anchors.centerIn: parent + text: "governor " + (root.governor || "n/d") + font.family: "monospace" + font.pointSize: 7.5 + color: Kirigami.Theme.textColor + opacity: 0.8 + } + } + + Rectangle { + visible: root.eppSupported + implicitWidth: eppLabel.implicitWidth + 10 + implicitHeight: eppLabel.implicitHeight + 4 + radius: 4 + color: Qt.rgba(0, 0, 0, 0.28) + border.width: 1 + border.color: Qt.rgba(1, 1, 1, 0.10) + PlasmaComponents.Label { + id: eppLabel + anchors.centerIn: parent + text: "epp " + (root.epp || "n/d") + font.family: "monospace" + font.pointSize: 7.5 + color: Kirigami.Theme.textColor + opacity: 0.8 + } + } + + Rectangle { + visible: root.boostSupported + implicitWidth: boostChip.implicitWidth + 10 + implicitHeight: boostChip.implicitHeight + 4 + radius: 4 + color: root.boostState === 1 + ? Qt.rgba(root.okColor.r, root.okColor.g, root.okColor.b, 0.14) + : Qt.rgba(root.warnColor.r, root.warnColor.g, root.warnColor.b, 0.16) + border.width: 1 + border.color: root.boostState === 1 + ? Qt.rgba(root.okColor.r, root.okColor.g, root.okColor.b, 0.4) + : Qt.rgba(root.warnColor.r, root.warnColor.g, root.warnColor.b, 0.4) + PlasmaComponents.Label { + id: boostChip + anchors.centerIn: parent + text: "boost " + root.boostText() + font.family: "monospace" + font.pointSize: 7.5 + color: root.boostState === 1 ? root.okColor : root.warnColor + } + } + + Rectangle { + visible: root.baselinePresent + implicitWidth: baseLabel.implicitWidth + 10 + implicitHeight: baseLabel.implicitHeight + 4 + radius: 4 + color: Qt.rgba(root.accentPerf.r, root.accentPerf.g, root.accentPerf.b, 0.14) + border.width: 1 + border.color: Qt.rgba(root.accentPerf.r, root.accentPerf.g, root.accentPerf.b, 0.4) + PlasmaComponents.Label { + id: baseLabel + anchors.centerIn: parent + text: "baseline salvata" + font.family: "monospace" + font.pointSize: 7.5 + color: root.accentPerf + } + } + } + + // ----------------------------------------------- avvisi di configurazione + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: setupLabel.implicitHeight + 6 + visible: root.setupWarning() !== "" + radius: 4 + color: Qt.rgba(root.setupWarningColor().r, root.setupWarningColor().g, + root.setupWarningColor().b, 0.14) + border.width: 1 + border.color: Qt.rgba(root.setupWarningColor().r, root.setupWarningColor().g, + root.setupWarningColor().b, 0.45) + PlasmaComponents.Label { + id: setupLabel + anchors.centerIn: parent + width: parent.width - 10 + wrapMode: Text.WordWrap + maximumLineCount: 2 + elide: Text.ElideRight + horizontalAlignment: Text.AlignHCenter + font.pointSize: 7 + color: root.setupWarningColor() + text: root.setupWarning() + } + } + + // --------------------------------------------------------------- profili + PlasmaComponents.Label { + text: "PROFILO" + font.family: "monospace" + font.pointSize: 7.5 + font.bold: true + color: root.dim + } + + Grid { + Layout.fillWidth: true + columns: 2 + spacing: 4 + + Repeater { + model: root.presetModel + + delegate: Rectangle { + id: presetButton + required property var modelData + + readonly property bool active: root.profile === modelData.key + + width: (parent.width - 4) / 2 + height: 26 + radius: 5 + color: active + ? Qt.rgba(modelData.color.r, modelData.color.g, modelData.color.b, 0.22) + : (presetHover.containsMouse ? Qt.rgba(1, 1, 1, 0.10) : Qt.rgba(1, 1, 1, 0.05)) + border.width: 1 + border.color: active + ? Qt.rgba(modelData.color.r, modelData.color.g, modelData.color.b, 0.8) + : Qt.rgba(1, 1, 1, 0.10) + opacity: root.busy ? 0.6 : 1.0 + + Behavior on color { ColorAnimation { duration: 120 } } + + ColumnLayout { + anchors.centerIn: parent + spacing: -2 + PlasmaComponents.Label { + Layout.alignment: Qt.AlignHCenter + text: presetButton.modelData.label + font.family: "monospace" + font.pointSize: 8.5 + font.bold: presetButton.active + color: presetButton.active ? presetButton.modelData.color : Kirigami.Theme.textColor + } + PlasmaComponents.Label { + Layout.alignment: Qt.AlignHCenter + text: presetButton.modelData.hint + font.family: "monospace" + font.pointSize: 6.5 + color: root.dim + } + } + + MouseArea { + id: presetHover + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: root.runAction(root.privileged("apply " + presetButton.modelData.key)) + } + } + } + } + + // -------------------------------------------------------------- governor + PlasmaComponents.Label { + text: "GOVERNOR" + font.family: "monospace" + font.pointSize: 7.5 + font.bold: true + color: root.dim + } + + Flow { + Layout.fillWidth: true + Layout.preferredHeight: childrenRect.height + spacing: 4 + + Repeater { + model: root.governors + + delegate: ChoicePill { + required property string modelData + text: modelData + active: root.governor === modelData + accent: root.profileColor + enabled: !root.busy + onClicked: root.runAction(root.privileged("set-governor " + modelData)) + } + } + } + + // ------------------------------------------------------------------- EPP + PlasmaComponents.Label { + text: "EPP" + font.family: "monospace" + font.pointSize: 7 + font.bold: true + color: root.dim + } + + Flow { + Layout.fillWidth: true + Layout.preferredHeight: childrenRect.height + visible: root.eppSupported + spacing: 4 + + Repeater { + model: root.epps + + delegate: ChoicePill { + required property string modelData + text: root.eppShort(modelData) + active: root.epp === modelData + accent: root.profileColor + enabled: !root.busy + onClicked: root.runAction(root.privileged("set-epp " + modelData)) + } + } + } + + // ---------------------------------------------------------------- limiti + RowLayout { + Layout.fillWidth: true + spacing: 6 + + PlasmaComponents.Label { + text: "LIMITI" + font.family: "monospace" + font.pointSize: 7.5 + font.bold: true + color: root.dim + } + Item { Layout.fillWidth: true } + PlasmaComponents.Label { + text: root.ghz(root.minKhz) + " – " + root.ghz(root.maxKhz) + font.family: "monospace" + font.pointSize: 7.5 + color: root.profileColor + } + PlasmaComponents.Label { + text: "hw " + root.ghzShort(root.hwMin) + "–" + root.ghzShort(root.hwMax) + font.family: "monospace" + font.pointSize: 7 + color: root.dim + } + } + + RowLayout { + Layout.fillWidth: true + spacing: 6 + + PlasmaComponents.Label { + text: "min" + font.family: "monospace" + font.pointSize: 7.5 + color: root.dim + Layout.preferredWidth: 26 + } + PlasmaComponents.Slider { + id: minSlider + Layout.fillWidth: true + from: root.hwMin + to: root.hwMax + enabled: root.hwMax > root.hwMin && !root.busy + onPressedChanged: if (!pressed) root.applyLimits("min") + } + PlasmaComponents.Label { + text: root.ghzShort(minSlider.pressed ? minSlider.value : root.minKhz) + font.family: "monospace" + font.pointSize: 7.5 + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignRight + Layout.preferredWidth: 32 + } + } + + RowLayout { + Layout.fillWidth: true + spacing: 6 + + PlasmaComponents.Label { + text: "max" + font.family: "monospace" + font.pointSize: 7.5 + color: root.dim + Layout.preferredWidth: 26 + } + PlasmaComponents.Slider { + id: maxSlider + Layout.fillWidth: true + from: root.hwMin + to: root.hwMax + enabled: root.hwMax > root.hwMin && !root.busy + onPressedChanged: if (!pressed) root.applyLimits("max") + } + PlasmaComponents.Label { + text: root.ghzShort(maxSlider.pressed ? maxSlider.value : root.maxKhz) + font.family: "monospace" + font.pointSize: 7.5 + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignRight + Layout.preferredWidth: 32 + } + } + + // ----------------------------------------------------------------- boost + RowLayout { + Layout.fillWidth: true + spacing: 4 + + PlasmaComponents.Label { + Layout.fillWidth: true + text: "BOOST / TURBO" + font.family: "monospace" + font.pointSize: 7.5 + font.bold: true + color: root.dim + } + ChoicePill { + text: "on" + active: root.boostState === 1 + accent: root.okColor + enabled: root.boostSupported && !root.busy && root.boostState !== 1 + onClicked: root.runAction(root.privileged("set-boost 1")) + } + ChoicePill { + text: "off" + active: root.boostState === 0 + accent: root.warnColor + enabled: root.boostSupported && !root.busy && root.boostState !== 0 + onClicked: root.runAction(root.privileged("set-boost 0")) + } + } + + // ------------------------------------------------------------------ task + RowLayout { + Layout.fillWidth: true + spacing: 6 + + PlasmaComponents.Label { + text: "TASK CON PROFILO DEDICATO" + font.family: "monospace" + font.pointSize: 7.5 + font.bold: true + color: root.dim + } + Item { Layout.fillWidth: true } + PlasmaComponents.ToolButton { + icon.name: root.addFormOpen ? "dialog-cancel" : "list-add" + text: root.addFormOpen ? "Annulla" : "Nuovo" + display: PlasmaComponents.ToolButton.TextBesideIcon + onClicked: root.addFormOpen = !root.addFormOpen + } + } + + Repeater { + model: root.tasks + + delegate: Rectangle { + id: taskRow + required property var modelData + Layout.fillWidth: true + implicitHeight: 26 + radius: 5 + color: modelData.running + ? Qt.rgba(root.accentPerf.r, root.accentPerf.g, root.accentPerf.b, 0.16) + : Qt.rgba(1, 1, 1, 0.05) + + RowLayout { + anchors.fill: parent + anchors.leftMargin: 6 + anchors.rightMargin: 4 + spacing: 4 + + Rectangle { + Layout.alignment: Qt.AlignVCenter + width: 6 + height: 6 + radius: 3 + color: taskRow.modelData.running ? root.okColor : root.dim + opacity: taskRow.modelData.running ? 1 : 0.5 + } + PlasmaComponents.Label { + Layout.fillWidth: true + text: taskRow.modelData.name + elide: Text.ElideRight + font.pointSize: 8 + color: Kirigami.Theme.textColor + } + PlasmaComponents.Label { + text: taskRow.modelData.profile + font.family: "monospace" + font.pointSize: 7 + color: root.dim + } + PlasmaComponents.ToolButton { + implicitWidth: 22 + implicitHeight: 22 + icon.name: taskRow.modelData.running ? "media-playback-stop" : "media-playback-start" + enabled: !root.busy + onClicked: { + var verb = taskRow.modelData.running ? " stop " : " run " + root.runAction(root.taskScript + verb + taskRow.modelData.slug) + } + } + PlasmaComponents.ToolButton { + implicitWidth: 22 + implicitHeight: 22 + icon.name: "edit-delete" + enabled: !root.busy && !taskRow.modelData.running + onClicked: root.runAction(root.taskScript + " remove " + taskRow.modelData.slug) + } + } + } + } + + // ------------------------------------------------------- form nuovo task + ColumnLayout { + Layout.fillWidth: true + spacing: 4 + visible: root.addFormOpen + + PlasmaComponents.TextField { + Layout.fillWidth: true + placeholderText: "Nome del task (es. Render Blender)" + text: root.newTaskName + onTextChanged: root.newTaskName = text + } + PlasmaComponents.TextField { + Layout.fillWidth: true + placeholderText: "Comando (es. blender -b scena.blend -f 1)" + text: root.newTaskCommand + onTextChanged: root.newTaskCommand = text + } + PlasmaComponents.ComboBox { + Layout.fillWidth: true + model: root.presetModel + textRole: "label" + currentIndex: root.newTaskProfile + onActivated: root.newTaskProfile = currentIndex + } + RowLayout { + Layout.fillWidth: true + spacing: 4 + Item { Layout.fillWidth: true } + PlasmaComponents.Button { + text: "Aggiungi" + icon.name: "list-add" + enabled: root.newTaskName.trim() !== "" && root.newTaskCommand.trim() !== "" + onClicked: root.addTask() + } + } + } + + // ---------------------------------------------------------------- footer + RowLayout { + Layout.fillWidth: true + spacing: 4 + + PlasmaComponents.Label { + Layout.fillWidth: true + text: root.message !== "" + ? root.message + : (root.busy ? "Applico…" : "Pronto") + color: root.messageIsError ? root.critColor : root.dim + font.pointSize: 7.5 + elide: Text.ElideRight + } + PlasmaComponents.ToolButton { + icon.name: "view-refresh" + text: "Reset" + display: PlasmaComponents.ToolButton.TextBesideIcon + enabled: !root.busy + onClicked: root.runAction(root.privileged("reset")) + } + } + } + } +} diff --git a/docs/widget.png b/docs/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d1a7e76167f6b8b8aba923e2b21de0ee556d7a GIT binary patch literal 230505 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 z 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 M07*qoM6N<$f<{9 literal 0 HcmV?d00001 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..94b6a71 --- /dev/null +++ b/install.sh @@ -0,0 +1,147 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT +# enne2-cpufreq — installazione. +# +# ./install.sh widget (utente) + backend privilegiato (sudo) +# ./install.sh --widget solo il plasmoide, come utente +# ./install.sh --backend solo helper + polkit, come root +# ./install.sh --no-polkit-rule +# backend senza la regola "nessun prompt": +# ogni modifica chiederà la password +# ./install.sh --dry-run mostra cosa verrebbe fatto +set -u + +PKG_DIR=$(cd "$(dirname "$0")" && pwd) +ID=org.enne2.cpufreq +LIBDIR=/usr/local/libexec/enne2-cpufreq +POLICY_DST=/usr/share/polkit-1/actions/org.enne2.cpufreq.set.policy +RULE_DST=/etc/polkit-1/rules.d/50-org.enne2.cpufreq.rules +STATEDIR=/var/lib/enne2-cpufreq + +MODE=all +WITH_RULE=1 +DRY=0 + +for arg in "$@"; do + case "$arg" in + --widget) MODE=widget ;; + --backend) MODE=backend ;; + --all) MODE=all ;; + --no-polkit-rule) WITH_RULE=0 ;; + --dry-run|-n) DRY=1 ;; + -h|--help) + sed -n 's/^# \{0,1\}//p' "$0" | sed -n '1,20p' + exit 0 + ;; + *) printf 'opzione sconosciuta: %s\n' "$arg" >&2; exit 2 ;; + esac +done + +say() { printf '%s\n' "$*"; } +run() { + if [ "$DRY" -eq 1 ]; then + printf ' [dry-run] %s\n' "$*" + else + "$@" + fi +} + +have_widget() { + kpackagetool6 --type Plasma/Applet --show "$ID" >/dev/null 2>&1 +} + +install_widget() { + command -v kpackagetool6 >/dev/null 2>&1 || { + say "ERRORE: kpackagetool6 non trovato (pacchetto kpackagetool6/kf6-kpackage)." + return 1 + } + if [ "$DRY" -eq 1 ]; then + say "[dry-run] kpackagetool6 --type Plasma/Applet --install|--upgrade $PKG_DIR" + elif have_widget; then + say "Aggiorno il plasmoide $ID…" + kpackagetool6 --type Plasma/Applet --upgrade "$PKG_DIR" || return 1 + else + say "Installo il plasmoide $ID…" + kpackagetool6 --type Plasma/Applet --install "$PKG_DIR" || return 1 + fi + + WIDGET_DIR=$HOME/.local/share/plasma/plasmoids/$ID + if [ "$DRY" -eq 0 ] && [ -d "$WIDGET_DIR/contents/scripts" ]; then + chmod 0755 "$WIDGET_DIR"/contents/scripts/*.sh \ + "$WIDGET_DIR"/contents/scripts/enne2-cpufreq-task 2>/dev/null + fi + + # comodità da terminale: stesso launcher del widget + if [ "$DRY" -eq 0 ] && [ -d "$HOME/.local/bin" ]; then + ln -sfn "$WIDGET_DIR/contents/scripts/enne2-cpufreq-task" \ + "$HOME/.local/bin/enne2-cpufreq-task" + say "Comando utente: ~/.local/bin/enne2-cpufreq-task (list|add|run|stop)" + fi + return 0 +} + +install_backend() { + if [ "$(id -u)" -ne 0 ]; then + say "ERRORE: la parte privilegiata richiede root (usare sudo)." + return 1 + fi + say "Backend privilegiato in $LIBDIR" + run install -d -m 0755 -o root -g root "$LIBDIR" + run install -d -m 0755 -o root -g root "$STATEDIR" + run install -m 0755 -o root -g root "$PKG_DIR/bin/cpufreq-helper" "$LIBDIR/cpufreq-helper" + run install -m 0644 -o root -g root "$PKG_DIR/contents/scripts/profiles.sh" "$LIBDIR/profiles.sh" + + say "Azione polkit: $POLICY_DST" + run install -d -m 0755 /usr/share/polkit-1/actions + run install -m 0644 -o root -g root \ + "$PKG_DIR/polkit/org.enne2.cpufreq.set.policy" "$POLICY_DST" + + if [ "$WITH_RULE" -eq 1 ]; then + say "Regola polkit senza prompt (gruppo wheel, sessione attiva): $RULE_DST" + run install -d -m 0755 /etc/polkit-1/rules.d + run install -m 0644 -o root -g root \ + "$PKG_DIR/polkit/50-org.enne2.cpufreq.rules" "$RULE_DST" + else + say "Regola senza prompt NON installata: verrà chiesta la password a ogni modifica." + run rm -f "$RULE_DST" + fi + + # polkitd sorveglia le directory delle regole, il reload è solo una sicurezza + if [ "$DRY" -eq 0 ]; then + systemctl try-reload-or-restart polkit >/dev/null 2>&1 || true + fi + + say "" + say "Verifica:" + if [ "$DRY" -eq 0 ]; then + "$LIBDIR/cpufreq-helper" status | sed 's/^/ /' + fi + return 0 +} + +case "$MODE" in + widget) + install_widget + ;; + backend) + install_backend + ;; + all) + install_widget || exit 1 + say "" + if [ "$(id -u)" -eq 0 ]; then + install_backend || exit 1 + else + say "Parte privilegiata: sudo $0 --backend $([ "$WITH_RULE" -eq 0 ] && echo --no-polkit-rule)" + if [ "$DRY" -eq 1 ]; then + sudo -n true >/dev/null 2>&1 && sudo "$0" --backend $([ "$WITH_RULE" -eq 0 ] && echo --no-polkit-rule) || say "[dry-run] sudo richiesto" + else + sudo "$0" --backend $([ "$WITH_RULE" -eq 0 ] && echo --no-polkit-rule) || exit 1 + fi + fi + ;; +esac + +say "" +say "Fatto. Aggiungi il widget dal desktop (Aggiungi widget → «CPU Frequency Control»)" +say "oppure via script: desktops()[0].addWidget(\"$ID\")" diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..eecd38f --- /dev/null +++ b/metadata.json @@ -0,0 +1,19 @@ +{ + "KPackageStructure": "Plasma/Applet", + "KPlugin": { + "Id": "org.enne2.cpufreq", + "Name": "CPU Frequency Control", + "Description": "Controlla governor, limiti di frequenza (min/max), EPP e boost della CPU, applica profili di risparmio o performance e lancia task con un profilo dedicato, ripristinando lo stato precedente alla fine. Backend: helper privilegiato via pkexec + azione polkit org.enne2.cpufreq.set.", + "Icon": "cpu", + "Version": "1.0", + "License": "MIT", + "Authors": [ + { + "Name": "enne2" + } + ], + "Category": "System Information", + "Website": "https://git.enne2.net/enne2/kde-cpufreq-dashboard" + }, + "X-Plasma-API-Minimum-Version": "6.0" +} diff --git a/polkit/50-org.enne2.cpufreq.rules b/polkit/50-org.enne2.cpufreq.rules new file mode 100644 index 0000000..883f202 --- /dev/null +++ b/polkit/50-org.enne2.cpufreq.rules @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: MIT + * + * enne2-cpufreq — consenso senza prompt per l'helper del plasmoide. + * + * Il permesso riguarda UNA sola azione (org.enne2.cpufreq.set) e quindi un solo + * programma: /usr/local/libexec/enne2-cpufreq/cpufreq-helper, con gli argomenti + * validati al suo interno. Condizioni: utente locale, sessione attiva, gruppo + * wheel. Senza questa regola la .policy chiede la password a ogni modifica + * (allow_active=auth_admin_keep): basta eliminare questo file per tornare al + * comportamento con prompt. + */ +polkit.addRule(function (action, subject) { + if (action.id !== "org.enne2.cpufreq.set") { + return; + } + if (!subject.local || !subject.active) { + return; + } + if (subject.isInGroup("wheel")) { + return polkit.Result.YES; + } +}); diff --git a/polkit/org.enne2.cpufreq.set.policy b/polkit/org.enne2.cpufreq.set.policy new file mode 100644 index 0000000..58a6c36 --- /dev/null +++ b/polkit/org.enne2.cpufreq.set.policy @@ -0,0 +1,28 @@ + + + + + enne2 + https://git.enne2.net/enne2/kde-cpufreq-dashboard + + + Configurare governor, limiti di frequenza e boost della CPU + Per modificare governor, limiti di frequenza, EPP o boost della CPU è necessaria l'autorizzazione di amministratore. + cpu + + no + no + auth_admin_keep + + /usr/local/libexec/enne2-cpufreq/cpufreq-helper + + diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..daf0453 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT +# enne2-cpufreq — disinstallazione. +# ./uninstall.sh rimuove widget (utente) e backend (sudo) +# ./uninstall.sh --widget solo il plasmoide +# ./uninstall.sh --backend solo helper/polkit/stato (root) +# I task configurati (~/.config/enne2-cpufreq) NON vengono cancellati. +set -u + +PKG_DIR=$(cd "$(dirname "$0")" && pwd) +ID=org.enne2.cpufreq +LIBDIR=/usr/local/libexec/enne2-cpufreq +POLICY_DST=/usr/share/polkit-1/actions/org.enne2.cpufreq.set.policy +RULE_DST=/etc/polkit-1/rules.d/50-org.enne2.cpufreq.rules +STATEDIR=/var/lib/enne2-cpufreq + +MODE=all +for arg in "$@"; do + case "$arg" in + --widget) MODE=widget ;; + --backend) MODE=backend ;; + --all) MODE=all ;; + -h|--help) sed -n 's/^# \{0,1\}//p' "$0" | sed -n '1,10p'; exit 0 ;; + *) printf 'opzione sconosciuta: %s\n' "$arg" >&2; exit 2 ;; + esac +done + +remove_widget() { + if kpackagetool6 --type Plasma/Applet --show "$ID" >/dev/null 2>&1; then + printf 'Rimuovo il plasmoide %s…\n' "$ID" + kpackagetool6 --type Plasma/Applet --remove "$ID" || return 1 + else + printf 'Plasmoide %s non installato.\n' "$ID" + fi + [ -L "$HOME/.local/bin/enne2-cpufreq-task" ] && rm -f "$HOME/.local/bin/enne2-cpufreq-task" + return 0 +} + +remove_backend() { + [ "$(id -u)" -eq 0 ] || { printf 'ERRORE: richiede root.\n' >&2; return 1; } + # ripristina lo stato hardware prima di togliere l'helper + if [ -x "$LIBDIR/cpufreq-helper" ]; then + "$LIBDIR/cpufreq-helper" task-end --all >/dev/null 2>&1 + fi + rm -f "$POLICY_DST" "$RULE_DST" + rm -rf "$LIBDIR" + rm -rf "$STATEDIR" + systemctl try-reload-or-restart polkit >/dev/null 2>&1 || true + printf 'Backend rimosso.\n' + return 0 +} + +case "$MODE" in + widget) remove_widget ;; + backend) remove_backend ;; + all) + remove_widget + if [ "$(id -u)" -eq 0 ]; then + remove_backend + else + sudo "$0" --backend + fi + ;; +esac