Come posso rendere permanenti le modifiche a / proc / acpi / wakeup?


17

Ho avuto un problema con Ubuntu 12.04 che mi svegliavo subito dopo essere andato in sospensione. Ho risolto il problema modificando le impostazioni in / proc / acpi / wakeup, come suggerito in questa domanda: Come posso evitare che il risveglio immediato venga sospeso e / o ibernato? .

Dopo aver modificato le impostazioni, il sistema va in modo impeccabile in sospensione e rimane sospeso, ma dopo che lo riattivo, le impostazioni in / proc / acpi / wakeup sono diverse da quelle che ho impostato.

Prima di andare a sospendere:

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

Dico al sistema di sospendere e funziona come dovrebbe. Ma dopo averlo svegliato, le impostazioni sono cambiate in uno dei due seguenti:

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

o

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

Qualche idea?


Grazie per la vostra risposta. Purtroppo non ha risolto il mio problema.

tutto di

/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

così come

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

sono disabilitati e il notebook si sveglia ancora da solo subito dopo aver dormito. L'unica cosa a cui sembra reagire sono le impostazioni in / proc / acpi / wakeup, che continuano a cambiare (ripristinare) ogni volta che spengo / riavvio il notebook.

Risposte:


11

Ho riscontrato di nuovo questo problema su Ubuntu 12.10. Purtroppo i suggerimenti dell'utente MTS non hanno funzionato per me. Tuttavia, è possibile scrivere uno script per impostare automaticamente le proprietà USB /proc/acpi/wakeupprima di ogni sospensione.

La soluzione si basa sulla creazione di un hook di sospensione (basato su questo articolo di Archwiki ). Salvare quanto segue come /usr/lib/pm-utils/sleep.d/45fixusbwakeupe assicurarsi di renderlo eseguibile ( 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

Quello che fa è cambiare lo stato di ogni dispositivo USB che è attualmente abilitato a disabilitato. Se si desidera modificare solo dispositivi USB specifici, modificare il ciclo for nello script. Ad esempio per modificare solo le modifiche USB1 e USB3

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

per

for usb in 'USB1' 'USB3';

Spero che questo aiuti qualcun altro che ha lo stesso problema. Questo approccio ha risolto il problema per me.


1
Grazie! Ho modificato questo script per disabilitare la riattivazione da dispositivi USB sul mio laptop Sony Vaio: gist.github.com/rutsky/1ed8e9779f0b2941c5a6
Vladimir Rutsky

Ho modificato il tuo script per disabilitare il wakeup all'apertura del LID (funzionalità davvero stupida e fastidiosa dal mio punto di vista). Grazie!
Gumkins,

Questo hook extra utile funziona in Ubuntu e Kubuntu, ma non in Xubuntu 15.04. Mi chiedo perché ... :(
Reloader il

1
Ecco lo script modificato da Vladimir Rutsky per systemd sleep hook anziché pm-utils: gist.github.com/kepi/9dea7aee8a59f3e7c10a
Kepi

1
Se questo potesse essere aggiornato per Ubuntu 16.04, sarebbe fantastico. Ho usato la soluzione da qui: askubuntu.com/a/620555/463546 (la soluzione precedente), ma è un po 'ingombrante in totale.
Aleksandr Dubinsky,

9

Forse http://forum.xbmc.org/showthread.php?tid=121158 ti aiuterà?

Questo è ciò che dice:

Per coloro che si stanno aggiornando al kernel 3.2 (che dovrebbe essere chiunque a causa del recente exploit di root), noterai che il tuo risveglio USB è probabilmente rotto. Hanno cambiato la politica di riattivazione predefinita ( http://www.spinics.net/lists/linux-usb/msg53661.html ), quindi dovrai apportare un paio di modifiche:

  • non è più necessario abilitare il risveglio /proc/acpi/wakeup, è abilitato per impostazione predefinita
  • è necessario abilitare la sveglia per l'hub USB oltre al dispositivo in /sys/bus/usb/devices/*/power/wakeup

Così questo:

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

diventa:

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

Speriamo che questo salvi gli altri dalla risoluzione dello stesso problema.


2

Per Ubuntu 15+, è necessario utilizzare systemdinvece di rc.local. Puoi google "Creare un servizio systemd" e seguire le istruzioni, ma tieni presente che il reindirizzamento dell'output /proc/acpi/wakeupè complicato. Per farlo funzionare correttamente, devi fare qualcosa del tipo:

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

Esempio di output per il file di servizio (ad es. /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

O qui in questo senso

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.