Skip to content

About

Battery management for AMD Ryzen laptops on sway: udev + watchdog loop + 3 power profiles (eco/balanced/perf) with brightness, no TLP

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔋 battery-management

Gestión de energía para portátiles AMD Ryzen en Wayland/sway, sin TLP ni demonios pesados: scripts puros + udev + un bucle de vigilancia.

Cuando conectas o desconectas el cargador, el sistema cambia solo de perfil (CPU, PPT, boost y brillo). Un menú permite forzar el modo manualmente.

Funciona de fábrica en Gentoo/OpenRC + sway. Para systemd hay unit incluida; para otros launchers/backlights hay fallbacks (ver abajo).


⚡ Los 3 modos

Modo Governor Boost PPT fast Brillo Cuándo
eco powersave off 15 W 40% Batería (<50%)
bal performance on 20 W 70% Batería (>50%)
full performance on 25 W 100% Enchufado (AC)

Los valores de PPT/brillo se ajustan en scripts/energia-aplicar.sh (función aplicar) — cada CPU tiene sus números.


🧠 Cómo funciona

conectar/desconectar AC
        │
        ▼
   udev (90-energia-auto.rules)
        │
        ▼
energia-auto.sh ──► decide modo según AC + % batería
        │              │
        │              └─► solo aplica si el modo CAMBIÓ (cero escrituras)
        ▼
energia-aplicar.sh (root): ryzenadj + governor + boost + brillo

Además:

  • energia-auto-loop.sh — bucle cada 2 min que re-evalúa (cubre el caso de quedarte sin AC yendo en batería sin reconectar).
  • energia.sh — menú (wofi) para forzar ECO/EQUILIBRADO/RENDIMIENTO a mano.
  • swayidle-battery.sh — loop independiente que mantiene el perfil de swayidle según la fuente: en batería lock 5 min + pantalla off 7 min; enchufado solo lock 30 min (la pantalla nunca se apaga).
  • Modo manual — al elegir un modo a mano, el automático lo respeta 15 min antes de volver a la lógica AC/batería.

Detalle fino: ¿por qué swayidle no se dispara desde udev?

udev corre como root sin acceso a Wayland y con $HOME de root — relanzar swayidle desde una regla udev mata el proceso bueno y no levanta ninguno. Por eso swayidle-battery.sh es un loop propio que comprueba AC cada 30 s y reinicia swayidle solo cuando cambia el perfil. No depende de udev para nada.


📦 Instalación

Requisitos:

  • AMD Ryzen + ryzenadj (para PPT) — o quita las líneas de ryzenadj para usar solo governor/boost
  • wofi, rofi o dmenu para el menú (detecta el primero disponible)
  • swayidle + swaylock (para el perfil de pantalla)

El brillo se controla directamente por sysfs (/sys/class/backlight/*/brightness) — sin dependencias extra, funciona en Wayland y X11.

git clone <repo-url>
cd battery-management
sudo ./install.sh

El instalador detecta OpenRC/systemd, instala los scripts, la regla udev, los perfiles de swayidle y el servicio del vigilante. El sudoers usa %wheel (tu usuario debe estar en el grupo wheel).

Sway — añade a tu ~/.config/sway/config:

# Menú de energía (Mod+Shift+e)
bindsym $mod+Shift+e exec /usr/local/bin/energia.sh

# Forzar modo directo (wrappers sin argumentos: los bindsym de sway no llevan args)
# ⚠️ Usar Mod+Alt (NO Mod+Shift: eso colisiona con "mover a workspace N" de sway)
bindsym $mod+Alt+1 exec /usr/local/bin/energia-eco.sh
bindsym $mod+Alt+2 exec /usr/local/bin/energia-bal.sh
bindsym $mod+Alt+3 exec /usr/local/bin/energia-full.sh

# swayidle según fuente de energía (batería: lock 5min/off 7min · AC: lock 30min)
exec /usr/local/bin/swayidle-battery.sh

i3 / otros: el menú funciona con dmenu; swayidle es solo para compositores Wayland (sway, Hyprland).


🗂️ Estructura

├── install.sh                  ← instalador (detecta init system)
├── scripts/
│   ├── energia.sh              ← menú (wofi, fallback rofi/dmenu)
│   ├── energia-aplicar.sh      ← helper root: aplica modos + estado
│   ├── energia-eco.sh          ← wrapper ECO (bindsym sin argumentos)
│   ├── energia-bal.sh          ← wrapper EQUILIBRADO
│   ├── energia-full.sh         ← wrapper RENDIMIENTO
│   ├── energia-auto.sh         ← cerebro: decide modo AC/batería
│   ├── energia-auto-loop.sh    ← vigilante cada 2 min
│   ├── energia-arranque.sh     ← modo por defecto al boot
│   └── swayidle-battery.sh     ← perfil swayidle según energía
├── config/
│   ├── 90-energia-auto.rules   ← udev (AC plug/unplug)
│   └── swayidle-*.conf         ← perfiles batería/AC
└── units/
    ├── openrc/energia-auto     ← servicio Gentoo
    └── systemd/energia-auto.service

🔒 Auditoría

Revisado a fondo (2 rondas, agosto 2026): bugs de lógica (governor/boost/PPT), robustez (PATH fijo, lock anti-duplicados, auto-reparación de swayidle, validación de configs), seguridad (chmod 644 del override manual, sin archivos de log planos — logger/journald). Los fixes están en el historial de git.

⚠️ Notas

  • Solo AMD para PPT (ryzenadj). En Intel, usa solo governor/boost o adapta a intel_pstate.
  • La regla udev (config/90-energia-auto.rules) apunta a /usr/local/bin/energia-auto.sh — si usas PREFIX distinto, ajústala.
  • Los límites de PPT son para un Ryzen 5 PRO 5650U (15/20/25 W) — ajústalos a tu CPU (los ThinkPads suelen aguantar 15-25 W en batería).
  • El brillo se controla por sysfs directo (/sys/class/backlight/*/brightness) — no necesita xbacklight/light (xbacklight como root no funciona en Wayland).
  • Testeado en: Gentoo + sway + ThinkPad L14 (Ryzen 5 PRO 5650U).

📄 Licencia

MIT — haz lo que quieras, pero si lo mejoras, compártelo. 😉

About

Battery management for AMD Ryzen laptops on sway: udev + watchdog loop + 3 power profiles (eco/balanced/perf) with brightness, no TLP

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages