次の規則に従ってノートブックカバーを閉じる動作を提供しようとしています。
ふたを閉めたとき:
- 画面は1m後にロックされます。
- 10分後に一時停止します。
- 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を使用して特定のポイントで一時停止を終了し、システム状態をディスクに保存して電源を切ります。〜しない限り以前は手動で目覚めました。