中断中のシャットダウンタイムアウト

中断中のシャットダウンタイムアウト

現在、GNOME電源管理でタイムアウトを設定していますが、その後システムが停止します。

一時停止中に一定期間アクティビティがない場合は、システムがシャットダウンするように追加のタイムアウトを追加したいと思います。

したがって、次のようになります。

  1. 15分間アクティビティがない場合は一時停止します。
  2. 12時間活動がなければ終了します。

答え1

休止状態が正常な場合は、systemdを使用してください。これにより、suspend-then-hibernateタイムアウト後に停止したシステムが休止状態になります。希望の値sleep.confに設定してください。HibernateDelaySec=

源泉公式システムマニュアル


編集する:

休止状態機能を使用するには、Fedoraを再構成して有効にする必要があります。

  1. まずスワップパーティションが必要です少なくともRAMサイズ - 休止状態はRAMの内容をスワップパーティションに格納することを意味するため、サイズは説明を必要としません。通常、これは現在のパーティションを縮小し、新しいスワップパーティションを作成することを意味します。

これに関するガイドは次のとおりです。

スワップパーティションを追加し/etc/fstab、アクティベーションを通じて使用することを忘れないでくださいswapon -a。 fstabエントリの例:

# swap:
UUID=abc123-this-is-a-uuid none swap sw 0 0
  1. initramfsに回復オプションを追加します。この目的のためにFedoraにdracut従ってください。このガイド
  • /etc/dracut.conf.d/resume.confこの行を使用してファイルを作成しますadd_dracutmodules+=" resume "(スペースを忘れないでください)。
  • 走るdracut -f
  1. grubにスワップパーティションを追加して、復元する場所を知ることができます。
  • /etc/default/grubルートを探すGRUB_CMDLINE_LINUX=
  • 追加resume=UUID=abc123-this-is-a-uuid(例:UUID交換)
  • グラップアップデートgrub2-mkconfig -o /boot/grub2/grub.cfgまたはgrub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
  1. 必ず必要だとは思わないけど、痛くないと思います。休止状態を有効にする/etc/systemd/sleep.conf:

    [Sleep]
    AllowHibernation=yes
    HibernateMode=shutdown
    
  2. 再起動と休止状態テスト:いくつかのウィンドウを開き、実行しますsystemctl hibernate。再起動すると、ウィンドウが閉じて再起動します。

答え2

Fedoraはsystemdシステムの完全な管理者として機能し、Gnomeはスリープ/スタンバイ/一時停止を操作しますsystemd

「一時停止」とは「RAMの一時停止」(「ディスクの一時停止」とは反対)を意味し、「終了」とは文字通り「マシンの電源を切る」を意味し、マシンにシステムを起動させることができ、したがって許容可能なウェイクアップデバイスとしてBIOS / EFIでハードウェアクロックを有効にすることは、指定された時間後に「一時停止」状態で自己電源遮断を達成するように細かく設計されたいくつかのsystemd「デバイス」(言い換えれば)を介して設定できます。systemd時間が経過しました。また、変換中に休止状態モードはまったく含まれていません(専用のスワップ/パーティションを含む)。

これらのカスタマイズさsystemdれたデバイスは、デフォルトで「一時停止」状態に入る直前に目覚め[Timer]、アラームがトリガーされるとシステムも起動し、同じことを行います[Service]。デバイスが別の方法で起動し、タイマーが期限切れになっていない場合、自動シャットダウンは実行されず、完全にキャンセルされます。[Timer][Service]

systemdこの種のロジックを実装するために私が思いついたユニットがかなり多いので、ここにすべてインストールするシェルスクリプトがあります。スクリプトは「sudoroot」で一度だけ実行できます(システム全体(ユーザー範囲ではない) 構成systemd:

#!/bin/sh --

sysd=/etc/systemd/system

set -e

mkdir -p "$sysd/systemd-suspend.service.d"

cat > "$sysd/systemd-suspend.service.d/99-trigger-system-back-after-suspend.conf" <<'EOF'
[Service]
ExecStopPost=-/bin/systemctl --no-block start system-is-back-after-suspend.target
EOF

cat > "$sysd/cancel-self-poweroff.service" <<'EOF'
[Unit]
Description=Cancel self-poweroff after suspend
After=system-is-back-after-suspend.target
Conflicts=self-poweroff.timer

[Service]
Type=oneshot
ExecStart=/bin/rm -f /run/systemd/system/self-poweroff.timer

[Install]
WantedBy=system-is-back-after-suspend.target
EOF

cat > "$sysd/self-poweroff.service" <<'EOF'
[Unit]
Description=Actual self-poweroff after suspend
After=suspend.target 
Before=system-is-back-after-suspend.target
RefuseManualStart=true

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block poweroff
# Uncomment the following line while commenting out the above line for testing.
#ExecStart=/bin/echo poweroff
# Note the echoed string goes to systemd journal log.
# Do a `systemctl daemon-reload` after modifying this file.
EOF

cat > "$sysd/schedule-self-poweroff.service" <<'EOF'
[Unit]
Description=Schedulation of self-poweroff after some time spent in suspend state
Before=systemd-suspend.service
Requisite=suspend.target

[Service]
Type=oneshot
EnvironmentFile=/etc/self-poweroff.conf
ExecStartPre=/bin/sh -c 'printf -- %%s\\\\n "[Timer]" "Persistent=yes" "OnCalendar=$(date -d "now + ${MY_SUSPEND_TIMEOUT}" "+%%Y-%%m-%%d %%H:%%M:%%S")" "AccuracySec=1s" "WakeSystem=yes" >| /run/systemd/system/self-poweroff.timer'
ExecStart=/bin/systemctl start self-poweroff.timer
# On systemd 237 onwards (Fedora 28 onwards) you may uncomment the line below while commenting out the above ExecStart and ExecStartPre lines
#ExecStart=/bin/sh -c 'systemd-run --on-calendar="$(date -d "now + ${MY_SUSPEND_TIMEOUT}" "+%%Y-%%m-%%d %%H:%%M:%%S")" --timer-property=AccuracySec=1s --timer-property=WakeSystem=yes --timer-property=Persistent=yes --unit=self-poweroff.service'
# Do a `systemctl daemon-reload` after modifying this file.

[Install]
WantedBy=suspend.target
EOF

cat > "$sysd/system-is-back-after-suspend.target" <<'EOF'
[Unit]
Description=Synchronization point for self-poweroff after suspend
DefaultDependencies=no
After=suspend.target
StopWhenUnneeded=yes
EOF

cat > /etc/self-poweroff.conf <<'EOF'
MY_SUSPEND_TIMEOUT=12 hours
EOF

systemctl enable schedule-self-poweroff.service cancel-self-poweroff.service
systemctl daemon-reload

デバイスをインストールするためにスクリプトを実行した後、スクリプトによって/etc/self-poweroff.conf生成された特殊ファイルのタイムアウトを変更できます。ここでMY_SUSPEND_TIMEOUT変数を希望の時間に設定でき、コマンドの日付解析機能に応じて、時間をhours分()および/または秒()で表示できます。minssecsdate -d

答え3

回答全体がわからない場合でも、/etc/systemd/logind.conf次の行を編集して追加すると検索に役立ちます。

IdleAction=poweroff
IdleActionSec=720min

これにより、12時間の「アイドル」時間が経過するとシステムの電源が切れます。ただし、セッションが中断されるとアイドル状態で報告されるかどうかはわかりません。

関連情報