しばらく寝る方法

しばらく寝る方法

次の規則に従ってノートブックカバーを閉じる動作を提供しようとしています。

ふたを閉めたとき:

  1. 画面は1m後にロックされます。
  2. 10分後に一時停止します。
  3. 15m後は機械を停止する必要があります。

だから私は次のようなスクリプトを書いた。

#!/bin/bash
 
USER=fauve
 

sleep 1m
# set screensaver
su -c  "$HOME/.local/bin/screenlock" - $USER

# hibernate
sleep 9m
systemctl suspend


sleep 5m
# shutdown
shutdown 0

ただし、見てわかるように、shutdownこれはラップトップが一時停止しているときに発生するため、決して終了しません。

それでは、5分間一時停止または終了し、スクリプトがコンピュータを完全にシャットダウンするようにプログラムを作成しますか?

答え1

簡単に言えば、あなたはできません。少なくともソフトウェアに関してはそうではありません。コンピュータをサスペンド状態に切り替えると、コンピュータはサスペンドされます。このようなソフトウェアsleep(またはより正確には、特定の時間の後にジョブを目覚めさせるようにカーネルに指示するシステムスティックまたはタイマー)は実行されません。

したがって、ここで唯一の質問はハードウェアソリューションです。ラップトップを目覚めさせ、一時停止状態から離れるにはアラームが必要です!

幸いなことに、これはかなり標準的なものです。

echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date '+%s' -d "+ 5 minutes"` > /sys/class/rtc/rtc0/wakealarm
systemctl suspend
systemctl shutdown 

そうします。ラップトップがサポートしている場合。

私はこの声明の意味を疑います。スクリプト方式、ノートブックいつも5分以上一時停止終了直後に終了します。私の考えでは、他に何かをしたいと思います。私の考えでは、実際に5分が経過したことを確認し、そうでない場合は、ノートブックが手動で一時停止状態からオフになっているとします。いいえ消しなさい。このような場合は、一時停止前の時間を保存し、一時停止後の時間と比較してください。

たぶんあなたが欲しいですかsystemctl suspend-then-hibernate?これは可能なことのようです。内部的には同じことを行います。 RTCを使用して特定のポイントで一時停止を終了し、システム状態をディスクに保存して電源を切ります。〜しない限り以前は手動で目覚めました。

関連情報