Risposte:
Questo è il metodo più vecchio: prima sospendi e poi svegliati per andare in letargo dopo un ritardo (15 minuti per impostazione predefinita). Usalo con un kernel Linux prima della 3.6, o se ti piace che non usi più energia dopo 15 minuti.
Aggiungi il file /etc/pm/config.d/00-use-suspend-hybrid
:
# Always use suspend_hybrid instead of suspend
if [ "$METHOD" = "suspend" ]; then
METHOD=suspend_hybrid
fi
# The delay after which hibernation gets triggered (default: 900 seconds, 15 minutes):
PM_HIBERNATE_DELAY=900
Potresti voler assicurarti che il metodo ibrido sia supportato sul tuo sistema tramite il seguente codice. Se dice "0" dovrebbe funzionare:
sudo pm-is-supported --suspend-hybrid && echo $?
Se si dispone di un kernel Linux 3.6, è possibile utilizzare quanto segue, che verrà sospeso su disco e RAM dall'inizio.
Aggiungi il file /etc/pm/config.d/00-use-suspend-hybrid
:
# WORKAROUND: always set the default hibernate mode first (normal mode)
# (not required if you have the patch mentioned by Rohan below (http://askubuntu.com/a/344879/169))
HIBERNATE_MODE=platform
# Always use hibernate instead of suspend, but with "suspend to both"
if [ "$METHOD" = "suspend" ]; then
METHOD=hibernate
HIBERNATE_MODE=suspend
fi
# Make sure to use the kernel's method, in case uswsusp is installed etc.
SLEEP_MODULE=kernel
Questo scriverà sempre l'immagine sul disco e quindi sospenderà sulla RAM, con i vantaggi che la ripresa sarà sempre veloce (fino a quando la batteria non si esaurisce) e che la macchina non si riattiverà per un breve periodo (dopo PM_HIBERNATE_DELAY) in letargo per davvero.
Lo svantaggio è che il processo impiega più tempo (perché va sempre in letargo su disco) e che la batteria potrebbe esaurirsi nel lungo periodo (ad es. Dopo 12 ore).
resume
argomento /etc/default/grub.conf
. Anche come utente nvidia ho dovuto impostare nomodeset
. Quindi, con conseguente ingresso grub nel mio caso è: GRUB_CMDLINE_LINUX_DEFAULT="nomodeset resume=UUID=uuidofswappartition"
. Non dimenticare grub-update
. E anche alcuni moduli devono essere scaricati in modo da creare il file /etc/pm/config.d/00-unload_modules
con la linea SUSPEND_MODULES="ath5k r8169"
e solo per essere sicuro di aver rinominato 00-use-suspend-hybrid in10-use-suspend-hybrid
In Ubuntu 18.04 ha una nuova opzione a tempo. In systemd
è availiable una nuova modalità suspend-then-hibernate
. Questo inizierà con la modalità di sospensione e poi passerà alla modalità di ibernazione dopo un tempo fisso.
Nella hybrid-sleep
modalità, la parte di ibernazione diventa effettiva solo quando la batteria è quasi scarica e il sistema si spegne.
Per iniziare a utilizzare questa funzione è necessario creare un file /etc/systemd/sleep.conf
con il contenuto successivo:
[Sleep]
HibernateDelaySec=3600
Questo passerà dal sonno al letargo dopo 1 ora di sonno. È possibile modificare HibernateDelaySec
per modificare il ritardo in letargo.
Innanzitutto, verifica se suspend-then-hibernate funziona utilizzando systemd
Apri un terminale premendo Ctrl+ Alt+ Te inserisci:
sudo systemctl suspend-then-hibernate
Se funziona rendilo permanente.
Apri il file /etc/systemd/logind.conf
usando il tuo editor preferito. Avrete bisogno di richiamare il vostro potere amministrativo da sudo
, gksudo
o pkexec
per modificare questo file.
Trova le due righe:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
Nota, queste righe sono commentate con #
davanti a loro. Questa suspend
è l'azione predefinita. Rimuovi #
e modifica suspend
in suspend-then-hibernate
in queste due righe in modo che appaiano così:
HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate
Salva il file. Disconnettersi e riconnettersi o riavviare il logind
servizio con il comando:
systemctl restart systemd-logind.service
avvertimento! la sessione utente verrà riavviata
Fonte: coperchio chiuso, sospensione, quindi ibernazione
La soluzione di blueyed per Real Hybrid sospesa con Linux 3.6+ non ha funzionato per me. Sospetto che ciò sia dovuto al fatto che Ubuntu 16.04 utilizza systemd
e non utilizza il file /etc/pm/config.d/00-use-suspend-hybrid
.
Innanzitutto, verifica se l'ibernazione e l'ibrido-sonno funzionano utilizzando systemd
Apri un terminale premendo Ctrl+ Alt+ Te inserisci:
sudo systemctl hibernate
Questo dovrebbe far ibernare il tuo computer. Per provare l'ibrido-sonno, inserire:
sudo systemctl hybrid-sleep
Se funziona rendilo permanente.
Apri il file /etc/systemd/logind.conf
usando il tuo editor preferito. Avrete bisogno di richiamare il vostro potere amministrativo da sudo
, gksudo
o pkexec
per modificare questo file.
Trova le due righe:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
Nota, queste righe sono commentate con #
davanti a loro. Questa suspend
è l'azione predefinita. Rimuovi #
e modifica suspend
in hybrid-sleep
in queste due righe in modo che appaiano così:
HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep
Salva il file. Disconnettersi e riconnettersi.
Nota:
suspend
o hybrid-sleep
c'è una terza opzione, hibernate
.Suspend
dal menu del pignone, il computer non sospende la sospensione ibrida normale.Spero che aiuti
Nel 12.04 ho notato che quando si attiva l'ibernazione (usando PM_HIBERNATE_DELAY=XX
), il resume / thaw degli script di shell non disinserisce la variabile grub recordfail. Pertanto grub non si avvia automaticamente.
Il timeout è impostato su -1 e attende la selezione dell'utente. Immagino che questo richieda alcune modifiche agli script in /etc/pm/sleep.d/10_grub-common
. Sono un novizio, quindi non mi sono dilettato a capire il cambiamento esatto purtroppo.
Questa domanda si presenta abbastanza frequentemente in Google che penso che valga la pena di essere respinta. Il metodo descritto qui è (IMO) non ibrida di sospensione. È "letargo dopo X minuti in sospensione". La vera sospensione ibrida scrive la RAM sul disco e quindi passa allo stato di risparmio energetico (modalità sospensione). Mentre richiede più tempo, il ripristino è istantaneo mentre la macchina ha la batteria rimasta, altrimenti riprende dal disco rigido. Questo comportamento è ciò che molte persone conoscono come sospensione ibrida e viene utilizzato per impostazione predefinita nei laptop Windows e Mac più recenti.
Ecco come abilitare la vera sospensione ibrida:
% cat /etc/pm/config.d/00-use-suspend-hybrid # Usa sempre suspend_hybrid invece di suspend if ["$ METHOD" = "suspend"]; poi METODO = suspend_hybrid fi
Questo metodo funziona per me sul mio Sony Vaio SVS.
PS: Riproduzione della patch qui nel caso in cui il file venga eliminato in futuro:
diff --git a / pm / pm-functions.in b / pm / pm-functions.in --- a / pm / pm-functions.in +++ b / pm / pm-functions.in @@ -316,8 +316,28 @@ if [-z "$ HIBERNATE_MODULE"] && \ { [-n "$ {HIBERNATE_MODE}"] && \ grep -qw "$ {HIBERNATE_MODE}" / sys / power / disk && \ + HIBERNATE_MODE_SAVE = $ (cat / sys / power / disk) && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE ## * [}" && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE %%] *}" && \ echo -n "$ {HIBERNATE_MODE}"> / sys / power / disk echo -n "disk"> / sys / power / state + RET = $? + echo -n "$ HIBERNATE_MODE_SAVE"> / sys / power / disk + ritorna "$ RET" +} + fi + + # per i kernel che supportano la sospensione di entrambi (ovvero la sospensione ibrida) + # dal kernel 3.6 + if [-z "$ SUSPEND_HYBRID_MODULE"] && \ + [-f / sys / power / disk] && \ + grep -q disk / sys / power / state && \ + grep -q suspend / sys / power / disk; poi + SUSPEND_HYBRID_MODULE = "kernel" + do_suspend_hybrid () + { + HIBERNATE_MODE = "sospendi" + do_hibernate } fi
fonti:
C'è un'altra soluzione senza aggiungere alcun file in config.d, usando semplicemente wakealarm in / sys / class / rtc / rtc0. Usa il codice obsoleto nelle funzioni pm (/ usr / lib / pm-utils) dopo i commenti # poiché il kernel non supporta direttamente ..., (quindi il kernel corrente (dopo 3.6 qualcosa) supporta direttamente). Ripristina quel codice e inserisci la parte do_suspend () invece di do_suspend_hybrid () e usa la patch per le funzioni pm (fino a quando non lo risolvono).
Codice obsoleto (sospendi quindi ibernazione quando viene chiamato suspend_hybrid):
# since the kernel does not directly support hybrid sleep, we do
# something else -- suspend and schedule an alarm to go into
# hibernate if we have slept long enough.
# Only do this if we do not need to do any special video hackery on resume
# from hibernate, though.
if [ -z "$SUSPEND_HYBRID_MODULE" -a -w "$PM_RTC/wakealarm" ] && \
check_suspend && check_hibernate && ! is_set $HIBERNATE_RESUME_POST_VIDEO; \
then
SUSPEND_HYBRID_MODULE="kernel"
do_suspend_hybrid() {
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend.
do_hibernate || do_suspend
else
echo > "$PM_RTC/wakealarm"
fi
else
# if we cannot suspend, just try to hibernate.
do_hibernate
fi
}
fi
Consigliato. Ancora più facile da usare uswsusp mentre allo stesso tempo massimizza il vantaggio di s2both, ovvero s2both quando viene sospeso. Inserisci il codice ripristinato nella parte do_suspend () del modulo uswsusp (/usr/lib/pm-utils/module.d).
Codice ripristinato (suspend_hybrid quando viene chiamato suspend):
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend_hybrid; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend_hybrid.
do_hibernate || do_suspend_hybrid
else
echo > "$PM_RTC/wakealarm"
fi
else
# when do_suspend is being called, convert to suspend_hybrid.
do_suspend_hybrid
fi
Con uswsusp, possiamo vedere l'avanzamento della sospensione / ibernazione e il processo inverso visualizzati nel testo, anche se possiamo interromperlo premendo backspace. Senza uswsusp, la sospensione / ibernazione appare e scompare in modo fastidioso, specialmente quando viene attivato il wakealarm ed esegue l'ibernazione (disco s2 in uswsusp). Impostare il periodo di sospensione prima dell'ibernazione nella solita posizione sul file delle funzioni pm.
# variables to handle hibernate after suspend support
PM_HIBERNATE_DELAY=900 # 15 minutes
PM_RTC=/sys/class/rtc/rtc0
Ecco la mod uswsusp: (ricorda, questo modulo è chiamato dalle funzioni pm quindi le variabili inserite sono le stesse)
#!/bin/sh
# disable processing of 90chvt and 99video.
# s2ram and s2disk handle all this stuff internally.
uswsusp_hooks()
{
disablehook 99video "disabled by uswsusp"
}
# Since we disabled 99video, we need to take responsibility for proper
# quirk handling. s2ram handles all common video quirks internally,
# so all we have to do is translate the HAL standard options to s2ram options.
uswsusp_get_quirks()
{
OPTS=""
ACPI_SLEEP=0
for opt in $PM_CMDLINE; do
case "${opt##--quirk-}" in # just quirks, please
dpms-on) ;; # no-op
dpms-suspend) ;; # no-op
radeon-off) OPTS="$OPTS --radeontool" ;;
reset-brightness) ;; # no-op
s3-bios) ACPI_SLEEP=$(($ACPI_SLEEP + 1)) ;;
s3-mode) ACPI_SLEEP=$(($ACPI_SLEEP + 2)) ;;
vbe-post) OPTS="$OPTS --vbe_post" ;;
vbemode-restore) OPTS="$OPTS --vbe_mode" ;;
vbestate-restore) OPTS="$OPTS --vbe_save" ;;
vga-mode-3) ;; # no-op
save-pci) OPTS="$OPTS --pci_save" ;;
none) QUIRK_NONE="true" ;;
*) continue ;;
esac
done
[ $ACPI_SLEEP -ne 0 ] && OPTS="$OPTS --acpi_sleep $ACPI_SLEEP"
# if we were told to ignore quirks, do so.
# This is arguably not the best way to do things, but...
[ "$QUIRK_NONE" = "true" ] && OPTS=""
}
# Since we disabled 99video, we also need to handle displaying
# help info for the quirks we handle.
uswsusp_help()
{
echo # first echo makes it look nicer.
echo "s2ram video quirk handler options:"
echo
echo " --quirk-radeon-off"
echo " --quirk-s3-bios"
echo " --quirk-s3-mode"
echo " --quirk-vbe-post"
echo " --quirk-vbemode-restore"
echo " --quirk-vbestate-restore"
echo " --quirk-save-pci"
echo " --quirk-none"
}
# This idiom is used for all sleep methods. Only declare the actual
# do_ method if:
# 1: some other sleep module has not already done so, and
# 2: this sleep method can actually work on this system.
#
# For suspend, if SUSPEND_MODULE is set then something else has already
# implemented do_suspend. We could just check to see of do_suspend was
# already declared using command_exists, but using a dedicated environment
# variable makes it easier to debug when we have to know what sleep module
# ended up claiming ownership of a given sleep method.
if [ -z "$SUSPEND_MODULE" ] && command_exists s2ram && \
( grep -q mem /sys/power/state || \
( [ -c /dev/pmu ] && check_suspend_pmu; ); ); then
SUSPEND_MODULE="uswsusp"
do_suspend()
{
WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend_hybrid; then
NOW=$(cat "$PM_RTC/since_epoch")
if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
log "Woken by RTC alarm, hibernating."
# if hibernate fails for any reason, go back to suspend_hybrid.
do_hibernate || do_suspend_hybrid
else
echo > "$PM_RTC/wakealarm"
fi
else
# when do_suspend is being called, convert to suspend_hybrid.
do_suspend_hybrid
fi
}
fi
if [ -z "$HIBERNATE_MODULE" ] && \
[ -f /sys/power/disk ] && \
grep -q disk /sys/power/state && \
[ -c /dev/snapshot ] &&
command_exists s2disk; then
HIBERNATE_MODULE="uswsusp"
do_hibernate()
{
s2disk
}
fi
if [ -z "$SUSPEND_HYBRID_MODULE" ] &&
grep -q mem /sys/power/state && \
command_exists s2both && \
check_hibernate; then
SUSPEND_HYBRID_MODULE="uswsusp"
do_suspend_hybrid()
{
uswsusp_get_quirks
s2both --force $OPTS
}
if [ "$METHOD" = "suspend_hybrid" ]; then
add_before_hooks uswsusp_hooks
add_module_help uswsusp_help
fi
fi
La risposta dell'utente68186 per Ubuntu 16.04 non ha funzionato per me. Tuttavia, la soluzione qui ha fatto.
Innanzitutto, assicurati che il letargo funzioni. Poi
Cerca e installa dconf Editor nel software Ubuntu. Quindi avvialo e vai su org -> gnome -> daemon delle impostazioni -> plugin -> potenza.
Modificare il valore di "coperchio-chiusura-azione-ac" e "coperchio-chiusura-azione-batteria".
Nelle mie impostazioni di risparmio energia, queste opzioni appaiono vuote, ma funzionano come previsto.
In Ubuntu 18.04 è molto più semplice. In systemd è disponibile una nuova modalità suspend-then-hibernate . Per iniziare a utilizzare questa funzione è necessario creare un file /etc/systemd/sleep.conf con il contenuto successivo:
[Sleep]
HibernateDelaySec=3600
Quindi puoi testarlo con il comando:
sudo systemctl suspend-then-hibernate
(è possibile modificare HibernateDelaySec per ridurre il ritardo alla sospensione). Se tutto funziona correttamente, è possibile modificare l'azione di chiusura del coperchio, per farlo è necessario modificare il file /etc/systemd/logind.conf
È necessario trovare l'opzione HandleLidSwitch = , decommentarlo e passare a HandleLidSwitch = suspend-then-hibernate . Quindi è necessario riavviare il servizio logind (wirning! La sessione utente verrà riavviata) dal comando successivo:
systemctl restart systemd-logind.service
È tutto! Ora puoi usare questa bella funzione.