Header Ads

Suspensión e Hibernación en Ubuntu II

En el post anterior  Suspensión e Hibernación en Ubuntu, vimos como en versiones previas LTS 10.04, 12.04, 14.04, 16.04 se presentaron innumerables problemas con la suspensión e hibernación. Hoy le toca el turno a Ubuntu 18.04, que tampoco se salva.
Si bien se han resuelto muchos de los problemas anteriores, se han creado nuevos. Ahora el afectado es la interfaz de red ethernet, que no "resucita" después de la suspensión y queda "desconectada" y no basta con reiniciar las interfaces. La única manera de devolverla a la vida es que reiniciemos el PC.
En 16.10 y 17.04, ya se venía presentando este problema, descrito en los BUGs  17600731638842, sin embargo repasemos algunas de las propuestas hechas en diferentes publicaciones, que tal vez funcionaron en el pasado, pero que ya no aplican para Ubuntu 18.04:
Creando  10-globally-managed-devices.conf en  /etc/NetworkManager/ conf.d :
touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
systemctl restart NetworkManager
Modificando NetworkManager.conf:
nano /etc/NetworkManager/NetworkManager.conf
[ifupdown]
managed=true
service network-manager restart
Agregando loopback a interfaces (que ya viene incluida en 18.04):
nano /etc/network/interfaces
auto lo
iface lo inet loopback
service network-manager restart
Modificando 10-globally-managed-devices.conf en /usr/lib/NetworkManager/conf.d :
sudo -H gedit /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:wwan,except:type:ethernet
service network-manager restart 
Incluso algunos propusieron modificar resolv.conf... 
En fin. Muchas propuestas y ninguna soluciona el problema. Esto se debe a la interfaz de ethernet en Ubuntu 18.04, en la mayoría de los casos, usa el módulo del kernel r8169 (problema descrito en el BUG  1752772).  Para determinarlo, ejecutamos:
lshw -C network
Y la línea "driver" de nuestra interfaz ethernet debe aparecer  driver=r8169:
configuración: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3LK-NAPI duplex=half firmware=rtl8106e-1_0.0.1 06/29/12 latency=0 link=no multicast=yes port=MII speed=10Mbit/s
Entonces la solución es asegurarnos que se levante este módulo después de la suspensión. Para esto creamos el siguiente script:
nano /lib/systemd/system-sleep/r8169
chmod +x /lib/systemd/system-sleep/r8169
El cual contiene lo siguiente:
#!/bin/bash
modprobe -r r8169 # unload kernel module
modprobe -i r8169 # reload kernel module
Y después de la suspensión ejecutamos el script manualmente:
/lib/systemd/system-sleep/r8169
Importante:
Instalar r8168-dkms (apt install r8168-dkms) no soluciona el problema. Por el momento la única opción es el script.
Otra alternativa es crear una especie de loop, como proponen en  Ubuntu 18. 04 - Ethernet disconnected after suspend , reemplazando el contenido del script por el siguiente:
#!/bin/bash
PROGNAME=$(basename "$0")
state=$1
action=$2

function log {
    logger -i -t "$PROGNAME" "$*"
}

log "Running $action $state"

if [[ $state == post ]]; then
    modprobe -r r8169 \
    && log "Removed r8169" \
    && modprobe -i r8169 \
    && log "Inserted r8169"
fi
Reinicie. Y verifique su ejecución después de suspensión con:
grep r8169 /var/log/syslog
Con la tecnología de Blogger.