J'utilise Ubuntu 16.04 LTS sur mon Lenovo G50 et tout se passe bien, sauf que je ne peux pas fermer le couvercle de mon ordinateur portable sans avoir besoin de redémarrer par la suite. Lorsque je ferme le couvercle (ou si je lance pm-suspend
), l'écran de mon ordinateur portable s'assombrit pendant quelques secondes, puis se rallume.
Le problème est que lorsque je tente de le reprendre, mon ordinateur portable se transforme en pomme de terre ... Pour une raison quelconque, le gestionnaire de réseau (wifi et ethernet) ne fonctionne pas du tout, le terminal devient extrêmement lent et je ne peux plus courir toute commande utilisant Sudo
car elle y sera suspendue pour toujours.
J'ai essayé de changer le fichier logind.conf
, j'ai essayé de changer le Power System Settings
, j'ai mis à jour mon pilote Intel Graphics, j'ai installé des outils tels que pmi
ou laptop-mode
... Je manque d'idées mais je ferais n'importe quoi pour résoudre ce problème.
Si des informations système peuvent vous être utiles, faites-le-moi savoir et je les ajouterai à l'article.
Après avoir lu, j'ai découvert que le problème venait de la carte WiFi Qualcomm Atheros QCA6164 utilisée dans de nombreux ordinateurs portables Lenovo (G50-80 dans mon cas). Ubuntu ne semble pas avoir le firmware approprié pour cette carte, ce qui la fait agir.
J'ai aussi découvert qu'éteindre le Wifi avant de fermer mon ordinateur portable empêcherait tout problème de bugger, alors j'ai mis ça et la solution à partir de ça post et créé un fichier dans /etc/acpi/
pour gérer le événement de fermeture du couvercle.
Ajoutez le code suivant en utilisant Sudo nano /etc/acpi/lid.sh
:
#!/bin/sh
grep -q closed /proc/acpi/button/lid/LID0/state
if [ $? = 0 ]
then
nmcli radio wifi off
pm-suspend
else
nmcli radio wifi on
fi
Ensuite, ajoutez les lignes suivantes en utilisant Sudo nano /etc/acpi/events/lm_lid
:
event=button/lid.*
action=/etc/acpi/lid.sh
Maintenant, décommentez et définissez la ligne suivante en utilisant Sudo nano /etc/systemd/logind.conf
:
HandleLidSwitch=ignore
Enfin, entrez dans le System Settings > Power
et mettez toutes les options du couvercle de fermeture dans Do Nothing
.
Exécutez ce qui suit pour définir les autorisations et finaliser les modifications:
Sudo chmod 755 /etc/acpi/lid.sh
Sudo /etc/init.d/acpid restart
Sudo service systemd-logind restart
J'espère que cela fonctionne pour vous!
Ouvrez le fichier /etc/systemd/logind.conf dans un éditeur de texte en tant que root, par exemple.
Sudo nano /etc/systemd/logind.conf
Changer cette ligne:
#HandleLidSwitch=ignore
A cette ligne:
HandleLidSwitch=suspend
Assurez-vous qu'il est commenté.
Alternativement, vous pouvez également ajouter cette ligne, mais je préfère le premier:
HandleLidSwitchDocked=suspend
Puis lancez:
Sudo service systemd-logind restart
Ou redémarrage.
dmesg|less
Il y a généralement une entrée indiquant quelle application a provoqué l'échec de la suspension:
[32467.560058] Freezing of tasks failed after 20.01 seconds (1 tasks refusing to freeze, wq_busy=0):
[32467.560115] plasma-desktop D 0000000000000000 0 2065 1 0x00800004
Sudo apt-get install uswsusp
Testez maintenant la suspension avec:
Sudo s2ram
Si cela ne fonctionne pas, utilisez:
Sudo s2ram --force
Ensuite, éditez ce fichier:
Sudo nano /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux
Changer le code en:
#!/bin/sh
/sbin/s2ram --force
Edit: Un autre correctif:
Mettez un script dans '/etc/pm/sleep.d/', les scripts seront exécutés à la suspension et à la reprise. Le nom du fichier doit commencer par un numéro de commande, 00-49 pour les scripts utilisateur (pour plus de détails, voir man pm-suspend).
Le script pourrait ressembler à ceci
#!/bin/sh
(killall -9 mount.nfs; exit 0)
Si vous rencontrez des problèmes, vérifiez /var/log/pm-suspend.log qui enregistrera la tentative de suspension et l'exécution de votre script.
Étape 1: Ouvrez un terminal et créez un fichier de script comme suit:
Sudo nano /etc/pm/sleep.d/20_custom-ehci_hcd
Étape 2: Copiez l'intégralité du script ci-dessous dans le fichier que vous venez de créer et enregistrez-le:
#!/bin/sh
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
#for bus in $EHCI_BUSES; do
echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/unbind
# done
done
}
bindDev() {
if [ -s $DEV_LIST ]; then
while read driver dev; do
DDIR=$DRIVERS_DIR/${driver}_hcd
#for bus in $EHCI_BUSES; do
echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/bind
#done
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
chvt 1
chvt 7
}
EHCI_BUSES="0000:00:1a.0 0000:00:1d.0"
case "$1" in
hibernate|suspend)
unbindDev;;
resume|thaw)
bindDev;;
esac
Étape 3: Donnez les autorisations d'exécution du script en tapant:
Sudo chmod 755 /etc/pm/sleep.d/20_custom-ehci_hcd