7 de mayo de 2012

Reparar el bug de suspensión en Ubuntu del equipo en un Asus A53S

En mi equipo Asus A53S se da un bug por el que no funcionaba correctamente la suspensión del equipo (tanto en la versión 11.10 como en la 12.04), pero que tiene una solución sencilla, que he encontrado en Code Central. Artículo donde explican varias soluciones y detalles a tener en cuenta, pero del que sólo me limitaré a poner la solución que me funcionó en mi caso particular. (Según comentarios, esta solución es también válida para los Asus K43E)


El primer paso es crear un script en la carpeta /etc/pm/sleep.d/ puede tener cualquier nombre, pero para asegurar el orden en que se cargan usaremos el prefijo 20_.

sudo gedit /etc/pm/sleep.d/20_custom-ehci_hcd
Seguidamente le añadimos el siguiente código al archivo que acabamos de crear:

#!/bin/sh
#inspired by http://art.ubuntuforums.org/showpost.php?p=9744970&postcount=19
#...and http://thecodecentral.com/2011/01/18/fix-ubuntu-10-10-suspendhibernate-not-working-bug
# tidied by tqzzaa :)

VERSION=1.1
DEV_LIST=/tmp/usb-dev-list
DRIVERS_DIR=/sys/bus/pci/drivers
DRIVERS="ehci xhci" # ehci_hcd, xhci_hcd
HEX="[[:xdigit:]]"
MAX_BIND_ATTEMPTS=2
BIND_WAIT=0.1

unbindDev() {
echo -n > $DEV_LIST 2>/dev/null
for driver in $DRIVERS; do
DDIR=$DRIVERS_DIR/${driver}_hcd
for dev in `ls $DDIR 2>/dev/null | egrep "^$HEX+:$HEX+:$HEX"`; do
echo -n "$dev" > $DDIR/unbind
echo "$driver $dev" >> $DEV_LIST
done
done
}

bindDev() {
if [ -s $DEV_LIST ]; then
while read driver dev; do
DDIR=$DRIVERS_DIR/${driver}_hcd
while [ $((MAX_BIND_ATTEMPTS)) -gt 0 ]; do
echo -n "$dev" > $DDIR/bind
if [ ! -L "$DDIR/$dev" ]; then
sleep $BIND_WAIT
else
break
fi
MAX_BIND_ATTEMPTS=$((MAX_BIND_ATTEMPTS-1))
done
done < $DEV_LIST
fi
rm $DEV_LIST 2>/dev/null
}

case "$1" in
hibernate|suspend) unbindDev;;
resume|thaw) bindDev;;
esac

Y finalmente de damos los permisos de ejecución

sudo chmod 755 /etc/pm/sleep.d/20_custom-ehci_hcd

Nada más, ahora la función de suspender debe de funcionar correctamente.

Actualización:  En mi equipo de sobremesa, a partir de alguna actualización dejó de funcionar también correctamente la función de suspender el equipo. El problema es que al salir de la suspensión se me queda la pantalla en negro viéndose sólo el ratón que se puede mover pero nada más. Ni siquiera me permite cambiar a un terminal en modo texto.

Pues bien, hay una solución sencilla para esto que es simplemente reiniciar el modo gráfico mediante la combinación del teclado siguiente: AltGr+ImpPant+K

12 comentarios:

Belmar Santanilla dijo...

Muchas gracias amigo, ha funcionado de Maravilla con mi ASUS K43E con Ubuntu 12.04.

Triada - Diseño y desarrollo web

Jesús Abad Luque dijo...

De nada, esa es la intención, que funcione Linux de maravilla en cualquier ordenador.

Anónimo dijo...

te hago una consulta esta solucion sirve para una hp dv6 ?

M.Moody dijo...

Me ha funcionado con una que no es asus muchas gracias por la solucion

Jesús Abad Luque dijo...

M.Moody me alegro que a ti también te funcionara, estaría bien que indicarás cual es tu equipo para ayudar a otra gente que esté en tu mismo caso.

Anónimo dijo...

solucion
http://www.maravento.com/2013/01/suspension-en-ubuntu.html

Jesús Abad Luque dijo...

Gracias también por el último aporte anónimo. Es un artículo amplísimo donde poder conocer más detalles sobre los problemas de suspensión, y donde ofrecen el archivo que propongo crear en mi artículo, para varias versiones de Ubuntu.

Martín Alvarez dijo...

Hola, a mi no me ha funcionado, en mi caso mi netbook es una CX 3060X con intel Atom. Quería saber si tengo otras opciones? probé un montón de cosas y nada me soluciona.

Jesús Abad Luque dijo...

Martín, no creo que te pueda ayudar mucho más allá de probar a buscar en Internet.

Aunque sí que te puedo decir que en las nuevas versiones de Ubuntu, instaladas en limpio el tema de la suspensión funciona sin tener que tocar nada.

Anónimo dijo...

Me funcionó perfecto!!

Muchas gracias,

Guillermo

jhonatan zapata tamayo dijo...

woooho eres un crack funciona en toshiba satelite nb 15

Jesús Abad Luque dijo...

Pues este artículo ya tiene sus años, me sorprende que siga siendo útil. Pero como siempre, me alegro de que te haya servido.