Los problemas de hibernación y suspensión son uno de los temas más repetidos en las wish list y uno de los que más irritan a los usuarios, incluso algunos “switchers” de Linux a Mac aluden a este problema como uno de los principales para su decisión de abandonar Linux.
Este post no pretende ser una guía de resolución de cada problema de hibernación, sino un primer paso para intentar solucionar el problema por tí mismo.
La mayoría de los problemas de suspensión vienen dados por el hardware de nuestra máquina, quedándose linux colgado a la espera de respuesta a las señales de hibernación o suspensión, por eso debemos intentar localizar el hardware que está haciendo a Linux tener este comportamiento:
- Podemos intentar entrar en la BIOS e ir desconectando dispositivos para ver si la suspensión funciona ante un dispositivo desconectado. Desconectar físicamente el CD o el lector de tarjetas puede ayudar a acotar el problema.
- Comprueba que no tienes ningún disco insertado, ningún pendrive y sobre todo, ninguna SD card o tarjeta de memoria, ya que se trata de un problema bastante común.
- Desconecta los dispositivos USB, como algún módem USB o sobre todo, alguna tarjeta de TV, digitalizadora o cámara de fotos.
- Comprueba que alguna aplicación en ejecución que esté impidiendo la hibernación.
Si has tenido suerte y has localizado el hardware que está haciendo que Linux no suspenda correctamente, puedes intentar dehabilitarlo tú antes de suspender con un script adicional. El script, en el caso de ubuntu/debian, debe ir en el directorio /etc/pm/sleep.d/
Si queremos, por ejemplo, desmontar una unidad MMCard o SDCard que se niega a suspender (sirve para un CD-ROM o cualquier tipo de unidad):
$ sudo vi /etc/pm/sleep.d/11_mmcard
#!/bin/sh
case "$1" in
hibernate|suspend)
umount /dev/mmcblk0p1
;;
thaw|resume)
mount /dev/mmcblk0p1
;;
*) exit 0
;;
esac
$ sudo chmod +x /etc/pm/sleep.d/11_mmcard
En mi caso el problema venía dado por me-tv, programa para ver la televisión digital, con lo que el suspender quedaba colgado con la tarjeta DVB-T. Este problema era un verdadero incordio, ya que la máquina quedaba encendida toda la noche al quedarme dormido viendo la tele. La solución ha sido cerrar la aplicación para que el dispositivo quede libre en el proceso de suspensión/hibernación:
$ sudo vi /etc/pm/sleep.d/11_me-tv
#!/bin/sh
# kill me-tv
case "$1" in
hibernate|suspend)
if ps -ef | grep -q [m]e-tv;
then
killall me-tv
else
echo "No me-tv running"
fi
;;
thaw|resume)
;;
*) exit 0
;;
esac
$ sudo chmod +x /etc/pm/sleep.d/11_me-tv
También se puede intentar localizar el error en la suspensión analizando el fichero /var/log/pm-suspend.log, ya que ahí podemos encontrar la secuencia de suspensión con todos los scripts que se van ejecutando, y cuál es el que no logra completarse con “success”.



¡Hola amigo!
Solo queria agradecerte por tu tutorial, ¡muy bien explicado!
Tengo este problema en un Acer Aspire One 110 y Ubuntu 9.10; y gracias a tu explicación, encontré que el problema es efectivamente mi SD. Así, cuando lo retiro suspende e inicia con normalidad, pero cuando la inserto, la pantalla se apaga y la luz indicadora del botón de poder (verde: activo, naranja: suspendido) se queda en verde, y eso es todo. Ya no se activa más hasta que tengo que quitar la corriente…
Lamentablemente, seguí bien todos los pasos, pero el script ya no me permite suspender. El boton sigue verde, pero si puedo volver a logearme e iniciar…
Cualquier ayuda, te la agradeceria de corazón…
¡y gracias de antemano, bro!
Comprueba qué dev (/dev/mmcblk0p1) es el que se monta en tu máquina cuando insertas una sd-card con el comando mount. En mi caso es /dev/sdb1 on /media/18B8-682F, así que habría que poner /dev/sdb1 en el script en lugar de /dev/mmcblk0p1
¡Muchas gracias por responder mi pregunta, Tux!
Te agradezco que te tomes esto enserio…
Verás que no me había fijado en ese detalle, pero ahora que verifiqué, efectivamente mi tarjeta SD es /dev/mmcblk0p1…
Como solución temporal, desactivé los permisos de ejecución del script. Sigue como antes, y me di cuenta que según /var/log/pm-suspend.log, su problema es que cuando el SD no está montado, aún así trata de desmontarlo, al no poder, termina en error exit 1 y no deja salir de la suspensión a la máquina…
Bueno, si no es molestia, si se te ocurre cual podría ser el problema, me harías un enorme favor ayudándome. Me interesa suspender mi máquina, pero más importante aún, me gustaria aprender todo lo que pueda acerca de este sistema operativo que ha podido hacer maravillas con mi mini net-book.
Y eso es lo que haces con tu blog. Enseñas a aprender. Gracias por todo…
-RickySmart
No sé si el problema que tinenes es éste, pero prueba a poner el umount condicional:
$ sudo vi /etc/pm/sleep.d/11_mmcard
#!/bin/sh
case “$1″ in
hibernate|suspend)
if ps -ef | grep -q /dev/mmcblk0p1
then
umount /dev/mmcblk0p1
else
echo “No SD card mount”
;;
thaw|resume)
mount /dev/mmcblk0p1
;;
*) exit 0
;;
esac