回答:
これは古い方法です。最初にサスペンドしてから、遅延(デフォルトでは15分)後にスリープ解除します。3.6より前のLinuxカーネルでこれを使用するか、必要に応じて15分後に電源を使用しないようにします。
ファイルを追加します/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
次のコードを使用して、ハイブリッド方式がシステムでサポートされていることを確認する必要がある場合があります。「0」と表示されている場合、動作するはずです。
sudo pm-is-supported --suspend-hybrid && echo $?
Linux 3.6カーネルを使用している場合は、次のものを使用できます。これにより、ディスクとRAMの両方が最初から中断されます。
ファイルを追加します/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
これにより、常にイメージがディスクに書き込まれ、RAMに一時停止します。再開は常に高速で(バッテリーが切れない限り)、マシンは短時間(PM_HIBERNATE_DELAY後)ウェイクアップしないという利点があります。実際に休止状態になります。
欠点は、プロセスがより長くかかり(常にディスクに休止状態になるため)、長時間実行すると(たとえば12時間後)バッテリーがなくなる可能性があることです。
resume
議論でした/etc/default/grub.conf
。また、nvidiaユーザーとして設定する必要がありましたnomodeset
。したがって、私の場合のgrubエントリは次のようになりGRUB_CMDLINE_LINUX_DEFAULT="nomodeset resume=UUID=uuidofswappartition"
ます。忘れないでgrub-update
。そしてまた、いくつかのモジュールはとてもアンロードファイルを作成する必要があります/etc/pm/config.d/00-unload_modules
ラインとSUSPEND_MODULES="ath5k r8169"
し、念私も00-使用サスペンド・ハイブリッドに名前を変更するために10-use-suspend-hybrid
Ubuntu 18.04新しい時限式のオプションを持っています。でsystemd
新しいモードが利用可能ですsuspend-then-hibernate
。これはスリープモードで開始され、一定時間後に休止状態モードに移行します。
このhybrid-sleep
モードでは、バッテリーが非常に少なくなってシステムがシャットダウンした場合にのみ、休止状態部分が有効になります。
この関数の使用を開始するに/etc/systemd/sleep.conf
は、次のコンテンツを含むファイルを作成する必要があります。
[Sleep]
HibernateDelaySec=3600
これは、1時間のスリープの後、スリープから休止状態に移行します。編集HibernateDelaySec
して遅延を休止状態に変更できます。
まず、systemdを使用してsuspend-then-hibernateが機能するかどうかをテストします
Ctrl+ Alt+ Tを押してターミナルを開き、次を入力します。
sudo systemctl suspend-then-hibernate
動作する場合は、永続的にします。
任意の/etc/systemd/logind.conf
エディターを使用してファイルを開きます。次の方法で管理者の電力を起動する必要がありますsudo
、gksudo
またはpkexec
このファイルを編集します。
2行を見つけます。
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
注、これらの行は#
その前にコメントアウトされています。これsuspend
がデフォルトのアクションです。を削除し、これらの2行をに#
変更suspend
してsuspend-then-hibernate
、次のようにします。
HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate
ファイルを保存します。logind
次のコマンドでログアウトしてからログインし直すか、サービスを再起動します。
systemctl restart systemd-logind.service
警告!ユーザーセッションが再開されます
ソース:Lid Closed Suspend then Hibernate
ソリューションによってblueyed のLinux 3.6以降で中断実ハイブリッドのためには、私のために動作しませんでした。これは、Ubuntu 16.04 systemd
がファイルを使用しているため、使用していないためと思われます/etc/pm/config.d/00-use-suspend-hybrid
。
まず、systemdを使用して、休止状態とハイブリッドスリープが機能するかどうかをテストします。
Ctrl+ Alt+ Tを押してターミナルを開き、次を入力します。
sudo systemctl hibernate
これにより、コンピューターが休止状態になります。ハイブリッドスリープを試すには、次のように入力します。
sudo systemctl hybrid-sleep
動作する場合は、永続的にします。
任意の/etc/systemd/logind.conf
エディターを使用してファイルを開きます。次の方法で管理者の電力を起動する必要がありますsudo
、gksudo
またはpkexec
このファイルを編集します。
2行を見つけます。
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
注、これらの行は#
その前にコメントアウトされています。これsuspend
がデフォルトのアクションです。を削除し、これらの2行をに#
変更suspend
してhybrid-sleep
、次のようにします。
HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep
ファイルを保存します。ログアウトしてからログインし直します。
注意:
suspend
またはhybrid-sleep
がありますhibernate
。Suspend
コグメニューからをクリックすると、コンピューターはハイブリッドスリープではなく通常のサスペンド状態になります。ソース:https : //superuser.com/questions/719447/how-to-use-systemd-hybrid-sleep-instead-of-suspend-under-gnome-in-linux
これが役立つことを願っています
12.04では、休止状態がトリガーされたときに(を使用してPM_HIBERNATE_DELAY=XX
)、シェルスクリプトの再開/解凍がgrub recordfail変数を設定解除しないことに気付きました。したがって、grubは自動起動しません。
タイムアウトは-1に設定され、ユーザーの選択を待機します。これにはのスクリプトの編集が必要だと思います/etc/pm/sleep.d/10_grub-common
。初心者なので、残念ながら正確な変更を理解するために手を出していない。
この質問はGoogleで頻繁に出てくるので、ぶつかりたいと思います。ここで説明する方法は(imo)ハイブリッドサスペンドではありません。「X分のサスペンド後の休止」です。真のハイブリッドサスペンドは、RAMをディスクに書き込み、低電力状態になります(スリープモード)。時間がかかりますが、マシンのバッテリーが残っている間は再開されますが、そうでない場合はハードディスクから再開されます。この動作は、ほとんどの人がハイブリッドスリープとして知っており、新しいWindowsおよびMacラップトップでデフォルトで使用されています。
実際のハイブリッドサスペンドを有効にする方法は次のとおりです。
%cat /etc/pm/config.d/00-use-suspend-hybrid #一時停止の代わりに常にsuspend_hybridを使用する if ["$ METHOD" = "suspend"]; それから METHOD = suspend_hybrid fi
この方法は、Sony Vaio SVSで機能します。
PS:ファイルが将来削除される場合に備えて、ここでパッチを再現します。
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 +「$ RET」を返す +} + fi + +#両方へのサスペンドをサポートするカーネル(ハイブリッドサスペンド) +#カーネル3.6以降 + if [-z "$ SUSPEND_HYBRID_MODULE"] && \ + [-f / sys / power / disk] && \ + grep -q disk / sys / power / state && \ + grep -q suspend / sys / power / disk; それから + SUSPEND_HYBRID_MODULE = "カーネル" + do_suspend_hybrid() + { + HIBERNATE_MODE = "suspend" + do_hibernate } fi
ソース:
/ sys / class / rtc / rtc0のwakealarmを使用するだけで、config.dにファイルを追加せずに別のソリューションがあります。カーネルが直接サポートしていないため、コメントの後にpm-functions(/ usr / lib / pm-utils)で廃止されたコードを使用してください...((現在のカーネル(3.6以降)は直接サポートしています)そのコードを元に戻し、do_suspend_hybrid()の代わりにdo_suspend()部分を入れて、pm関数用のパッチを使用します(修正するまで)。
廃止されたコード(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
推奨。uswsuspをさらに使いやすくすると同時に、s2bothの利点を最大限に活用します(サスペンド時のs2both)。復帰したコードをuswsuspモジュール(/usr/lib/pm-utils/module.d)のdo_suspend()部分に配置します。
元に戻したコード(サスペンドが呼び出されたときのsuspend_hybrid):
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を使用すると、サスペンド/ハイバネートの進行状況とリバースプロセスがテキストで表示されます。バックスペースを押して中止することもできます。uswsuspを使用しないと、特にwakealarmがトリガーされ、休止状態(uswsuspのs2disk)を実行する場合に、サスペンド/ハイバネートが迷惑なように見えます。休止状態になる前のスリープ期間をpm-functionsファイルの通常の場所に設定します。
# variables to handle hibernate after suspend support
PM_HIBERNATE_DELAY=900 # 15 minutes
PM_RTC=/sys/class/rtc/rtc0
uswsusp modを次に示します(このモジュールはpm-functionsから呼び出されるため、挿入される変数は同じです)。
#!/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
Ubuntu 18.04それがはるかにeaser。でsystemdに availiable新しいモードがあるサスペンド、その後、休止状態。この関数の使用を開始するには、次の内容で/etc/systemd/sleep.confファイルを作成する必要があります。
[Sleep]
HibernateDelaySec=3600
次に、コマンドでテストできます。
sudo systemctl suspend-then-hibernate
(HibernateDelaySecを編集して、休止状態への遅延を減らすことができます)。すべてが正常に機能する場合は、Lid Close Actionを変更できます。変更するには、ファイル/etc/systemd/logind.confを編集する必要があります
オプションHandleLidSwitch =を見つけてコメントを外し、HandleLidSwitch = suspend-then-hibernateに変更する必要があります。次に、次のコマンドでlogindサービスを再起動する必要があります(警告!ユーザーセッションが再起動されます)。
systemctl restart systemd-logind.service
それで全部です!これで、この便利な関数を使用できます。