← Zurück zur Übersicht

ROG Auto-Power & Live Wattage Tray Indicator

linuxpythonpyqt6kde-plasmaasus-rogpower-managementopen-source

Repository ansehen →

„Wer seine Hardware unter Linux nicht nur benutzen, sondern bis auf die Ebene der Kernel-Register und PCIe-Schlafzustände verstehen will, baut sich seine Werkzeuge früher oder später selbst.“

Moderne Gaming- und Workstation-Laptops wie das ASUS ROG Strix G17 (G713RM) mit AMD Ryzen 7 6800H (Radeon 680M iGPU) und dedizierter NVIDIA GeForce RTX 3060 Mobile vereinen zwei völlig gegensätzliche Welten: Am 240-Watt-Netzteil sind sie kompromisslose Rechenmaschinen mit 240-Hz-Panel; unterwegs im Akkubetrieb oder an einem kompakten USB-C-PD-Ladegerät hingegen entscheidet jedes eingesparte Watt über Stunden an Laufzeit.

Unter Linux existieren zwar exzellente Bausteine wie power-profiles-daemon, supergfxd und asus-nb-wmi, doch im Alltag fehlte mir das verbindende Glied: Ein Dienst, der vollautomatisch zwischen Akkubetrieb, USB-C Power Delivery und 240W-Netzteil unterscheidet, Hardware-Parameter tiefgreifend optimiert und mir gleichzeitig in Echtzeit im KDE System-Tray zeigt, wie viel Leistung tatsächlich ins Gerät fließt, wie viel davon im Akku landet und was das System verbraucht.

Aus diesem Anspruch ist rog-auto-power entstanden – veröffentlicht als freie Software unter der GPL-3.0-or-later.


1. Das Problem: 37,8 Watt im Leerlauf und eine schlaflose GPU

Im Auslieferungszustand zog das Notebook unter Linux selbst im vermeintlichen Leerlauf auf dem Desktop rund 37,8 Watt aus dem Akku – genug, um den Akku in knapp anderthalb Stunden zu leeren. Die Ursachen lagen auf mehreren Ebenen:

  1. Hardware-MUX & D3cold: Stand der Hardware-MUX (gpu_mux_mode) auf der dedizierten NVIDIA-Grafikkarte oder wurde die Karte im Hybrid-Modus regelmäßig durch Abfragetools wie nvidia-smi geweckt, verhinderte dies den Eintritt in den tiefen PCIe-Schlafzustand D3cold. Allein die wache RTX 3060 kostete im Leerlauf rund 10 bis 12 Watt.
  2. 240-Hz-Panel & Panel-Overdrive: Ein QHD-Panel bei 240 Hz mit aktivierter Overdrive-Beschleunigung und 100 % Helligkeit genehmigt sich ein Vielfaches dessen, was bei 60 Hz und 50 % Helligkeit nötig ist.
  3. USB-C Power Delivery Überlastung: Schließt man unterwegs ein leichtes 45W- oder 65W-USB-C-Netzteil an, behandelt Linux dies standardmäßig genau wie das große 240W-Netzteil, schaltet auf Höchstleistung und überlastet das Ladegerät sofort.

2. Die Lösung: Drei Zustände, ein autonomer Daemon

rog-auto-power überwacht über UPower D-Bus-Signale und das Kernel-sysfs (/sys/class/power_supply/) kontinuierlich die anliegende Stromquelle und schaltet das gesamte System nahtlos um:

Stromquelle Energieprofil Bildwiederholrate Helligkeit Tastatur-LED Hardware-Tuning (sysfs)
⚡ Akkubetrieb (battery) Stromsparmodus 60 Hz 50 % Stufe 1 CPU-Turbo Aus, Panel-Overdrive Aus, PCIe PM auto, WLAN-Sparmodus Ein (~12,4 W Leerlauf)
🔌 USB-C PD (usbc) Ausgeglichen 60 Hz 75 % Stufe 1 Schützt 45W/65W USB-C-Netzteile vor Überlastung (~0,45 C schonendes Laden)
🚀 240W-Netzteil (ac) Höchstleistung 240 Hz 100 % Stufe 3 Voller CPU-Turbo & Panel-Overdrive (~0,95 C Schnellladen)

Durch die Kombination aus Hybrid-MUX-Modus, reinem sysfs-Monitoring ohne nvidia-smi-Wakeups und den Hardware-Tunings sank der reale Desktop-Verbrauch im Akkubetrieb von 37,8 W auf 12,45 W – eine Verdreifachung der Akkulaufzeit auf rund 5,5 bis 6 Stunden.


3. Echtzeit-Energiebilanz im KDE System-Tray

Statt einer bloßen Prozentanzeige zeichnet rog-auto-power alle zwei Sekunden ein dynamisches, zweizeiliges Badge-Icon direkt in die KDE-Systemleiste und schlüsselt die Leistungsflüsse physikalisch sauber nach dem Prinzip Eingang Gesamt = Akku + System auf:

⚡ Energie-Bilanz (Echtzeit)
🔌 Eingang Gesamt: 54.5 W  [USB-C PD (Ladebetrieb) (Max 60W)]
├── 🔋 Akku:      +30.3 W  (0.38 C • Lädt • 45%/80% • ~0.8h bis 80%)
└── 💻 System:     24.2 W  (Laufender Betrieb)
       ↳ CPU/iGPU: 17.2W | RTX 3060: 0.0W | Bildschirm/Mainboard: 7.0W
  • Kein Aufwecken der NVIDIA-GPU: Der Schlafzustand der RTX 3060 wird ausschließlich passiv über /sys/bus/pci/devices/0000:01:00.0/power/runtime_status geprüft. Solange dort suspended steht, bleibt die Karte bei exakt 0,0 W im Tiefschlaf.
  • AMD APU Package Power (PPT): Die reale Leistungsaufnahme von Prozessor und integrierter Radeon 680M wird direkt aus dem amdgpu-hwmon-Sensor gelesen.

4. Akku-Schutzmodus, C-Rate & GPU/MUX-Steuerung

Direkt über das Rechtsklick-Menü des Tray-Icons lassen sich alle wesentlichen Hardware-Funktionen steuern:

  • Echtzeit-C-Raten-Anzeige (W / Wh): Zeigt jederzeit die chemische Belastung des Akkus beim Laden und Entladen (z. B. ~0,45 C über USB-C PD vs. ~0,95 C am 240W-Netzteil).
  • Sofortiger 0.0 C Direktbetrieb (Bypass): Stoppt den Ladevorgang mit einem Klick exakt beim aktuellen Akkustand, sodass das Notebook zu 100 % direkt vom Netzteil gespeist wird.
  • Lade-Limits (60 % / 80 % / 100 %): Schreibt die gewünschte Ladeschwelle persistent in /sys/class/power_supply/BAT0/charge_control_end_threshold.
  • GPU- & Hardware-MUX-Umschalter: Direkter Wechsel zwischen Integrated (nur AMD), Hybrid (AMD + NVIDIA bei Bedarf via prime-run) und AsusMuxDgpu (direkter Hardware-MUX auf die NVIDIA-Karte).
  • Automatische Lokalisierung (DE / EN): Erkennt die Systemsprache automatisch und stellt Oberfläche, Benachrichtigungen sowie die CLI-Ausgabe (--status, --version) wahlweise komplett auf Deutsch oder Englisch dar.

5. Quellcode & Installation

Das Projekt folgt den offiziellen Linux-FHS- und Arch-Packaging-Richtlinien (Makefile, PKGBUILD, systemd-User-Unit, Freedesktop .desktop-Eintrag) und steht unter GPL-3.0-or-later auf GitHub bereit:

— Gigs