Yanıtlar:
Bu eski yöntemdir: ilk önce askıya alın ve sonra bir gecikmeden sonra hazırda bekletme moduna alın (varsayılan olarak 15 dakika). Bunu 3.6'dan önce bir Linux çekirdeğiyle kullanın ya da eğer 15 dakika sonra herhangi bir güç kullanmazsanız kullanın.
Dosyayı ekle /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
Hibrid yönteminin sisteminizde aşağıdaki kodla desteklendiğinden emin olmak isteyebilirsiniz. "0" yazıyorsa çalışması gerekir:
sudo pm-is-supported --suspend-hybrid && echo $?
Eğer bir Linux 3.6 çekirdeğiniz varsa, hem diske hem de RAM'e en baştan askıya alınacak olan aşağıdakini kullanabilirsiniz.
Dosyayı ekle /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
Bu, görüntüyü her zaman diske yazar ve daha sonra RAM'i askıya alır, devam etmenin her zaman hızlı olacağı (pil bitmediği sürece) ve makinenin kısa bir süre boyunca uyanmayacağı (PM_HIBERNATE_DELAY) gerçek kış uykusuna yatmak.
Dezavantajı, işlemin daha uzun sürmesi (her zaman diske kış uykusuna yatması nedeniyle) ve pilinizin uzun vadede bitebilmesidir (örneğin 12 saat sonra).
resume
tartışma oldu /etc/default/grub.conf
. Ayrıca nvidia kullanıcısı olarak ayarlamak zorunda kaldım nomodeset
. Benim durumumda grub girişini sonuçlanan Yani geçerli: GRUB_CMDLINE_LINUX_DEFAULT="nomodeset resume=UUID=uuidofswappartition"
. Unutma grub-update
. Ve ayrıca bazı modüller kaldırılmış ve bu nedenle /etc/pm/config.d/00-unload_modules
satırlı dosya oluşturulmuş olmalı SUSPEND_MODULES="ath5k r8169"
ve sadece 00-use-suspend-hybrid olarak yeniden adlandırıldığından emin olmak için10-use-suspend-hybrid
In Ubuntu 18.04 olan yeni zamanlanmış seçeneği vardır. In systemd
yeni bir mod availiable suspend-then-hibernate
. Bu uyku moduyla başlayacak ve daha sonra sabit bir süre sonra hazırda bekleme moduna geçecektir.
In hybrid-sleep
pil sistemi kapanır aşağı kritik düzeyde ve sadece zaman modunda, derin uyku kısmı etkili olur.
Bu işlevi kullanmaya başlamak için bir /etc/systemd/sleep.conf
sonraki içeriğe sahip bir dosya oluşturmanız gerekir :
[Sleep]
HibernateDelaySec=3600
Bu 1 saatlik uykudan sonra uyku modundan uyku moduna geçecektir. HibernateDelaySec
Hazırda bekletme gecikmesini değiştirmek için düzenleyebilirsiniz .
İlk önce, askıya al ve sonra hazırda bekletme modunun systemd kullanarak çalışıp çalışmadığını test edin
Ctrl+ Alt+ Tuşlarına basarak bir terminal açın Tve şunu girin:
sudo systemctl suspend-then-hibernate
İşe yararsa kalıcı olur.
/etc/systemd/logind.conf
Tercih ettiğiniz düzenleyiciyi kullanarak dosyayı açın . Sen yaparak idari gücünü çağırmak gerekir sudo
, gksudo
ya da pkexec
bu dosyayı düzenlemek için.
İki satırı bulun:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
Not, Bu satırlar #
önünde yorumlanmıştır. suspend
Varsayılan eylemdir. Bunları kaldırın #
ve bu iki satırda değiştirin suspend
, suspend-then-hibernate
böylece şöyle görünürler:
HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate
Dosya 'yı kaydet. Oturumu kapatın ve tekrar oturum açın veya logind
hizmeti komutuyla yeniden başlatın :
systemctl restart systemd-logind.service
uyarı! kullanıcı oturumunuz yeniden başlatılacak
Kaynak: Kapak Kapalı Askıya Al, sonra Hazırda Beklet
Solüsyon tarafından blueyed Linux 3.6+ ile askıya Gerçek melez için benim için çalışma yoktu. Bunun nedeni, Ubuntu 16.04'ün systemd
dosyayı kullanması ve kullanmamasıdır /etc/pm/config.d/00-use-suspend-hybrid
.
İlk olarak, hazırda bekletme ve karma uykunun systemd kullanarak çalışıp çalışmadığını test edin
Ctrl+ Alt+ Tuşlarına basarak bir terminal açın Tve şunu girin:
sudo systemctl hibernate
Bu, bilgisayarınızın hazırda bekletme moduna geçmesini sağlamalıdır. Karma uykuyu denemek için, şunu girin:
sudo systemctl hybrid-sleep
İşe yararsa kalıcı olur.
/etc/systemd/logind.conf
Tercih ettiğiniz düzenleyiciyi kullanarak dosyayı açın . Sen yaparak idari gücünü çağırmak gerekir sudo
, gksudo
ya da pkexec
bu dosyayı düzenlemek için.
İki satırı bulun:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
Not, Bu satırlar #
önünde yorumlanmıştır. suspend
Varsayılan eylemdir. Bunları kaldırın #
ve bu iki satırda değiştirin suspend
, hybrid-sleep
böylece şöyle görünürler:
HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep
Dosya 'yı kaydet. Çıkış yapın ve tekrar giriş yapın.
Not:
suspend
veya hybrid-sleep
üçüncü bir seçenek var hibernate
.Suspend
dişli menü koyar normal bilgisayar hibrit uyku değil askıya.Umarım bu yardımcı olur
12.04'te, hazırda bekletme modunun (kullanıldığında PM_HIBERNATE_DELAY=XX
) tetiklendiğinde , kabuk komut dosyalarının özgeçmiş / eritilmesinin grub kayıt hatası değişkenini ayarlamadığını fark ettim . Bu nedenle grub otomatik ateşlenmez.
Zaman aşımı -1 olarak ayarlanır ve kullanıcı seçimini bekler. Bunun için bazı betikleri düzenlemeyi gerektirdiğini tahmin ediyorum /etc/pm/sleep.d/10_grub-common
. Acemim, bu yüzden maalesef kesin değişikliği anlayamadım.
Bu soru Google’da sık sık ortaya çıkmaya başladığını düşünüyorum. Burada tarif edilen yöntem (imo) hibrit süspansiyon değildir . "X dakika askıya alındıktan sonra hazırda bekleme". Gerçek karma askıya alma işlemi RAM'ınızı diske yazar ve daha sonra düşük güç durumuna geçer (uyku modu). Daha uzun sürdüğü halde, makine bataryası bitmişken devam etme anında gerçekleşir, aksi halde sabit diskten devam eder. Bu davranış çoğu insanın hibrid uyku olarak bildiği ve yeni Windows ve Mac dizüstü bilgisayarlarda varsayılan olarak kullandığı şeydir.
İşte gerçek melez askıya almanın nasıl etkinleştirileceği :
% cat /etc/pm/config.d/00-use-suspend-hybrid # Her zaman askıya almak yerine suspend_hybrid kullanın eğer ["$ METHOD" = "askıya alma"]; sonra YÖNTEM = suspend_hybrid fi
Bu yöntem benim için Sony Vaio SVS'de çalışıyor.
Not: Dosyanın gelecekte silinmesi durumunda, yamanın burada yeniden üretilmesi:
fark - a / pm / pm-functions.in içinde b / pm / pm-functions.in içinde --- a / pm / pm-fonksiyonlar.in +++ b / pm / pm-fonksiyonlar.in @@ -316,8 +316,28 @@ [-z "$ HIBERNATE_MODULE"] && \ { [-n "$ {HIBERNATE_MODE}"]] && \ grep -qw "$ {HIBERNATE_MODE}" / sys / güç / disk && \ + HIBERNATE_MODE_SAVE = $ (cat / sys / güç / disk) && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE ## * [}" && \ + HIBERNATE_MODE_SAVE = "$ {HIBERNATE_MODE_SAVE %%] *}" && \ echo -n "$ {HIBERNATE_MODE}"> / sys / güç / disk echo -n "disk"> / sys / güç / durum + RET = $? + echo -n "$ HIBERNATE_MODE_SAVE"> / sys / güç / disk + "$ RET" döndür +} + fi + Her ikisine de askıya alma işlemini destekleyen çekirdekler için + # (örn. karma askıya alma) Çekirdek 3.6'dan beri + # + eğer [-z "$ SUSPEND_HYBRID_MODULE"] && \ + [-f / sys / güç / disk] && \ + grep -q disk / sys / güç / durum ve & \ + grep -q askıya alın / sys / güç / disk; sonra + SUSPEND_HYBRID_MODULE = "çekirdek" + do_suspend_hybrid () + { + HIBERNATE_MODE = "askıya al" + do_hibernate } fi
Kaynaklar:
Config.d dosyasına herhangi bir dosya eklemeden başka bir çözüm var, sadece / sys / class / rtc / rtc0 dizininde wakealarm kullanıyor. Çekirdeklerin doğrudan desteklemediği için #since / / usr / lib / pm-utils pm işlevlerinde (/ usr / lib / pm-utils) eski kodu kullanın. Bu kodu geri alın ve do_suspend_hybrid () yerine do_suspend () bölümüne koyun ve pm-işlevleri için yamayı kullanın ('düzeltilinceye kadar).
Eski kod (suspend_hybrid çağrıldığında askıya alın ve sonra hazırda bekletme):
# 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
Önerilen. Uswsusp kullanmak daha da kolayken, aynı zamanda s2both'un yani s2both'un askıya alınma şeklindeki faydasını maksimuma çıkarır. Döndürülen kodu, uswsusp modülünün do_suspend () bölümüne (/usr/lib/pm-utils/module.d) koyun.
Geri döndürülen kod (askıya alma çağrıldığında askıya alınma zamanı)
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
Uswsusp ile, askıya alma / hazırda bekletme işleminin ilerlemesini ve metinde görüntülenen ters işlemi görebiliriz, hatta geri tuşuna basarak iptal edebiliriz. Uswsusp olmadan, askıya alma / hazırda bekletme modu, özellikle wakealarm tetiklendiğinde ve hazırda bekletme modunu çalıştırdığında (uswsusp'ta s2disk) can sıkıcı bir şekilde görünür. Uykuya dalmadan önce uyku süresini, pm-Fonksiyonları dosyasındaki normal bir yerde ayarlayın.
# variables to handle hibernate after suspend support
PM_HIBERNATE_DELAY=900 # 15 minutes
PM_RTC=/sys/class/rtc/rtc0
Uswsusp kipi: (unutma, bu modül pm-işlevlerinden çağrılır, böylece eklenen değişkenler aynıdır)
#!/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
User68186 tarafından Ubuntu 16.04 için verilen cevap işe yaramadı. Ancak, burada çözüm yaptı.
İlk olarak, hazırda bekletme modunun çalıştığından emin olun. Sonra
Dconf Editör'ü arayın ve Ubuntu Yazılımında kurun. Sonra başlatın ve org -> gnome -> settings daemon -> plugins -> power'a gidin.
“Kapak-kapanma-ac eylemi” ve “kapak-kapanma-akü işlemi” değerini değiştirin.
Güç ayarlarımda bu seçenekler boş görünüyor, ancak istenildiği gibi çalışıyorlar.
In Ubuntu 18.04 çok daha easer. Gelen systemd yeni mod availiable askıya-o-hazırda bekleme . Bu işlevi kullanmaya başlamak için sonraki içeriğe sahip bir /etc/systemd/sleep.conf dosyası oluşturmanız gerekir :
[Sleep]
HibernateDelaySec=3600
Sonra komutla test edebilirsiniz:
sudo systemctl suspend-then-hibernate
(Hazırda bekletme süresini azaltmak için HibernateDelaySec'i düzenleyebilirsiniz). Her şey yolunda giderse , Lid Close Action özelliğini değiştirebilirsiniz, bunun için /etc/systemd/logind.conf dosyasını düzenlemeniz gerekir.
Seçenek HandleLidSwitch = 'u bulmanız , yorumunu kaldırmanız ve HandleLidSwitch = suspend-then-hibernate olarak değiştirmeniz gerekir . Ardından bir sonraki komutla logind servisini yeniden başlatmanız gerekir (wirning! Kullanıcı oturumunuz yeniden başlatılır):
systemctl restart systemd-logind.service
Bu kadar! Şimdi bu güzel işlevi kullanabilirsiniz.