Cambiar el plan de CPU según enchufe o batería
Introducción
Apunte para automatizar el cambio de plan de energía (governor) en un portátil según si está enchufado o funcionando con batería. La idea es olvidarse de cambiarlo manualmente y que se ajuste solo.
Características
- Detecta si el portátil está en corriente o en batería.
- Cambia el governor de CPU automáticamente.
- Funciona como servicio systemd para que siempre esté activo.
Requisitos previos
- Linux (probado en distros con
/sys/class/power_supply, funciona bien en Fedora 42). - Tener sudo configurado para poder escribir en
scaling_governorsin pedir contraseña (o configurarsudoers). - Acceso root para instalar y habilitar servicios.
Script principal
- Se revisa cada 3 minutos (
sleep 180). - Modificar los governors según preferencias.
Servicio systemd
Archivo en /etc/systemd/system/power_manager.service:
[Unit]
Description=Power Manager Script
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c "sudo /home/usuario/Documentos/Scripts/power_manager.sh"
Restart=always
User=usuario
Environment=DISPLAY=:0
Environment=HOME=/home/usuario
[Install]
WantedBy=multi-user.target
- Cambiar
usuariopor el nombre real si se copia literal. - Importante revisar permisos y rutas.
Configuración en sudoers
Añadir al archivo sudoers (con visudo) para permitir ejecutar el script sin contraseña:
# Custom
usuario ALL=(ALL) NOPASSWD: /home/usuario/Documentos/Scripts/power_manager.sh
Errores comunes o decisiones importantes
- Permisos sudo: hay que permitir
sudo teesin contraseña para que funcione sin bloqueo. - Ruta AC0: depende del hardware, a veces es
AC,ACAD, etc. Verificar en/sys/class/power_supply/. - Intervalo: se podría reducir el tiempo de espera (sleep), pero puede consumir más recursos.
Resumen breve
- Script en bash que revisa si está enchufado.
- Cambia automáticamente el governor de CPU.
- Servicio systemd para que se inicie solo.
- Configurar sudoers para no pedir contraseña.
- Revisar nombre del adaptador AC.
Notas personales
Quizá se podría mejorar para no usar un bucle infinito y en su lugar usar udev o eventos ACPI, pero el loop es más sencillo y robusto para no complicarse.