Ubuntuをサスペンド、別名「サスペンド鎮静」からHibernate状態にすることは可能ですか?
私が探しているのはこれです:
蓋を閉じると、ラップトップはサスペンド状態になります。その後、事前に決められた時間(バッテリーが強くなっても)を使用しない場合は、バッテリーを節約するために休止状態になります。
たとえば、蓋を閉じると、ラップトップはサスペンドに入るように設定されています。その後、1日中使用しないと、バッテリーが消耗します。これは、サスペンドモードでもハードウェアが少量の電力を消費し、最終的にバッテリーが放電するためです。私が望んでいるのは、Ubuntuが中断されていても、数時間の非アクティブ状態が続いた後でもHibernateに入る必要があることをUbuntuに伝えることができるようにすることです。
Windowsはそれを行うことができます。 Ubuntuは、スタンバイになるようにプログラムできますまたはタイマーで休止状態になりますが、両方にはなりません。
Ubuntu 18.04では、はるかに簡単です。 systemdでは、新しいモードsuspend-then-hibernateを使用できます。この関数の使用を開始するには、次の内容で ファイル/ 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
に変更する必要があります。次に、次のコマンドでsystemd-logindサービスを再起動する必要があります(警告!ユーザーセッションが再起動されます)。
Sudo systemctl restart systemd-logind.service
それで全部です!これで、このNice関数を使用できます。
これに対する解決策は簡単です。まず、サスペンドおよびレジューム時に、pm-suspendプログラムは/etc/pm/sleep.d
および/usr/lib/pm-utils/sleep.d
の一連のスクリプトを実行します。したがって、私の解決策は、次のことを行うスクリプトを追加することです。
これを行うスクリプトを次に示します。 0000rtchibernate
という名前を付けて/etc/pm/sleep.d
ディレクトリに配置します(0000は重要なので、スクリプトは一時停止時に最初に実行され、最後に再開時に実行されます)。
#!/bin/bash
# Script name: /etc/pm/sleep.d/0000rtchibernate
# Purpose: Auto hibernates after a period of sleep
# Edit the "autohibernate" variable below to set the number of seconds to sleep.
curtime=$(date +%s)
autohibernate=7200
echo "$curtime $1" >>/tmp/autohibernate.log
if [ "$1" = "suspend" ]
then
# Suspending. Record current time, and set a wake up timer.
echo "$curtime" >/var/run/pm-utils/locks/rtchibernate.lock
rtcwake -m no -s $autohibernate
fi
if [ "$1" = "resume" ]
then
# Coming out of sleep
sustime=$(cat /var/run/pm-utils/locks/rtchibernate.lock)
rm /var/run/pm-utils/locks/rtchibernate.lock
# Did we wake up due to the rtc timer above?
if [ $(($curtime - $sustime)) -ge $autohibernate ]
then
# Then hibernate
rm /var/run/pm-utils/locks/pm-suspend.lock
/usr/sbin/pm-hibernate
else
# Otherwise cancel the rtc timer and wake up normally.
rtcwake -m no -s 1
fi
fi
うまくいけば、このコードがこの伝言板に掲載されることを願っています(これが私の最初の投稿です).
タイムアウト値autohibernate=7200
を編集します。ただし、休止状態に入る前に何秒スリープするかを設定します。上記の現在の値は2時間です。ラップトップは休止状態機能を実行している間、数秒間その時点で起動します。
そのため、ラップトップをケースに入れる予定がある場合は、中断せずに休止状態にしてください。そうしないと、ラップトップが特に過熱するおそれがあります。ぴったり合ったスリップケースにある場合(ただし、数秒から1分間だけオンになります)。
私は過去数日間この方法を使用してきましたが、これまでのところ成功しています(そして今日の午後にバッテリー切れから救われました)。楽しい。
systemd
以降のUbuntuバージョンを使用する他のLinuxディストリビューションでは、/usr/lib/systemd/system-sleep
の代わりに/etc/pm/sleep.d
にスクリプトを配置しても、これが機能するはずです。また、/usr/sbin/pm-hibernate
コマンドをsystemctl hibernate
に置き換えます。
これがどのように機能するかを説明するために(これはWindowsに似ています)簡単な言葉で:バッテリーが低下してもマシンがスタンバイ状態からウェイクアップせず、マシンの状態をスワップパーティションに保存できるため、すべてをすぐにスワップパーティションに保存しますスタンバイ状態で、バッテリーがなくなると、スワップパーティションから状態を読み込むことで回復します(休止状態の場合のように)。
AFAIK Linuxは、ハードウェアで機能することがわかっている場合、「通常の」スタンバイの代わりにハイブリッドスタンバイ/休止状態を使用します。あまりにも多くのバグや何かが原因で現在無効になっている可能性もあります...;)
実験が好きなら、多分あなたは pm-suspend-hybrid で良い結果を得ることができるかどうかを見ることができます。
以下が幸運だと言っている場合、理論的にはシステムでハイブリッドサスペンドがサポートされています。
pm-is-supported --suspend-hybrid && echo "you're lucky"
s2both に興味があるかもしれません。これは、Ubuntu 10.10のパッケージuswsusp
で提供されます。ディスクにサスペンドしますが、システムをシャットダウンする代わりに、S3に入れます。これは通常、Ubuntuの「サスペンド」オプションに関連付けられている電源モードです。 pm-suspend-hybrid は、同じことを目的とする別のツールです。
ふたを閉じるときにこれを自動化するには、ふたイベントがキャッチされたときに任意のスクリプトを実行できる次のガイドを参照してください。
http://ubuntuforums.org/showthread.php?t=1076486
たまたまThinkPadを持っている場合、tpctl
のマンページは引数--pm-sedation-hibernate-from-suspend-timer
を参照します。これは、探している機能を提供しているようです。私は、ThinkPad以外のハードウェアでこれを試すことに対して警告します。
参考のために、 hibernate.conf ;のマンページを調べました。関連するオプションはないようですが、一読する価値があるかもしれません。
Ubuntu 16.04では状況が少し異なるようです。そのため、私がそれを機能させるために行った手順は次のとおりです。
実行時に休止状態が期待どおりに機能していることを確認します
systemctl hibernate
元のsuspend.target
ファイルをコピーします。
Sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target
次に、ファイル/etc/systemd/system/suspend.target
を編集し、次の行を追加します。
Requires=delayed-hibernation.service
そのファイルの[Unit]
セクションに。
次の内容のファイル/etc/systemd/system/delayed-hibernation.service
を作成します。
[単位] 説明=遅延休止トリガー Before = suspend.target Conflicts = hibernate.target hybrid-suspend.target StopWhenUnneeded = true [Service] Type = oneshot RemainAfterExit = yes ExecStart =/usr/local/bin/delayed-hibernation.sh pre suspend ExecStop =/usr/local/bin/delayed-hibernation.sh post suspend [Install] WantedBy = sleep.target
/etc/delayed-hibernation.conf
を作成します。# 'delayed-hibernation.sh'スクリプトの構成ファイル #コンピューターが休止状態になるまでスリープモードで過ごす時間を秒単位で指定します TIMEOUT = 1200 #秒で、20分を与えます
実際にハードワークを行うスクリプトを作成します。
コンテンツを含むファイル/usr/local/bin/delayed-hibernation.sh
を作成します。
#!/ bin/bash #スクリプト名:delay-hibernation.sh #目的:一定期間のスリープ後の自動休止 #「タイムアウト」を編集`スリープする秒数を設定するための` $ hibernation_conf`ファイルの変数。 hibernation_lock = '/ var/run/delayed-hibernation.lock' hibernation_fail = ' /var/run/delayed-hibernation.fail' hibernation_conf='/etc/delayed-hibernation.conf' #設定ファイルの確認 if [ ! -f $ hibernation_conf]; then echo "設定ファイル( '$ hibernation_conf')がありません、中止します。" exit 1 fi hibernation_timeout = $(grep "^ [^#] "$ hibernation_conf | grep" TIMEOUT = "| awk -F '=' '{print $ 2}' | awk -F '#' '{print $ 1}' | tr -d '[[\ t]]') if ["$ hibernation_timeout" = ""]; then echo "設定ファイル( '$ hibernation_conf')から 'TIMEOUT'パラメータが欠落しています。中止します。" exit 1 Elif [[!! "$ hibernation_timeout" =〜^ [0-9] + $]]; then echo "設定ファイル( '$ hibernation_conf')の不正な 'TIMEOUT'パラメーター( '$ hibernation_timeout')、予想される秒数、中止。" exit 1 fi #指定されたパラメーターの処理 if ["$ 2" = "suspend"]; then curtime = $(date +%s) if ["$ 1" = "pre"]; then if [-f $ hibernation_fail]; then echo "ハイバネーションの失敗を検出、設定RTCウェイクアップタイマーをスキップします。" else echo "サスペンドを検出しました。記録時間、設定RTCtimer " echo" $ curtime "> $ hibernation_lock rtcwake -m no -s $ hibernation_timeout fi Elif [" $ 1 "=" post " ]; then if [-f $ hibernation_fail]; then rm $ hibernation_fail fi if [-f $ hibernation_lock]; then sustime = $(cat $ hibernation_lock) rm $ hibernation_lock if [$(($ curtime-$ sustime))-ge $ hibernation_timeout]; then echo "サスペンドからの自動再開が検出されました。休止状態..." systemctl hibernate if [$? -ne 0]; then echo "自動ハイバネーションに失敗しました。代わりにサスペンドしようとしています。" touch $ hibernation_fail systemctl suspend if [$? -ne 0]; then echo "自動ハイバネーションとフェイルオーバーのサスペンドに失敗しました。他に試すことはありません。" fi fi else echo "サスペンドからの手動再開クリアRTCtimer " rtcwake -m disable fi else echo"ファイル '$ hibernation_lock'が見つかりませんでした。 " fi else echo"認識されない最初のパラメーター: '$ 1'、予期される 'pre'または 'post' " fi else echo "このスクリプトは、systemctl delay-hibernation.service(予想される2番目のパラメーター: 'suspend')によって実行されることを意図しています。" fi
chmod 755 /usr/local/bin/delayed-hibernation.sh
このスレッドの他の返信に基づいてこのスクリプトを書くまでにかなりの時間がかかりました。インターネット上で見つけたものは https://bbs.archlinux.org/viewtopic.php?pid=1554259
私のバージョンのスクリプトは、休止状態が成功しなかった場合に再びサスペンド状態になるなど、多くの問題に対処しようとしますが、所定の時間が経過しても再び起動しないようにします。
最後のステップは、ただ実行することだと思います
Sudo systemctl daemon-reload
Sudo systemctl enable delayed-hibernation.service
新しいサービス/構成が使用されていることを確認します。
サービスログを確認するには、次を使用できます。
Sudo systemctl status delayed-hibernation.service
またはサービス使用の完全なログの場合:
Sudo journalctl -u delay-hibernation.service
実行中のサービスから取得する通常のログは次のとおりです。
mile @ mile-ThinkPad:〜$ Sudo systemctl status delayed-hibernation.service ●delayed-hibernation.service-休止状態の遅延トリガー Loaded:loaded(/ etc/systemd/system/delayed-hibernation.service; enabled; vendor preset:enabled) Active:inactive(dead) Jun 09 20:35:42 mile-ThinkPad systemd [1] :遅延休止トリガーを開始しています... Jun 09 20:35:42 mile-ThinkPad delayed-hibernation.sh [2933]:中断が検出されました。録画時間、設定RTCtimer Jun 09 20:35:42 mile-ThinkPad delayed-hibernation.sh [2933]:rtcwake:想定RTCUTCを使用.. 。 Jun 09 20:35:42 mile-ThinkPad delay-hibernation.sh [2933]:rtcwake:/ dev/rtc0を使用したThu Jun 9 18:55:43 2016 Jun 09でのウェイクアップ20:55:44 mile-ThinkPad systemd [1]:遅延休止トリガーを開始しました。 Jun 09 20:55:44 mile-ThinkPad systemd [1]:delay-hibernation.service:ユニットはもう必要ありません。 Jun 09 20:55:44 mile-ThinkPad systemd [1]:遅延休止状態トリガーの停止... Jun 09 20:55:44 mile-ThinkPad delay-hibernation.sh [ 3093]:サスペンドからの自動再開が検出されました。休止中... Jun 09 20:55:44 mile-ThinkPad systemd [1]:休止状態の遅延休止トリガー。 mile @ mile-ThinkPad:〜$
だから、これはそれだろう、私はこの便利な機能を動作させるために構成とスクリプトバージョンの正しい組み合わせを見つけようとして何日も費やしていたので、それが本当に誰かを助けることを願っています。
pm-hibernate
の間に何か問題が発生した場合に備えて、コンピュータを実行させるよりもサスペンド状態にしたいです。以下を使用できます。
...
/usr/sbin/pm-hibernate || /usr/sbin/pm-suspend
...
Derek Pressnallの答え の更新版であり、systemdで動作し、 Eliah Kaganの提案 を含み、/ usr/lib /にドロップするだけです。 systemd/system-sleep/delayed_hibernation.shそして実行可能にします:
#!/bin/bash
hibernation_timeout=1800 #30 minutes
if [ "$2" = "suspend" ]; then
curtime=$(date +%s)
if [ "$1" = "pre" ]; then
echo -e "[($curtime) $@]\nExecuting pre-suspend hook..." >> /tmp/delayed_hibernation.log
echo "$curtime" > /var/run/delayed_hibernation.lock
rtcwake -m no -s $hibernation_timeout
Elif [ "$1" = "post" ]; then
echo -e "[($curtime) $@]\nExecuting post-suspend hook..." >> /tmp/delayed_hibernation.log
sustime=$(cat /var/run/delayed_hibernation.lock)
if [ $(($curtime - $sustime)) -ge $hibernation_timeout ]; then
echo -e "Automatic resume detected, hibernating.\n" >> /tmp/delayed_hibernation.log
systemctl hibernate || systemctl suspend
else
echo -e "Manual resume detected, clearing RTC alarm.\n" >> /tmp/delayed_hibernation.log
rtcwake -m no -s 1
fi
rm /var/run/delayed_hibernation.lock
fi
fi
これが私のレシピです(2つのノートブックUbuntu 16.04でテスト済み)。
このスクリプトを好きな場所に置いて(私はrootに/syspend.sh
)、実行可能にします(chmod +x /suspend.sh
)
TIMELOG=/tmp/autohibernate.log
ALARM=$(tail -n 1 $TIMELOG)
SLEEPTIME=5000 #edit this line to change timer, e.g. 2 hours "$((2*60*60))"
if [[ $1 == "resume" ]]
then
if [[ $(date +%s) -ge $(( $ALARM + $SLEEPTIME )) ]]
then
echo "hibernate triggered $(date +%H:%M:%S)">>$TIMELOG
systemctl hibernate 2>> $TIMELOG
else
echo "normal wakeup $(date +%H:%M:%S)">>$TIMELOG
fi
Elif [[ $1 == "suspend" ]]
then
echo "$(date +%s)" >> $TIMELOG
rtcwake -m no -s $SLEEPTIME
fi
次に、systemdターゲットを作成します:# touch /etc/systemd/system/suspend-to-sleep.target
このコンテンツを貼り付けます:
#/etc/systemd/system/suspend-to-hibernate.service
[Unit]
Description=Delayed hibernation trigger
Before=suspend.target
Conflicts=hibernate.target hybrid-suspend.target
StopWhenUnneeded=true
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /suspend.sh suspend
ExecStop=/bin/bash /suspend.sh wakeup
[Install]
WantedBy=sleep.target
RequiredBy=suspend.target
次に、それを有効にします# systemctl enable suspend-to-sleep.target
。
私はノートブックの1つで問題に直面しました:ふたを閉じてもこのターゲットはトリガーされませんでした。これはxfce4-power-managerが原因でした。この問題を回避するには2つの方法があります。最初の方法は、/etc/systemd/logind.conf
ファイルを編集し、HandleLidSwitch=ignore
をHandleLidSwitch=suspend
に置き換えることです。ただし、システム全体に適用されるため、スクリプトにシンボリックリンクを追加しました# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
別のより一般的な回避策として、hybrid-sleep
を使用できます(Mac OSと同様)。コンピューターが休止状態をサポートしている場合、この機能を使用できます。
systemctl hybrid-sleep
そのコマンドは、コンピューターを中断し、ディスクに送信(休止状態)する必要があります。しばらくすると、コンピューターの電源が切れます(電源を入れると、休止状態ファイルを使用して起動します)。
p.s .: OPが投稿したものとは正確には一致しませんが、かなり近い
そのファイルをchmod + xすることを忘れずに、実行可能にしてください。
/ sys/class/rtc/rtc0のwakealarmを使用して、rtcwakeを使用しない別のソリューションがあります。カーネルが直接サポートしていないので、コメントの後にpm-functions(/ usr/lib/pm-utils)で廃止されたコードを使用します...((現在のカーネル(3.6以降)は直接サポートします)。そのコードを元に戻し、do_suspend_hybrid()の代わりにdo_suspend()部分に入れます。
廃止されたコード(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モジュールのdo_suspend()部分(/usr/lib/pm-utils/module.d)に配置します。
元に戻されたコード(サスペンドが呼び出されたときの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