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.
This commit is contained in:
enne2
2026-10-25 20:42:52 +01:00
commit d4902b0b72
15 changed files with 2674 additions and 0 deletions
Executable
+64
View File
@@ -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