Header Ads

Suspensión e Hibernación en Ubuntu

Un viejo Bug de Ubuntu y sus derivados, vuelve a la carga: la suspensión de energía de las laptops. La distro más popular (no la mejor) de Linux sigue arrastrando este viejo y resabiado bug, que parece tener las intensiones de quedarse, y de paso pone en peligro las máquinas.
En versiones anteriores de Ubuntu (10x, 11x) se solucionaba con un archivo llamado 00CPU copiándolo a la carpeta  /etc/pm/sleep.d, pero con la aparición de las nuevas versiones 12x y superiores, donde se pensaba que al fin se había corregido, continua el calvario.
Por alguna razón este bug solo afecta las laptops, mayormente a aquellas que tienen chipset y video de Intel o AMD (aunque también se ha reportado que afecta a otras motherboards). Al parecer el mal reconocimiento de la ACPI de la BIOS por parte del kernel Linux hace que se produzca un deficiente manejo de la relación consumo/potencia. Otro posible culpable serían los drivers, en especial el touchpad o los chips mencionados. Hay una teoría que apunta a la swap, sobre todo cuando es inferior a la memoria física de la laptop, sin embargo, sea cual sea la causa, no hay evidencias concluyentes que confirmen ninguna de estas hipótesis, ya que la suspensión no afecta a todos los equipos que tengan instalado Ubuntu. Depende de la versión que usen, su arquitectura (x86 o x64) y el hardware del equipo.
Lo que sucede concretamente es que cuando cerramos la tapa de la laptop, Ubuntu trata de ponerse en suspensión, pero inmediatamente vuelve a cargar, o sea, se queda con el disco duro encendido (o puede que quede encendido muchas cosas más como el wifi o bluetooth, usb, etc), consumiendo batería, pero con los ventiladores apagados. Esto produce que la laptop se recaliente y se apague. En el mejor de los casos consume toda la carga de la batería y luego se apaga.
Como bien explican en el foro de Ubuntu el problema es bastante serio, ya que puede quemar la laptop. Se imaginan cerrar la tapa de nuestro portátil  meterla en su estuche a 35°C, semiencendida con los ventiladores apagados?... Si fuera una HP-Compaq lo más seguro es que tendrían que decirle adiós a su chip de video. Fuera de esto, también se reporta que cuando los equipos salen de suspensión (si es que lo logran) el bluethoot o wifi, puede aparecer como apagado, o quedarse encendido.
En resumen, la mayoría de usuarios coinciden que la suspensión en Ubuntu es "a medias", o sea que muchos componentes quedan encendidos mientras dura este proceso. Es por estas razones que siempre hemos recomendado con entornos de escritorio Gnome 2x, y como ya está descontinuado, se recomienda en su reemplazo Mate, pero tampoco hay muchas garantías.
A continuación ofreceremos algunas soluciones, que pueden o no funcionar en su laptop. Es importante resaltar que si su laptop no presenta los problemas descritos en este post, no use los procedimientos que exponemos a continuación.
Antes de comenzar
Una de las causas de este problema es la carga de las app que tenemos instaladas. Es por esto que debemos cerciorarnos que nuestro sistema haya arrancado o cerrado bien, ya que una aplicación colgada (que no inicie o cierre correctamente) puede ocasionar que el sistema no caiga en suspensión/himernación. Para esto verificamos los logs
cat /var/log/boot.log
Adicionalmente verifique que la swap sea igual a la memoria física de su laptop. Puede saberlo ejecutando en el terminal los comandos  free -m o  top. Mantenga actualizados los drivers y si al salir de la suspensión se queda la pantalla en negro y solo se ve el puntero del mouse, reinicie el modo gráfico mediante la combinación del teclado  AltGr+ImpPant+K
Para Ubuntu 10x y 12x
1. Descargue el archivo wakeupkill y descomprímalo. Contiene 3 archivos: 00CPU para las versiones de Ubuntu anteriores a 12x.  20_custom-ehci_hcd para las versiones 12x y el script disablewakeup.sh
2. Con privilegios (nautilus) copie y pegue los archivos en la carpeta /etc/pm/sleep.d (En dependencia de su versión de Ubuntu y derivados, use 00CPU o   20_custom-ehci_hcd)
3. Dele permisos a los archivos .
chmod 755 /etc/pm/sleep.d/20_custom-ehci_hcd
chmod 755 /etc/pm/sleep.d/disablewakeup.sh
4. Ejecute desde el terminal:
install -o root -g root -m 755 disablewakeup.sh /etc/pm/sleep.d/
5 Reinicie el sistema
El script disablewakeup.sh busca los componentes que tengan activa (enable) la función wakeup y los traslada a sleep.d para detenerlos cuando el sistema entre en modo suspendido.
Si desea hacerlo manualmente, primero determine cuales dispositivos tienen la función wakeup activa. Lo puede saber ejecutando en el terminal  cat /proc/acpi/wakeup. Luego edite  nano /etc/rc.local e incluya en el archivo las lineas correspondientes a los dispositivos " enable". Use el comando tee para realizar esta acción.
Ejemplo:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo USB0 | tee /proc/acpi/wakeup
exit 0
Si le sigue sin funcionar puede que tenga que optar por pasos adicionales:
Alternativa
Edite el grub con
nano /etc/default/grub
Busque la linea que diga:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Y Adicione
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"
Guarde los cambios, cierre, actualice grub y finalmente reinicie
nano update-grub
Para Ubuntu 14x
laptop-mode-tools es una de las mejores utilidades en gestión de energía y por supuesto  powertop. Su uso en versiones Ubuntu 12x, sobre todo con Gnome 3x es traumático, ya que en ocasiones se ha reportado congelamiento y lentitud en el apagado, al punto que hay que hacerlo forzado con CTRL-ALT-IMPRPANT-REISUB. Lo mismo sucede al activar la función de hibernación, desactivada por defecto en esta versión. Por tanto queda bajo su propio riesgo el uso de estas herramientas.
Instalación
apt-get install laptop-mode-tools powertop
Para removerlos
apt-get remove --purge laptop-mode-tools powertools && apt-get autoremove
La ubicación del archivo de configuración puede cambiar de acuerdo a su versión
/etc/laptop-mode/laptop-mode.conf
o
/etc/laptop-mode/
Configuración
Para evitar que laptop-mode-tools suspenda la energía durante una presentación en su laptop (reproducción de videos, capturas o presentaciones tipo powerpoint), instale caffeine y asocielo a su reproductor favorito (ejemplo: en el apartado preferencias de VLC):
add-apt-repository ppa:caffeine-developers/ppa && apt-get update && apt-get -y install caffeine python-glade2 gir1.2-notify
Para evitar que autosuspenda los usb activos (mouse y cualquier pendrive o hdd conectado), ejecute el comando lsusb, copie el numero correspondiente al usb que quiere mantener activo, y edite el archivo autosuspend
nano /etc/laptop-mode/conf.d/usb-autosuspend.conf
Y agregue a la línea AUTOSUSPEND la siguiente información entre comillas:
AUTOSUSPEND_USBTYPE_BLACKLIST="usbhid usb-storage 046d:c530 1bcf:2881"
Donde "046d:c530 1bcf:2881" son ejemplos de los números asociados al dispositivo usb. Reemplácelos por los que arroje el resultado del comando lsusb y este asociado al dispositivo que pretenda que no se desactive.
Active el modo AC...
ENABLE_LAPTOP_MODE_ON_AC=0
por
ENABLE_LAPTOP_MODE_ON_AC=1
y la bateria...
ENABLE_LAPTOP_MODE_ON_BATTERY=1
Y evite que su disco se interrumpa constantemente, eligiendo un valor intermedio entre 1 y 254. Por default el valor es 1
BATT_HD_POWERMGMT=1
Para finalizar reinicie laptop-mode-tools
/etc/init.d/laptop-mode restart
y verifique su estado
laptop_mode start
Laptop mode 
enabled, active [unchanged]
Si sale un error relativo a:
KERNEL PARAMETER FAILED: echo ondemand \> /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Edite cpupower frequency-info (si no lo tiene instalelo)
nano /etc/laptop-mode/conf.d/cpufreq.conf
Y asegurese de que GOVERNOR se encuentre en powersave y no en ondemand
        BATT_CPU_MAXFREQ=fastest
        BATT_CPU_MINFREQ=slowest
        BATT_CPU_GOVERNOR=powersave
        BATT_CPU_IGNORE_NICE_LOAD=1
        LM_AC_CPU_MAXFREQ=fastest
        LM_AC_CPU_MINFREQ=slowest
        LM_AC_CPU_GOVERNOR=performance
        LM_AC_CPU_IGNORE_NICE_LOAD=1
        NOLM_AC_CPU_MAXFREQ=fastest
        NOLM_AC_CPU_MINFREQ=slowest
        NOLM_AC_CPU_GOVERNOR=powersave
        NOLM_AC_CPU_IGNORE_NICE_LOAD=0
Para Ubuntu 12x y 14x
Primero pruebe si funciona en su laptop con el comando.
sudo pm-hibernate
Cuando regrese de la hibernación (debe hacerlo manualmente)
nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Finalmente escriba en el archivo en blanco las siguientes esas lineas (copie y pegue) y luego borre todos los espacios que quedan al final de cada linea y al final del documento
[Re-enable hibernate by default] 
Identity=unix-user:* 
Action=org.freedesktop.upower.hibernate 
ResultActive=yes
Accedemos a /etc/systemd/logind.conf y descomentamos la línea  HandleLidSwitch=suspend. 
También podemos reemplazar "suspend" por poweroff (apagar) hibernate (hibernar) o ignore (no hacer nada).
Otra de las causas que pueden generar que su sistema no caiga en suspensión/hibernacion es que algún proceso Kworker esté activo consumiendo los recursos de su sistema. Lea la segunda parte de esta entrega, la cual explicaremos como cerrar estos procesos.
Para Ubuntu 15.10 hasta 16.04
Este bug también " se extiende a Ubuntu 16.04.x". Una solución provisional, similar a 14x, es editar el archivo /etc/systemd/logind.conf y agregarle la siguiente información:
HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
Y reiniciar. Con esta acción evita la pantalla en negro después de la suspensión.
Es importante señalar que si su laptop tiene chip Intel hd HD530/HD520, skylake (6th generation of intel cpus), descargue el siguiente proyecto en github para corregir los problemas de estos chips y actualice el firmware Intel  AQUI
Otra alternativa (efecto inverso) es deshabilitar la gestión avanzada de energía (APM, Advanced Power Management), y activar la cache "sync && hdparm -w /dev/sda", que aumenta la vida útil del disco, mejora la escritura, pero aumenta el consumo; un sacrificio que muchos pueden pagar.
Y si nada de lo anterior le funciona, simplemente ejecuten los comandos systemctl (root/sudo) de suspensión/hibernación/híbrida en el terminal, según el caso, o creen un script con dicho comando:
systemctl suspend # suspension (todos los procesos se guardan en la RAM)
systemctl hibernate # hibernacion (todos los procesos se guardan en el Disco Duro y se apaga la máquina por completo)
systemctl hybrid-sleep # ambas cosas (primero suspender y si pasado un tiempo no hay actividad hiberna. Esta función debe verificarse con el comando sudo pm-is-supported --suspend-hybrid && echo $?  el resultado debe ser 0)
Para mayor información sobre estos comandos visite Man7
Para mayor información sobre la suspensión híbrida visite Blog DesdeLinux

... Continuación parte II post  Kworker

Fuentes consultadas Suspensión híbridaRestablecer hibernación  Cómo cambiar el comportamiento de Ubuntu al bajar la pantalla
Con la tecnología de Blogger.