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
+55
View File
@@ -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()
}
}
+1139
View File
File diff suppressed because it is too large Load Diff