web-dev-qa-db-fra.com

L'ordinateur portable ne se suspend pas correctement lorsque le couvercle se ferme

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.

2
theGirrafish

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!

1
theGirrafish

Pour changer l'action du couvercle dans Ubuntu:

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.

Pour résoudre le mode hibernation/suspension, vous devez taper la commande suivante dans le terminal:

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

Fixer la suspension sur les ordinateurs portables

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.

buntu Suspend ne fonctionne pas FIX

É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
3
An0n