Wie ändere ich / proc / acpi / wakeup dauerhaft?

17

Ich hatte ein Problem mit meinem Ubuntu 12.04, das sofort nach dem Suspend aufwachte. Ich habe das Problem gelöst, indem ich die Einstellungen in / proc / acpi / wakeup geändert habe, wie in der folgenden Frage vorgeschlagen: Wie verhindere ich, dass das sofortige Aufwecken angehalten wird und / oder der Ruhezustand einsetzt? .

Nach dem Ändern der Einstellungen wird das System fehlerfrei angehalten und bleibt angehalten. Nachdem ich es jedoch wieder aktiviert habe, weichen die Einstellungen in / proc / acpi / wakeup von denen ab, auf die ich sie festgelegt habe.

Vor dem Suspendieren:

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

Ich fordere das System zum Anhalten auf, und es funktioniert so, wie es sollte. Später nach dem Aufwecken werden die Einstellungen wie folgt geändert:

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

oder

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

Irgendwelche Ideen?


Danke für Ihre Antwort. Leider hat es mein Problem nicht gelöst.

alle

/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

ebenso gut wie

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

sind deaktiviert, und das Notebook wacht nach dem Einschlafen immer noch von selbst auf. Das einzige, worauf es zu reagieren scheint, sind die Einstellungen in / proc / acpi / wakeup, die sich jedes Mal ändern (zurücksetzen), wenn ich mein Notebook ausschalte / neu starte.

Jolan
quelle

Antworten:

11

Ich bin auf Ubuntu 12.10 erneut auf dieses Problem gestoßen. Die Vorschläge von User MTS haben leider auch bei mir nicht funktioniert. Sie können jedoch ein Skript schreiben, um die USB-Eigenschaften /proc/acpi/wakeupunmittelbar vor jeder Unterbrechung automatisch festzulegen .

Die Lösung basiert auf dem Erstellen eines Suspend- Hooks (basierend auf diesem Archwiki-Artikel ). Speichern Sie das Folgende als /usr/lib/pm-utils/sleep.d/45fixusbwakeup, und stellen Sie sicher, dass es ausführbar ist ( 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

Dadurch wird der Status jedes derzeit aktivierten USB-Geräts auf Deaktiviert geändert . Wenn Sie nur bestimmte USB-Geräte ändern möchten, ändern Sie die for-Schleife im Skript. Zum Beispiel, um nur USB1 und USB3 zu ändern

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

zu

for usb in 'USB1' 'USB3';

Hoffentlich hilft das jemand anderem, der das gleiche Problem hat. Dieser Ansatz löste das Problem für mich.

GjjvdBurg
quelle
1
Vielen Dank! Ich habe dieses Skript geändert, um das Wakup von USB-Geräten auf meinem Sony Vaio-Laptop zu deaktivieren: gist.github.com/rutsky/1ed8e9779f0b2941c5a6
Vladimir Rutsky
Ich habe Ihr Skript geändert, um das Aufwecken beim Öffnen von LID zu deaktivieren (aus meiner Sicht eine wirklich blöde und nervige Funktion). Vielen Dank!
Gumkins
Dieser besonders nützliche Hook funktioniert in Ubuntu und Kubuntu, aber nicht in Xubuntu 15.04. Ich frage mich, warum ... :(
Reloader
1
Hier ist ein modifiziertes Skript von Vladimir Rutsky für systemd sleep hook anstelle von pm-utils: gist.github.com/kepi/9dea7aee8a59f3e7c10a
Kepi
1
Wenn dies für Ubuntu 16.04 aktualisiert werden könnte, wäre es großartig. Ich habe die Lösung von hier aus verwendet: askubuntu.com/a/620555/463546 (die ältere Lösung), aber insgesamt ist sie etwas umständlich.
Aleksandr Dubinsky
9

Vielleicht hilft http://forum.xbmc.org/showthread.php?tid=121158 ?

Dies ist, was es sagt:

Wenn Sie ein Update auf den 3.2-Kernel durchführen (was aufgrund des aktuellen Root-Exploits eigentlich jeder sein sollte), werden Sie feststellen, dass Ihr USB-Wakeup möglicherweise nicht funktioniert. Sie haben die Standard-Aktivierungsrichtlinie ( http://www.spinics.net/lists/linux-usb/msg53661.html ) geändert , sodass Sie einige Änderungen vornehmen müssen:

  • Sie müssen das Aufwecken nicht mehr aktivieren /proc/acpi/wakeup, es ist standardmäßig aktiviert
  • Sie müssen das Aufwecken für den USB-Hub zusätzlich zum Gerät in aktivieren /sys/bus/usb/devices/*/power/wakeup

Also das:

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

Wird:

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

Hoffentlich erspart dies anderen die Behebung des gleichen Problems.

MTS
quelle
2

Für Ubuntu 15+ müssen Sie systemdanstelle von verwenden rc.local. Sie können "Systemd-Dienst erstellen" googeln und den Anweisungen folgen. Beachten Sie jedoch, dass das Umleiten der Ausgabe an /proc/acpi/wakeupschwierig ist. Damit es richtig funktioniert, müssen Sie Folgendes tun:

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

Beispielausgabe für die Servicedatei (zB /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

Oder hier in diesem Kern

Derek DeRaps
quelle