Saltar al contenido

Solución si la batería se descarga con portátil apagado

Hace casi 1 año comencé a notar que la batería de mi computadora portátil, una Sleekbook HP Envy 4 modelo 4T-1000, se descargaba aún estando el dispositivo apagado. Y cuando digo se descargaba no me refiero a esa pérdida mínima que tienen todas las baterías de iones de litio estando apagadas, en 1 día apagada la batería se descargaba un 100%, quedaba vacía.

Lo primero que pensé fue que la batería estaba dañada, al fin y al cabo ya tenía 3 años y poco de uso y era totalmente razonable. Busqué un poco en internet respecto al tema y no encontré mucho más, lo dejé ahí pensando en el futuro comprar una batería y reemplazarla.

Estaba equivocado.

Hace pocos días me dispuse a comprar la batería, búsqueda en eBay y en un par de minutos tenía un buen precio y envío en 4 días, parecía fácil. En ese punto (y sin terminar de convencerme que esta sería la solución) se me ocurrió investigar nuevamente el problema. Entonces cambio los términos de búsqueda en DuckDuckGo y encuentro algo distinto.

Concretamente en la wiki de ArchLinux mencionaban que la función Wake-On-LAN en algunas portátiles por error descargaba totalmente la batería estando esta apagada, y la solución constitía simplemente en deshabilitarla. Seguí buscando al respecto y parece que ocurre con varias portátiles HP, Lenovo y Dell, y en algunos casos se corrige con actualizaciones de BIOS.

Nota: Para los que no sepan, Wake-On-LAN (WOL) es una tecnología que permite encender remotamente computadoras apagadas a traves de la tarjeta de red, para lo cual se reserva un mínimo de energía para mantener la tarjeta encendida.

En mi caso, si bien habían varias actualizaciones de la BIOS que lo corregían, estas corrían solamente en Windows 7 u 8, impidiendome actualizar desde GNU/Linux, concretamente Trisquel 7, por lo cual opté por buscar otra alternativa.

Como en la BIOS de mi PC no tengo disponible la opción de deshabilitar WOL desde la configuración de la misma, y hay que hacerlo desde el sistema operativo. Esto en GNU/Linux se hace con la herramienta ethtool, la cual en Trisquel, Ubuntu y similares se puede instalar con el comando:

sudo apt install ethtool

Se puede verificar el estado de esta función ejecutando (reemplazando eth0 por el nombre de la tarjeta de red en el sistema):

sudo ethtool eth0

Y verificando en la salida el parámetro «Wake-on:» donde significa activado y desactivado.

Si está habilitado, para deshabilitarlo hay que ejecutar:

sudo ethtool -s eth0 wol d

El problema en muchos casos, es que en el próximo apagado la tarjeta tendrá deshabilitado WOL, pero al encenderla nuevamente la BIOS volverá a activar la función. Para esto la solución que encontré es agregar en el inicio del sistema el comando para deshabilitar WOL, de modo que en cada inicio posterior a que la BIOS habilite la opción el sistema lo deshabilite.

Esto último en Ubuntu 14.04, Trisquel 7 y en general cualquier distribución GNU/Linux sin systemd (¡esto es importante!, con systemd hay que usar otros métodos como el descrito en la wiki de ArchLinux) se puede hacer modificando el script ‘disable-wol’ que habilita o deshabilita la función WOL al arranque del sistema.

Para esto, copiamos el script original al directorio /etc/pm/power.d, de modo que el sistema utilice este para gestionar la función:

sudo cp /usr/lib/pm-utils/power.d/disable_wol /etc/pm/power.d/

Y luego lo editamos con

sudo gedit /etc/pm/power.d/disable_wol

Modificando la línea que comienza con «enable«, cambiando la «g» por la «d», de modo que siempre y sin importar el estado en el que se encuentre, la deshabilite.

Quedaría más o menos así:

#!/bin/sh

. "${PM_FUNCTIONS}"

command_exists ethtool || exit $NA

set_wol_status() {
 for d in "/sys/class/net/"*; do
 [ -e "$d/wireless" ] && continue
 [ -h "$d/device/driver" ] || continue
 printf "Setting Wake On Lan for %s to %s..." "${d##*/}" "$1"
 case $1 in
 disable) ethtool -s "${d##*/}" wol d>/dev/null 2>&1;;
 enable) ethtool -s "${d##*/}" wol d>/dev/null 2>&1;;
 esac
 [ "$?" -eq 0 ] && echo Done. || echo Failed.
 done
}

case $1 in
 true) set_wol_status disable;;
 false) set_wol_status enable;;
 *) exit $NA;;
esac

exit 0

Una vez realizado esto, al apagar y encender el dispositivo la función WOL estará siempre deshabilitada. Y en mi caso fue notable, ahora estando 2 días apagada la portátil apenas se descarga 1% la batería.