uswsuspをsystemdで使用して一時停止してから休止状態にする方法は?

uswsuspをsystemdで使用して一時停止してから休止状態にする方法は?

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

おすすめ記事