Pm-utils (Italiano)

From ArchWiki
Revision as of 10:05, 22 September 2013 by Nierro (Talk | contribs) (Ibernazione (suspend2disk): allineata)

Jump to: navigation, search


Sommario help replacing me
Descrive installazione, configurazione, utilizzo e risoluzione dei problemi di pm-utils, il nuovo framework per l'impostazione della sospensione e per la variazione dello stato di alimentazione.
Articoli Correlati
Uswsusp
Tuxonice

pm-utils è un framework per l'impostazione della sospensione e per la variazione dello stato di alimentazione. É progettato per sostituire gli script come quelli forniti dal pacchetto powersave.

pm-utils è una collezione di script di shell che integrano nella modalità kernel la sospensione/rispristino con vari hack necessari per risolvere i bug nei driver e sottosistemi che non sono ancora a conoscenza della sospensione. E 'facilmente estendibile tramite l'ausilio di hook personalizzati in una directory, che possono essere creati dall'amministratore di sistema o hook che possono forniti da un pacchetto, soprattutto se questo pacchetto richiede particolare attenzione nel corso di una sospensione del sistema o la variazione dello stato di alimentazione.

Un aspetto meno conosciuto è quello che simula le commutazioni fatte da Laptop Mode Tools.

Utilizzato in combinazione col pacchetto cpupower, gli utenti notebook (e desktop) sono dotati di una suite completa per la gestione dell'alimentazione.

Contents

Installazione

Il pacchetto pm-utils è reperibile nei Repository ufficiali.

Note: Se si riscontrano problemi durante la riproduzione di video, potrebbe essere necessario installare anche di vbetool dai repository ufficiali.
Note: Se si parte da una nuova installazione, assicurarsi di installare anche il pacchetto acpi.

Eseguire pm-suspend, pm-suspend-hybrid o pm-hibernate come utente root per attivare la sospensione manualmente. Gli script di sospensione scrivono i loro log in /var/log/pm-suspend.log.

Installare backend per la sospensione alternativi (opzionale)

Il pacchetto di Arch Linux viene fornito con il supporto per i seguenti backend: kernel,tuxonice e uswsusp, si può controllare quali backend sono presenti nel sistema con il seguente comando:

pacman -Ql pm-utils | grep module.d

Il backend per la sospensione è specificato dalla variabile SLEEP_MODULE nel file di configurazione /etc/pm/config.d ed è il backend predefinito il valore kernel. Se si desidera utilizzare dei backend per la sospensione alternativi, come uswsusp o tuxonice, è necessario che i relativi pacchetti siano installati, Alcuni di essi sono reperibili su AUR:

Inoltre, pm-utils contiene in /usr/lib/pm-utils/video-quirks/ delle regole speciali per esigenze particolari, ad esempio se c'è un driver video problematico, in modo che venga attuata una politica non-standard all'atto della sospensione.

Configurazione di base

Standby / Sospensione su RAM

Nel caso ideale , l'esecusione di sudo pm-suspend dovrebbe inizializzare la sospensione in memoria RAM, ovvero tutti gli stati in esecuzione verranno preservati in RAM e tutti gli altri componenti che sono eseguiti in ram verrano spenti per risparmiare energia. la pressione del tasto di accensione dovrebbe inizializzare il rispristino da questo stato.

Note: Si raccomanda di mettere sempre i driver del network nella stringa SUSPENDED_MODULES, poichè è risaputo che la maggior parte di questi possa causare problemi dopo lo standby. I driver Intel iwlwifi, Atheros ath5k e Realtek r8* sono stati tutti segnalati per aver generato problemi dopo il resume dalla sospensione, sui vari forum. iwlwifi limita anche la connessione a 1Mbps se non è ricaricato dopo la sospensione.

In alcuni casi, può capitare che l'esecuzione di pm-suspend si blocchi o causi altri problemi. Ciò potrebbbe essere causato da un modulo che si comporta in modo "anomalo". Se si conosce quale moduli sia la causa di questi problemi, aggiungendo SUSPEND_MODULES al file di configurazione /etc/pm/config.d/modules, con la seguente sintassi

SUSPEND_MODULES="uhci_hd button ehci_hd"

dovrebbe imporre lo scaricamento dei moduli specificati prima di procedere alla sospensione, e di ricaricarli dopo il ripristino (resume).

Per configurare l'esecuzione automatica di pm-suspend in base ad eventi specifici, come la chiusura del coperchio di un portatile, si faccia riferimento all'articolo Acpid.

Ibernazione (suspend2disk)

Bisogna seguire le istruzioni in Suspend and Hibernate#Hibernation per configurare l'ibernazione.

In alternativa, se non si utilizza il kernel backend, si veda Uswsusp#Configuration o TuxOnIce#Setting up the bootloader.

Sospensione e Ibernazione come utente

Esistono tre metodi per avviare la sospensione senza avere la necessità di fornire la password di root : tramite Udev, UPower, e dando i giusti permessi all'utente tramite visudo.

Metodo UPower

Installare upower per la sospensione su RAM (Sopsensione):

$ dbus-send --system --print-reply --dest="org.freedesktop.UPower" \
/org/freedesktop/UPower org.freedesktop.UPower.Suspend

Per la sospensione su disco (Ibernazione):

$ dbus-send --system --print-reply --dest="org.freedesktop.UPower" \
/org/freedesktop/UPower org.freedesktop.UPower.Hibernate

Metodo con i permessi Utente

Siccome gli script pm-utils devono essere eseguiti da root, si consiglia di rendere gli script accessibili agli utenti normali eseguendo sudo senza fornire la password di root. Per far ciò, editare il file /etc/sudoers con visudo come utente root. Si veda sudo per ulteriori informazioni.

Aggiungere le seguenti linee, sostituire username con il vostro nome utente, successivamente salvare ed uscire da visudo:

username  ALL = NOPASSWD: /usr/sbin/pm-hibernate
username  ALL = NOPASSWD: /usr/sbin/pm-suspend

In alternativa si può abilitare un intero gruppo utilizzando le seguenti linee, anche in questo caso sostituire group con il vostro:

%group   ALL = NOPASSWD: /usr/sbin/pm-hibernate
%group   ALL = NOPASSWD: /usr/sbin/pm-suspend
Nota: Queste devono essere poste dopo i privilegi degli utenti specificati, es., username ALL=(ALL) ALL, o non non funzionerà.

Ora potrete eseguire gli script senza utilizzare la password di root , semplicemente digitando:

$ sudo pm-hibernate

oppure :

$ sudo pm-suspend

Inoltre, aggiungere il proprio utente al gruppo power permette di utilizzare molti applet che si occupano della sospensione. Non non si effettua questa procedura quando si tenterà di utilizzare un applet integrato, come ad esempio GNOME shutdown, per sospendere o ibernare il proprio computer, esso non funzionerà correttamente ottenendo solo il blocco dello schermo.

 # gpasswd -a username power

Ora dovreste essere in grado di utilizzare gli strumenti di gestione energetica del vostro ambiente desktop, ad esempio per sospendere o ibernare il sistema alla chiusura del coperchio del portatile, o quando si sta esaurendo la batteria, etc...

Risparmio Energetico

pm-utils è in grado di eseguire dei comandi a seconda se il sistema è collegato alla rete o meno. Quindi uno script deve essere creato all'interno della cartella /etc/pm/power.d/. Un esempio di tale script può essere trovato nel forum crunchbang. Assicuratevi che upower sia in esecuzione al fine di rilevare i cambiamenti Stati AC, si veda (questa discussione per maggiori informazioni).

Cambiare la retroilluminazione in dipendenza dell'alimentazione

Un possibile esempio è riportato qua sotto, per cambiare la luminosità dello schermo in accordo con lo stato dell'alimentazione. Creare un file chiamato /etc/pm/power.d/00-brightness col seguente contenuto; cambiare il percorso per l'impostazione della luminosità come pure il valore scritto in quel file tramite echo in base al tuo sistema.

#!/bin/bash

case $1 in
    true)
    echo "Enable screen power saving"
    echo 5 > /sys/class/backlight/acpi_video0/device/backlight/acpi_video0/brightness
    ;;
    false)
    echo "Disable screen power saving"
    echo 14 > /sys/class/backlight/acpi_video0/device/backlight/acpi_video0/brightness
    ;;
esac

Sospensione in caso di idle/inattività

Un metodo si basa sul programma xautolock. Aggiungere quanto segue:

xautolock -time 30 -locker "sudo pm-suspend" &

in ~/.xinitrc. Questo implica che pm-suspend verrà invocato dipo 30 minuti di inattività.

Utilizzare un file di Swap al posto della regolare partizione swap

Se si desidera utilizzare un file di Swap al posto della partizione swap si veda [[Swap#Swap file]].

Configurazione avanzata

Il file di configurazione principale è /usr/lib/pm-utils/defaults. Si consiglia di non modificare questo file, dal momento che dopo un aggiornamento del pacchetto potrebbe essere sovrascritto con le impostazioni predefinite. Si metta il proprio file di configurazione in /etc/pm/config.d/. Si può semplicemente mettere un semplice file di testo con :

SUSPEND_MODULES="button uhci_hcd"

Nominandolo modules o config in /etc/pm/config.d verranno ignorate le impostazioni del sistema a livello di file di configurazione.

Variabili disponibili per l'uso nei file di configurazione

SUSPEND_MODULES="button"
elenco dei moduli da scaricare prima di sospendere
SLEEP_MODULE="tuxonice uswsusp kernel"
Sistema predefinito per effettuare lo sleep/wake del sistema
HIBERNATE_MODE="shutdown"
forza il sistema di spegnimento, piuttosto che il riavvio

Disabilitare un Hook

Se si esegue un Hook che non ci aggrada o che si pensa non sia utile o addirittura dannoso, gradiremmo un bug report per questo. Si può però facilmente disabilitare un Hook semplicemente creando un file vuoto corrispondente all'Hook in questione in /etc/pm/sleep.d/. Ad esempio se si desidera disattivare l'Hook /usr/lib/pm-utils/sleep.d/45pcmcia, lo si può fare facilmente eseguendo:

# touch /etc/pm/sleep.d/45pcmcia

E non impostare nessun bit eseguibile su quell'Hook fittizio .

Note: assicurarsi di creare il file nella cartella appropriata. Se si sta ad esempio cercando di disabilitare un hook in /usr/lib/pm-utils/power.d, l'hook fittizio dovrà essere inserito in /etc/pm/power.d.

Metodo alternativo

Creare un file in /etc/pm/config.d con i moduli che si desidera mettere in blacklist nella variabile HOOK_BLACKLIST. Ad esempio, per gestire il risparmio energetico da soli, utilizzare:

HOOK_BLACKLIST="hal-cd-polling intel-audio-powersave journal-commit laptop-mode pcie_aspm readahead sata_alpm sched-powersave xfs_buffer wireless"

Creazione di un Hook personale

Se si vuole fare qualcosa di specifico per la configurazione durante la sospensione/ibernazione, allora si può facilmente mettere un Hook personale in /etc/pm/sleep.d. Gli Hook in questa directory saranno chiamati in ordine alfabetico durante la sospensione (che è la ragione i loro nomi iniziano tutti con 2 cifre, per rendere esplicito l'ordine) e in ordine inverso durante la ripresa. La convenzione generale da seguire su come ordinare il numero è il seguente:.

00 - 49
Hook in dotazione agli utenti e per la maggior parte dei pacchetti. Se un Hook si assume che tutti i soliti servizi e le infrastrutture userspace sono ancora in esecuzione, dovrebbe essere qui.
50 - 74
Hook di gestione di servizio. Hook che avviano o arrestano un servizio appartengono a questa gamma. Gli Hook a 50 o inferiori, suppongono che tutti i servizi siano ancora attivi.
75 - 89
Modulo e non-core di gestione hardware. Se un Hook ha bisogno di caricare/scaricare un modulo, o se ha bisogno di non avere un hardware video attivo che altrimenti bloccherebbero la sospensione o l'ibernazione in uno stato sicuro, appartiene a questa gamma. Gli Hook a 75 o precedenti possono presupporre che tutti i moduli siano ancora caricati.
90 - 99
Riservato ad Hook critici di sospensione.

Di seguito viene mostrato un Hook dimostrativo ed inutile, il quale aggiunge delle linee informative nel proprio file di log:

#!/bin/bash
case $1 in
    hibernate)
        echo "Il sistema si accinge alla sospensione su disco!"
        ;;
    suspend)
        echo "Il sistema si accinge alla sospensione in RAM!"
        ;;
    thaw)
        echo "La sospensione su disco è terminata, il sistema è in ripristino..."
        ;;
    resume)
        echo "La sospensione su Ram è terminata..."
        ;;
    *)  echo "C'è qualcosa di totalmente sbagliato."
        ;;
esac

Mettere questo file in /etc/pm/sleep.d/66dummy, dare un chmod +x /etc/pm/sleep.d/66dummy ed esso genererà alcuni messaggi inutili durante la sospensione ed il ripristino.

Attenzione: Tutti gli Hook sono eseguiti come utente root. Questo significa che è necessario fare molta attenzione quando si creano file temporanei, controllare che la variabile PATH sia impostata correttamente, ecc. Al fine di evitare problemi di sicurezza..

Come funziona

Il concetto è abbastanza semplice: lo script principale (pm-action, denominato tramite link simbolici sia come pm-suspend, pm-hibernate o pm-suspend-hybrid) esegue i cosiddetti hooks, script eseguibili, nell'ordine alfabetico ordinato con il parametro suspend (sospensione in RAM) o hibernate (sospensione su disco). Una volta che tutti gli hooks sono eseguiti, mette la macchina in sleep. Dopo che la macchina viene ripresa dallo stato di sleep, tutti gli hooks vengono eseguiti in ordine inverso con il parametro resume (ripresa da RAM) o thaw (ripresa da disco). Gli hook sono in grado di eseguire diversi compiti, quali la preparazione del bootloader, fermando il sottosistema Bluetooth o lo scarico dei moduli critici.

Sia pm-suspend che pm-hibernate sono di solito chiamati da Udev, inizializzati da applet desktop come gnome-power-manager o kpowersave.

Nota: suspend-hybrid non è completamente implementato.

Esiste anche la possibilità di impostare la macchina in modalità high-power (performance) e low-power (risparmio energetico), il comando pm-powersave viene utilizzato con una parametro aggiuntivo true o false. Funziona praticamente allo stesso modo del quadro di sospensione.

Gli hooks per la sospensione sono situati in

  • /usr/lib/pm-utils/sleep.d (distribuzione / il pacchetto fornisce gli hooks)
  • /etc/pm/sleep.d (hooks aggiunti dall'amministratore di sistema)

Gli hooks per lo stato di alimentazione sono situati in

  • /usr/lib/pm-utils/power.d ((distribuzione / il pacchetto fornisce gli hooks)
  • /etc/pm/power.d (hooks aggiunti dall'amministratore di sistema)

Gli Hooks in /etc/pm/ prevalgono rispetto a quelli situati in /usr/lib/pm-utils/, per cui l'amministratore di sistema può sovrascrivere le impostazioni di default fornite dalla distribuzione.

Funzionamento di Pm-suspend

Vedremo come vengono delineate le azioni interne quando viene eseguito pm-suspend, descrivendo come pm-utils ricada nuovamente sul metodo kernel se i requisiti di altri metodi non sono soddisfatti.

$ pm-suspend

Il primo passo è quello di un set up preliminare delle variabili e degli script principali (genitori):

export STASHNAME=pm-suspend
export METHOD="$(echo ${0##*pm-} |tr - _)"
. "/usr/lib/pm-utils/pm-functions"

La variabile METHOD viene estratta dal nome del file eseguibile, suspend da pm-suspend e hibernate da pm-hibernate.

La posizione dei parametri di configurazione di runtime è definito in /usr/lib/pm-utils/pm-functions come PM_UTILS_RUNDIR="/var/run/pm-utils" e STORAGEDIR="${PM_UTILS_RUNDIR}/${STASHNAME}/storage". Pertanto STORAGEDIR="/var/run/pm-utils/pm-suspend/storage" è dove pm-suspend posiziona la cache della sua configurazione. Gli hooks disabilitati sono memorizzati in un file di testo contentente il nome dell'hook preceduto da "disable_hook:". I parametri di configurazione vengono aggiunti al file parameters:

$  ls -lah /var/run/pm-utils/pm-suspend/storage/ 
-rw-r--r-- 1 root root  20 May 19 09:57 disable_hook:99video
-rw-r--r-- 1 root root   0 May 19 02:59 parameters
-rw-r--r-- 1 root root 247 May 19 02:59 parameters.rm
-rw-r--r-- 1 root root   9 May 19 02:59 state:cpu0_governor
-rw-r--r-- 1 root root   9 May 19 02:59 state:cpu1_governor

Successivamente pm-functions processerà le fonti dei file presenti in /etc/pm/config.d/ in aggiunta a /usr/lib/pm-utils/defaults. Dopodichè, pm-functions procederà a controllare le fonti specificate dalla variabile $SLEEP_METHOD come /usr/lib/pm-utils/module.d/$SLEEP_METHOD[...] se esistenti:

for mod in $SLEEP_MODULE; do
    mod="${PM_UTILS_LIBDIR}/module.d/${mod}"
    [ -f "$mod" ] || continue
    . "$mod"
done

Altrimenti, se $SLEEP_MODULE risulta vuoto, do_suspend() sarà impostato dal backend kernel, come descritto sopra:

if [ -z "$SUSPEND_MODULE" ]; then
    if grep -q mem /sys/power/state; then
       SUSPEND_MODULE="kernel"
       do_suspend() { echo -n "mem" >/sys/power/state; }
    elif [ -c /dev/pmu ] && pm-pmu --check; then
       SUSPEND_MODULE="kernel"
       do_suspend() { pm-pmu --suspend; }
    elif grep -q standby /sys/power/state; then
       SUSPEND_MODULE="kernel"
       do_suspend() { echo -n "standby" >/sys/power/state; }
    fi
fi

Assumendo che $SLEEP_MODULE non sia vuoto, e che sia specificato il backend uswsusp, /usr/lib/pm-utils/module.d/uswsusp verrà eseguito. Questo script controlla che siano rispettati diversi requisiti (questi sono i requisiti per essere in grado di utilizzare uswsusp):

  • [ -z $SUSPEND_MODULE ]
  • command_exists s2ram
  • grep -q mem /sys/power/state || ( [ -c /dev/pmu ] && pm-pmu --check; );

Se questi requisiti sono soddisfatti, do_suspend() è definita come:

do_suspend()
{
   uswsusp_get_quirks
   s2ram --force $OPTS
}

Ma soprattutto, il modulo uswsusp viene eseguito:

add_before_hooks uswsusp_hooks
add_module_help uswsusp_help

La prioma funzione, add_before_hook, disabilita gli hook pm-utils e 99video, in quanto questa funzionalità viene sostituita da s2ram. La seconda funzione, add_module_help, aggiunge in aiuto uswsusp-module-specific, che in sostanza sostituisce la funzione di aiuto fornito da 99video.

Ritornare a pm-suspend:

command_exists "check_$METHOD" && command_exists "do_$METHOD"
"check_$METHOD"

Questo verifica che i metodi check_suspend e do_suspend siano stati definiti. Il metodo check_suspend verifica semplicemente che la variabile $SUSPEND_MODULE non sia vuota:

check_suspend() { [ -n "$SUSPEND_MODULE" ]; }

Infine, pm-suspend deve eseguire tutti gli hook che non sono stati disabilitati, sincronizza il buffer del file-system, ed esegue do_suspend:

if run_hooks sleep "$ACTION $METHOD"; then
    # Sleep only if we know how and if a hook did not inhibit us.
    log "$(date): performing $METHOD"
    sync
    "do_$METHOD" || r=128
    log "$(date): Awake."

Il metodo run_hooks è un wrapper per _run_hooks, nel casi che pm-suspend sia chiamato come run_hooks sleep "suspend suspend". Premesso che:

PARAMETERS="${STORAGEDIR}/parameters"
PM_UTILS_LIBDIR="/usr/lib/pm-utils"
PM_UTILS_ETCDIR="/etc/pm"

Il metodo _run_hooks, sarà valido per ogni hook presente in ${PM_UTILS_LIBDIR}/$1.d e ${PM_UTILS_ETCDIR}/$1.d, verificando che la sospensione non li abbi inibiti e aggiornando i parametri di runtime memorizzati in $PARAMETERS, prima che venga eseguito ogni hook tramite run_hook $hook $2. Nel caso della sospensione in ram (Suspend-to-RAM), tutti gli hook presenti in /usr/lib/pm-utils/sleep.d/,/etc/pm/sleep.d/ verranno enumerati, e run_hook passerà i parametri $hook e "suspend suspend". Il metodo run_hook utilizza la funzione hook_ok per verificare che l'hook non sia stato disattivato, prima di eseguire l'hook con il parametro "suspend suspend".

Risoluzione dei problemi

Nel caso la sospensione o l'ibernazione non sia avvenuta correttamente, potrete trovare probabilmente delle informazioni nel file di log /var/log/pm-suspend.log. Ad esempio quali hook sono stati eseguiti e l'output del loro stato in uscita, dovrebbero essere presenti in quel file di log.

Inoltre, controllare l'output del comando pm-is-supported. Questo comando (con il flag --Hibernate o --suspend) farà qualche controllo di integrità e segnalerà eventuali errori rilevati nella configurazione. Non è in grado di rilevare tutti i possibili errori, ma può ancora essere utile.

Segmentation faults

Se si riscontrano difetti di segmentazione che potrebbe causare il blocco del sistema e di chiavi mancanti, provare a impostare l'UUID nei punti di montaggio in /boot/grub/menu.lst come spiegato sopra.

Il sistema si riavvia invece di ripristinarsi dalla sospensione

Questo problema è iniziato quando è stato introdotto nel kernel il salvataggio dell'area NVS durante la sospensione (dal kernel 2.6.35-rc4) (messaggio sulla mailing list). Tuttavia, è noto che questo meccanismo non funziona su tutte le macchine, gli sviluppatori del kernel sono venuti in aiuto consentendo all'utente di disabilitarla tramite l'aggiunta dell'opzione acpi_sleep=nonvs alla riga del kernel. Questa opzione potrebbe essere passare al kernel attraverso le opzioni di GRUB Legacy modificando il file /boot/grub/menu.lst (GRUB 0,97) sulla linea del kernel.

Il sistema si spegne invece di ripristinarsi dalla sospensione

Su un Acer Aspire AS3810TG, riprendendo dalla sospensione si spegne il computer, invece di ripristinarsi. Se si verifica un problema simile, si provi a passare il parametro i8042.reset=1 al kernel. In GRUB2, la riga in /boot/grub/grub.cfg dovrebbe essere qualcosa simile a questo:

  linux /vmlinuz-linux root=/dev/vg00/root resume=/dev/vg00/swap i8042.reset=1 ro

Anceh se non testato, si potrebbe impostare questo parametro senza la necessità di riavviare il sistema, dando il seguente comando:

# sysctl -e -w i8042.reset=1

Schermo nero al ripristino dalla sospensione

Alcuni portatili (ad esempio Dell Inspiron Mini 1018) mostrano una schermata nera senza retroilluminazione dopo il ripristino dalla sospensione. Se questo accade, provate a entrare nel BIOS del computer portatile e disabilitare il parametro Intel SpeedStep, se presente.

Si potrebbe provare anche di non disabilitare SpeedStep, creando un piccolo script in /etc/pm/sleep.d/ con questo contenuto (richiede vbetool):

#!/bin/sh
#
case "$1" in
suspend)
;;
resume)
sleep 5
vbetool dpms off
vbetool dpms on
;;
*) exit $NA
;;
esac

Salvatelo nominandolo come desiderate, ma anteponete 00 all'inizio del nome, in questo modo verrà richiamato per ultimo quando il sistema si ripristinerà dalla sospensione; ricordarsi di dare i permessi di esecuzione, tramite il comando chmod +x, allo script. Provate a cambiare il valore del tempo di sleep se gli altri comandi vengono richiamati troppo presto, o nel caso funzioni a dovere potete anche eliminare quella stringa. Altri laptop (ad esempio Toshiba Portégé R830) presenteranno semplicemente uno schermo nero senza luminosità dopo il resume dalla sospensione, con le ventole alla massima velocità. Nel caso accadesse ciò, si provi a disabilitare dal BIOS il VT-d virtualization setting passando a "VT-x only".

Problemi con VirtualBox

I moduli del kernel per VirtualBox causano il fallimento di pm-suspend e [[ic|pm-hibernate}} su alcuni laptop. (Vedi questa discussione). Invece di sospendere o di ibernare, il sistema si blocca e fa lampeggiare il LED (l'indicatore di sospensione nei ThinkPad sono gli indicatori Caps Lock e Scroll Lock, nel caso della MSI Wind U100). I log di pm-suspend e pm-hibernate sembrano normali.

Il problema può essere risolto rimuovendo i moduli prima della sospensione o della ibernazione e di ricaricarli in seguito. Ciò può essere realizzato attraverso uno script:

#!/bin/sh
 
 rmmod vboxdrv
 pm-hibernate
 modprobe vboxdrv
Nota: Alcuni utenti riportano che sia sufficiente ricompilare il modulo del kernel eseguendo vboxbuild da root.

Ibernazione in assenza di una partizione di Swap

Se si tenta di ibernare senza una partizione di swap attiva, il sistema effettuerà la procedura di ibernazione, ma poi subito riprenderà di nuovo. Non ci sono messaggi di errore e di avviso che non vi è alcuna partizione di swap, anche quando è attivata la registrazione dettagliata, quindi questo problema può essere molto difficile da rilevare eseguendo il debug. Su un sistema, la partizione di swap è stata in qualche modo danneggiata e disattivata, per cui questo può accadere anche se si imposta una partizione di swap durante l'installazione. Se l'ibernazione visualizza questo comportamento, assicurarsi che effettivamente sia presente una partizione di swap che viene utilizzato come tale. L'output del comando blkid dovrebbe somigliare, come esempio, a questo:

# blkid
/dev/sda1: UUID="00000-000-000-0000000" TYPE="ext2" 
/dev/sda2: UUID="00000-000-000-0000000" TYPE="ext4"
/dev/sda3: UUID="00000-000-000-0000000" TYPE="ext4"
/dev/sda4: UUID="00000-000-000-0000000" TYPE="swap"

con una delle linee che hanno "swap" alla voce TYPE=. Se questo non è il caso, consultare il wiki su Swap per le istruzioni su come ricreare e/o riattivare una partizione di swap.

Schermo nero con cursore fisso quando si tenta di sospendere il sistema

Se si ottiene una schermata nera con il cursore fisso quando si cerca di sospendere con:

$ Sudo pm-suspend

controllare il file /var/log/pm-suspend.log e si cerchi "ehci" o "xhci". Alcuni dei nomi che si possono leggere potrebbero essere "ehci_hd", "xhci_hd" o "ehci_hcd".

In seguito come root creare il file /etc/pm/config.d/modules e inserire questo codice con il nome esatto del modulo ehci o xhci che avete trovato. Ad esempio:

SUSPEND_MODULES = "ehci_hcd"

La sospensione dovrebbe ora funzionare.

Problema schermo nero

Alcuni utenti hanno segnalato problemi con i loro computer portatili che non riprendono correttamente dopo una sospensione o una ibernazione. Ciò è causato dall'hook autodetect. Questo può essere disabilitato utilizzando lo stesso metodo per aggiungere l'HOOK resume. È sufficiente rimuovere l'hook autodetect dall'elenco e seguire le istruzioni per costruire la nuova immagine. Si veda il paragrafo Hook per il ripristino, per maggiori dettagli sulla costruzione della nuova immagine.

Note: Se si sta utilizzando plymouth quest'ultimo potrebbe essere un'altra causa del problema. Aggiungendo resume davanti a plymouth nell'array "HOOKS" del file /etc/mkinitcpio.conf dovrebbe sistemare il problema.


Impossibile il resume con arch 64 bit

Alcuna combinazioni di scheda madre/bios (nello specifico, conosciute, ci sono alcune Zotac ITX, forse altre) non si riprenderanno correttamente dalla sospensione se è installato un os a 64bit. La soluzione è di entrare nella configurazione del BIOS e disabilitare "Memory Remapping Hole" nella pagina della configurazione DRAM. Questo probabilmente sistemerà il problema della sospensione su ram, ma avrà anche come effetto che il tuo sistema operativo non rileverà tutta la tua ram.

Trucchi e Consigli / FAQ

Riprendere automaticamente i livelli della gestione dell'alimentazione di un HD dopo la sospensione

Si può procedere come segue:

/etc/pm/sleep.d/50-hdparm_pm
 
 #!/bin/dash
 
 if [ -n "$1" ] && ([ "$1" = "resume" ] || [ "$1" = "thaw" ]); then
 	hdparm -B 254 /dev/sda > /dev/null
 fi

Quindi eseguire:

$ sudo chmod +x /etc/pm/sleep.d/50-hdparm_pm

Se lo script in BASH precedente non funziona, provare il seguente al suo posto:

/etc/pm/sleep.d/50-hdparm_pm
 #!/bin/sh
 
 . "${PM_FUNCTIONS}"
 case "$1" in
        thaw|resume)
                sleep 6
                hdparm -B 254 /dev/sda
                ;;
        *)
                ;;
 esac
 exit $NA

Valori più bassi all'opzione -B possono essere più efficaci. Si veda hdparm.

Riavviare il mouse

Su alcuni portatili il mouse non riprende dopo la sopsensione. Un modo per rimediare è quello di forzare una re-inizializziazione del driver PS/2 (in questo esempio i8042) attraverso un hook in /etc/pm/hooks (si veda Creazione di un Hook personale)

#!/bin/sh  
echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind
echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind

Aggiungere una modalità sleep al menu di Openbox

Gli utenti che utilizzano Openbox possono aggiungere nuovi script come opzioni adddizionali allo spegnimento del sistema all'interno del menu di openbox aggiungendo gli elementi nuovi o aggiungerli a sotto-menu esistenti in ~/.config/openbox/menu.xml, ad esempio:

<menu id="64" label="Shutdown">
	<item label="Lock"> <action name="Execute"> <execute>xscreensaver-command -lock</execute> </action> </item>
	<item label="Logout"> <action name="Exit"/> </item>
	<item label="Reboot"> <action name="Execute"> <execute>sudo shutdown -r now</execute> </action> </item>
	<item label="Poweroff"> <action name="Execute"> <execute>sudo shutdown -h now </execute> </action> </item>
	<item label="Hibernate"> <action name="Execute"> <execute>sudo pm-hibernate</execute> </action> </item>
	<item label="Suspend"> <action name="Execute"> <execute>sudo pm-suspend</execute> </action> </item>
</menu>

Modificare i pulsanti "sleep" e "power"

Il comportamento dei pulsanti "Sleep" e "power" può essere modificato tramite acpid in /etc/acpi/handler.sh (si vedano le voci "button/power" e "power/sleep" ). Si consiglia di sostituire le chiamate predefinite con pm-suspend e pm-hibernate.

Bloccare lo schermo quando si iberna o si sospende

Si potrebbe desiderare che venga eseguito un lock screen prima della sospensione o ibernazione (di modo che venga richiesta una password al resume). Questo può essere fatto aggiungendo uno script alla cartella /etc/pm/sleep.d . Lo script deve essere eseguibile (chmod 755) e di proprietà di root:root.

Un semplice script di esempio è:

/etc/pm/sleep.d/00screensaver-lock
 #!/bin/sh
 #
 # 00screensaver-lock: lock workstation on hibernate or suspend

 username= # add username here; i.e.: username=foobar
 userhome=/home/$username
 export XAUTHORITY="$userhome/.Xauthority"
 export DISPLAY=":0"

  case "$1" in
    hibernate|suspend)
       su $username -c "/usr/bin/slimlock" & # or any other such as /usr/bin/xscreensaver-command -lock
       ;;
    thaw|resume)
       ;;
    *) exit $NA
       ;;
 esac

Modifica /usr/bin/slimlock col percorso del tuo screen lock.

Se non si desidera scrivere il proprio username nello script (ad esempio se si hanno più utenti), allora è necessario determinare il nome utente e il display della corrente sessione X. Per i sistemi che usano systemd, esiste xuserrun e il seguente script (modificare il percorso a xuserrun e il lock screen desiderato):

/etc/pm/sleep.d/00screensaver-lock
 #!/bin/sh
 #
 # 00screensaver-lock: lock workstation on hibernate or suspend

  case "$1" in
    hibernate|suspend)
       /path/to/xuserrun /usr/bin/slimlock & # or any other such as /usr/bin/xscreensaver-command -lock
       ;;
    thaw|resume)
       ;;
    *) exit $NA
       ;;
 esac

Se non si sta usando systemd, il seguente script include un ulteriore metodo per determinare il nome utente e il display. Non è robusto, e pertanto include un fallback allo script col nome utente esplicitato.

/etc/pm/sleep.d/00screensaver-lock
 #!/bin/sh
 #
 # 00screensaver-lock: lock workstation on hibernate or suspend

dbus=$(ps aux | grep 'dbus-launch' | grep -v root)
if [[ ! -z $dbus ]];then
  username=$(echo $dbus | awk '{print $1}')
  userhome=$(getent passwd $username | cut -d: -f6)
  export XAUTHORITY="$userhome/.Xauthority"
  for x in /tmp/.X11-unix/*; do
    displaynum=$(echo $x | sed s#/tmp/.X11-unix/X##)
    if [[ -f "$XAUTHORITY" ]]; then
      export DISPLAY=":$displaynum"
    fi
  done
else
  username= # add username here; i.e.: username=foobar
  userhome=/home/$username                                                      
  export XAUTHORITY="$userhome/.Xauthority"
  export DISPLAY=":0"
fi


 case "$1" in
    hibernate|suspend)
       su $USER -c "/usr/bin/slimlock" & # or any other such as /usr/bin/xscreensaver-command -lock
       ;;
    thaw|resume)
       ;;
    *) exit $NA
       ;;
 esac

Nota: Affinchè i precedenti script funzionino, TTY lock deve essere disabilitato in slimlock. Assicurarsi di settare tty_lock 0 in /etc/slimlock.conf [1].

Disabilitare l'ibernazione tramite polkit

Per disabilitare l'ibernazione, creare un nuovo file in /etc/polkit-1/ called 99-disable-hibernate.rules. Aggiungere poi le seguenti linee:

99-disable-hibernate.rules
polkit.addRule(function(action, subject) {
   if ((action.id == "org.freedesktop.login1.hibernate")) {
      return polkit.Result.NO;
   }
});

polkit.addRule(function(action, subject) {
   if ((action.id == "org.freedesktop.login1.hibernate-multiple-sessions")) {
      return polkit.Result.NO;
   }
});

Se si sta usando KDE, terminare la sessione una volta sola e l'opzione per ibernare dovrebbe essere sparita.

Ulteriori Risorse

  • OpenSUSE Wiki - L'articolo da cui è stato originariamente presa questa pagina (sotto licenza GPL)
  • Comprendere la sospensione - Articolo su sistema ubuntu che espone come lavora la sospensione su ram
  • PM Debugging - Debugging di base per PM
  • CPU Frequency Scaling - selettore per scalare le frequenze sulle CPU e schemi di risparmio energetico CPU
  • Acpid - Demone per gli eventi ACPI.
  • Hibernate after sleep - Un esempio di hook di pm personalizzato in cui l'ibernazione è attivata dopo un periodo di tempo in sospensione.