きっかけ
ASMR動画を流しながら寝たいが、寝てる間ずっとパソコンが動画を再生していると、経済的ではない。そこで、一定時間後にパソコンをシャットダウンまたはスリープ状態にする方法がないか調べた。
使用OS
Ubuntu 22.04 jammy
シャットダウンとスリープ状態の利点と欠点
具体的な方法の前にまずシャットダウンとスリープ状態の利点と欠点を述べると
シャットダウン
-
利点
-
エネルギーの節約
コンピュータを完全にオフにし、長時間の非アクティブ時に電力を節約。 -
システムのリフレッシュ
クリーンな状態から起動することで、ソフトウェアに関連する問題を解決することがある。 -
摩耗の軽減
定期的なシャットダウンにより、ハードウェアの寿命を延ばすのに役立つ。
-
エネルギーの節約
-
欠点
-
起動に時間がかかる
完全なシャットダウンからの起動には時間がかかる。 -
作業の中断
すべてのアプリケーションを終了することは作業をすぐに再開する必要がある場合に不便。
-
起動に時間がかかる
サスペンド(スリープモードまたはスタンバイ)
-
利点
-
早い再開
システムがセッションをメモリに保持するため、作業をすばやく再開できる。 -
アプリケーションの状態保持
再開時に開いていたアプリケーションとファイルはそのままの状態を保持。 -
エネルギー効率
短い非アクティブ期間中、通常の運用に比べて消費電力が少ない。
-
早い再開
-
欠点
-
電力の消費
メモリを維持するために一部の電力を消費する。 -
バッテリーの消耗(ラップトップ)
ラップトップが充電されていない場合バッテリーを消耗する。保存されていないファイルがある場合充電がゼロになると、編集内容が消えてしまう。 -
安定性の問題
まれにサスペンドモードからの再開が安定性の問題を引き起こす場合がある。
-
電力の消費
以上を踏まえて、状況に応じてどちらかを選ぶ。
一定時間後にシャットダウンする方法
例えば60分後にシャットダウンして欲しければ以下をターミナルで実行。
sudo shutdown -h +60
一定時間後にサスペンドする方法
以下の方法がうまく行った。
-
Bashシェルスクリプトを作成(ファイル名は適当)して開く
例えばvimで開く場合vim suspend.sh
-
以下をファイル内に記述して保存
#!/bin/bash #スクリプト引数の数をチェックし、1つでない場合は使用方法を表示し、スクリプトを終了 if [ $# -ne 1 ]; then echo "Usage: $0 <duration>" echo "Example: $0 30m (for 30 minutes)" exit 1 fi #スクリプトの引数からスリープタイマーの時間を取得 duration="$1" #sleep-timer.serviceファイルを生成し、 #指定された時間後にスリープ(サスペンド)するコマンドを定義 cat > /etc/systemd/system/sleep-timer.service <<EOF [Unit] Description=Sleep timer for automatic suspend [Service] Type=oneshot ExecStart=/bin/bash -c "sleep $duration && systemctl suspend" [Install] WantedBy=multi-user.target EOF #sleep-timer.timerファイルを生成し、 #起動後に指定された時間後にsleep-timer.serviceを起動するタイマーを定義 cat > /etc/systemd/system/sleep-timer.timer <<EOF [Unit] Description=Sleep timer for automatic suspend [Timer] OnBootSec=$duration Unit=sleep-timer.service [Install] WantedBy=timers.target EOF # systemdマネージャーをリロードし、新しい設定を適用 systemctl daemon-reload # 新しいタイマー設定を反映させる systemctl restart sleep-timer.timer #スリープタイマーが設定された時間を表示 echo "Sleep timer set to $duration. The system will suspend after $duration of inactivity."
-
コマンドラインでの実行
これにより、例えば60分後にサスペンドして欲しければ以下を実行。sudo ./suspend.sh 60m
10秒後にサスペンドしてほしければ
sudo ./suspend.sh 10s
2時間後なら
sudo ./suspend.sh 2h