Suspensión e Hibernación en Ubuntu 18.04

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 :
sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
sudo systemctl restart NetworkManager
Modificando NetworkManager.conf:
sudo nano /etc/NetworkManager/NetworkManager.conf
[ifupdown]
managed=true
sudo service network-manager restart
Agregando loopback a interfaces (que ya viene incluida en 18.04):
sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
sudo 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
sudo 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:
sudo 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:
sudo nano /lib/systemd/system-sleep/r8169
sudo 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:
sudo /lib/systemd/system-sleep/r8169
Importante:
Instalar r8168-dkms (sudo 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.