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).
| 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.
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.
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.
Requisitos:
- AMD Ryzen +
ryzenadj(para PPT) — o quita las líneas de ryzenadj para usar solo governor/boost wofi,rofiodmenupara 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.shEl 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).
├── 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
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.
- 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 usasPREFIXdistinto, 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).
MIT — haz lo que quieras, pero si lo mejoras, compártelo. 😉