Comment puis-je apporter des modifications permanentes à / proc / acpi / wakeup?

17

J'ai eu un problème avec mon Ubuntu 12.04 qui se réveillait immédiatement après être passé en veille. J'ai résolu le problème en modifiant les paramètres dans / proc / acpi / wakeup, comme suggéré dans cette question: Comment empêcher le réveil immédiat de la suspension et / ou de l'hibernation? .

Après avoir modifié les paramètres, le système passe sans problème en suspension et reste suspendu, mais après l'avoir réactivé, les paramètres dans / proc / acpi / wakeup sont différents de ceux que je leur ai définis.

Avant d'aller suspendre:

cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
SMB0      S4    *disabled  pci:0000:00:03.2
PBB0      S4    *disabled  pci:0000:00:09.0
HDAC      S4    *disabled  pci:0000:00:08.0
XVR0      S4    *disabled  pci:0000:00:0c.0
XVR1      S4    *disabled  
P0P5      S4    *disabled  
P0P6      S4    *disabled  pci:0000:00:15.0
GLAN      S4    *enabled   pci:0000:03:00.0
P0P7      S4    *disabled  pci:0000:00:16.0
P0P8      S4    *disabled  
P0P9      S4    *disabled  
USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *disabled  pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *disabled  pci:0000:00:06.1
PWRB      S4    *enabled   
SLPB      S4    *enabled

Je dis au système de suspendre, et cela fonctionne comme il se doit. Mais plus tard, après l'avoir réveillé, les paramètres sont modifiés comme suit:

USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

ou

USB0      S3    *enabled   pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *enabled   pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

Des idées?


Merci pour votre réponse. Malheureusement, cela n'a pas résolu mon problème.

tous

/sys/bus/usb/devices/usb1/power/wakeup
/sys/bus/usb/devices/usb2/power/wakeup
/sys/bus/usb/devices/usb3/power/wakeup
/sys/bus/usb/devices/usb4/power/wakeup

aussi bien que

/sys/bus/usb/devices/3-1/power/wakeup

sont désactivés et l'ordinateur portable se réveille toujours tout de suite après s'être endormi. La seule chose à laquelle il semble réagir, ce sont les paramètres dans / proc / acpi / wakeup, qui changent (se réinitialisent) chaque fois que j'éteins / redémarre mon ordinateur portable.

Jolan
la source

Réponses:

11

J'ai rencontré à nouveau ce problème sur Ubuntu 12.10. Malheureusement, les suggestions de l'utilisateur MTS n'ont pas fonctionné pour moi. Cependant, vous pouvez écrire un script pour définir automatiquement les propriétés usb /proc/acpi/wakeupjuste avant chaque suspension.

La solution est basée sur la création d'un crochet de suspension (basé sur cet article Archwiki ). Enregistrez ce qui suit sous /usr/lib/pm-utils/sleep.d/45fixusbwakeupet assurez-vous de le rendre exécutable ( chmod +x /usr/lib/pm-utils/sleep.d/45fixusbwakeup).

#!/bin/bash
case $1 in
    hibernate)
            echo "Going to suspend to disk!"
            ;;
    suspend)
            echo "Fixing acpi settings."
            for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;
            do
                    state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'`
                    echo "device = $usb, state = $state"
                    if [ "$state" == "enabled" ]
                    then
                            echo $usb > /proc/acpi/wakeup
                    fi
            done
            echo "Suspending to RAM."
            ;;
    thaw)
            echo "Suspend to disk is now over!"
            ;;
    resume)
            echo "We are now resuming."
            ;;
    *)
            echo "Somebody is callin me totally wrong."
            ;;
esac

Cela modifie le statut de chaque périphérique USB actuellement activé à désactivé. Si vous souhaitez uniquement modifier des périphériques USB spécifiques, modifiez la boucle for dans le script. Par exemple, pour modifier uniquement les modifications USB1 et USB3

for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;

à

for usb in 'USB1' 'USB3';

J'espère que cela aide quelqu'un d'autre qui a le même problème. Cette approche a résolu le problème pour moi.

GjjvdBurg
la source
1
Merci! J'ai modifié ce script pour désactiver le réveil des périphériques USB sur mon ordinateur portable Sony Vaio: gist.github.com/rutsky/1ed8e9779f0b2941c5a6
Vladimir Rutsky
J'ai modifié votre script pour désactiver le réveil sur LID ouvert (fonctionnalité vraiment stupide et ennuyeuse de mon point de vue). Je vous remercie!
gumkins
Ce crochet très utile fonctionne dans Ubuntu et Kubuntu, mais pas dans Xubuntu 15.04. Je me demande pourquoi ... :(
Reloader
1
Voici script modifié de Vladimir Rutsky pour crochet de sommeil systemd au lieu de pm-utils: gist.github.com/kepi/9dea7aee8a59f3e7c10a
Képi
1
Si cela pouvait être mis à jour pour Ubuntu 16.04, ce serait génial. J'ai utilisé la solution d'ici: askubuntu.com/a/620555/463546 (l'ancienne solution), mais c'est un peu lourd au total.
Aleksandr Dubinsky
9

Peut-être que http://forum.xbmc.org/showthread.php?tid=121158 vous aidera?

C'est ce qu'il dit:

Pour ceux qui mettent à jour le noyau 3.2 (qui devrait être tout le monde en raison du récent exploit root), vous remarquerez que votre réveil USB est probablement cassé. Ils ont changé la politique de réveil par défaut ( http://www.spinics.net/lists/linux-usb/msg53661.html ), vous devrez donc apporter quelques modifications:

  • vous n'avez plus besoin d'activer le réveil /proc/acpi/wakeup, il est activé par défaut
  • vous devez activer le réveil pour le concentrateur USB en plus du périphérique /sys/bus/usb/devices/*/power/wakeup

Donc ça:

echo USB1 > /proc/acpi/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

Devient:

echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

Espérons que cela évite aux autres de résoudre le même problème.

MTS
la source
2

Pour Ubuntu 15+, vous devez utiliser à la systemdplace de rc.local. Vous pouvez google "Création d'un service systemd" et suivez les instructions, mais notez que rediriger la sortie vers /proc/acpi/wakeupest délicat. Pour le faire fonctionner correctement, vous devez faire quelque chose comme:

/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'

Exemple de sortie pour le fichier de service (par exemple, /etc/systemd/system/suspendfix.service):

[Unit]
Description=fix to prevent system from waking immediately after suspend

[Service]
ExecStart=/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Ou ici dans cet esprit

Derek DeRaps
la source