uswsuspを使用するための一時停止後の休止状態の設定
私はuswsuspを使ってRAMを一時停止し、systemdを介してディスクを一時停止します(休止状態)。だから/etc/systemd/system/systemd-suspend.service.d/override.conf
とを調整しました/etc/systemd/system/systemd-hibernate.service.d/override.conf
。
uswsuspを使用して、中断されたジョブと休止状態のジョブを見つけます。私の問題は、systemdがまだカーネルのswsuspを使用して一時停止してから休止状態にすることです。もちろん、これは誤ったmkinitcpioフックが原因で休止状態で回復が失敗することになります。
/etc/systemd/system/systemd-suspend-then-hibernate.service.d/override.conf
私の考えでは、一時停止後に休止状態()のシステム構成も調整する必要があると思います。しかし、どのような姿かはわかりません。 uswsuspが一時停止後に休止状態をサポートすることは可能ですか?
私はアーチLinuxを使用しています。この問題はある程度関連しています。これ。
/etc/systemd/system/systemd-suspens.service.d/override.conf:
[Service]
ExecStart=
ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/bin/s2ram
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
/etc/systemd/system/systemd-hibernate.service.d/override.conf:
[Service]
ExecStart=
ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/bin/s2disk
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
ベストアンサー1
@AdamLettの回答に触発され、次の解決策/解決策を実装しました。
/usr/local/bin/s2ram-then-s2disk.shで生成されたカスタムスクリプトを使用するために、systemd-suspens-then-hibernateサービスを編集しました。
#!/bin/bash
# Custom suspend-then-hibernate script using uswsusp.
# Edit the "HibernateDelaySec" variable below to set the number
# of seconds to remain in suspend before hibernate.
HibernateDelaySec=1200
curtime=$(date +%s)
lock=/tmp/rtchibernate.lock
# Suspending... Record current time and set a wake up timer.
echo "$curtime" > $lock
rtcwake -m no -s $HibernateDelaySec
s2ram
# The systen is now suspended.
# Coming out of sleep...
curtime=$(date +%s)
sustime=`cat $lock`
rm $lock
# Did we wake up due to the rtc timer above?
if [ $(($curtime - $sustime)) -ge $HibernateDelaySec ]; then
# Hibernate (suspend to disk)...
s2disk
else
# Cancel the rtc timer and wake up normally.
rtcwake -m disable
fi
/etc/systemd/system/systemd-suspens-then-hibernate.service.d/override.conf
[Service]
ExecStart=
ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/local/bin/s2ram-then-s2disk.sh
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep