目前,我在 GNOME 电源管理中设置了超时,之后我的系统将挂起。
我想添加一个额外的超时,以便系统在挂起期间处于不活动状态一段时间后关闭。
所以它看起来像这样:
- 15 分钟不活动后暂停。
- 暂停期间不活动 12 小时后关闭。
答案1
如果休眠没问题,请使用 systemd suspend-then-hibernate
,它会在超时后休眠挂起的系统。设置sleep.conf
为HibernateDelaySec=
您想要的值。
来源官方系统手册。
编辑:
为了使用休眠功能,Fedora 需要重新配置才能启用它。
- 首先你需要一个交换分区至少RAM 的大小 - 休眠意味着将 RAM 的内容保存到交换分区,因此大小是不言自明的。通常这意味着缩小当前分区并创建新的交换分区。
这方面的指南在这里:
- 例如通过实时启动 shink 分区,然后创建交换分区,例如通过 cfdisk
- 或者这个是通过LVM管理的
不要忘记添加交换分区/etc/fstab
并通过 激活使用swapon -a
。 fstab 条目示例:
# swap:
UUID=abc123-this-is-a-uuid none swap sw 0 0
- 将恢复选项添加到 initramfs。 Fedora 用于
dracut
此目的,我将遵循本指南。
/etc/dracut.conf.d/resume.conf
使用该行创建一个文件add_dracutmodules+=" resume "
(确保不要忘记空格)- 跑步
dracut -f
- 将交换分区添加到 grub,以便它知道从哪里恢复:
- 寻找
/etc/default/grub
线路GRUB_CMDLINE_LINUX=
- 添加
resume=UUID=abc123-this-is-a-uuid
(即交换UUID) - 更新grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
或者grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
我认为这没有必要,但不会造成伤害。激活休眠
/etc/systemd/sleep.conf
:[Sleep] AllowHibernation=yes HibernateMode=shutdown
重新启动并测试休眠:打开一些窗口,运行
systemctl hibernate
.它应该关闭,并且窗口会在您重新启动后恢复。
答案2
Fedorasystemd
作为系统的总体管理器,Gnome 默认将睡眠/待机/挂起操作中继到systemd
.
假设“挂起”的意思是“挂起到 RAM”(与“挂起到磁盘”相对),“关机”的意思是字面上的“关闭机器电源”,并且还假设机器装有支持系统唤醒并因此在 BIOS/EFI 中启用作为可接受的唤醒设备的硬件时钟,可以systemd
通过一些精心设计的“单元”(如systemd
用语)进行配置,以便在经过指定时间后实现自断电处于“挂起”状态,同时在转换期间根本不涉及休眠(也不涉及任何专用交换/分区)。
这些自定义systemd
单元本质上是在进入“挂起”状态之前立即进行唤醒[Timer]
,一旦警报触发,系统就会被唤醒以执行[Service]
与[Timer]
.这[Service]
当然执行断电操作。如果机器通过其他方式唤醒,因此计时器尚未超时,则不会执行自动关机并完全取消。
systemd
我为实现此类逻辑而提出的单元相当多,因此这里有一个安装所有这些单元的 shell 脚本。该脚本只需以“root”身份运行一次(通过sudo
即可),以便在全系统(不是用户范围的)配置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
和/或分钟 ( mins
) 和/或秒 ( ) 表示时间。secs
date -d
答案3
在不知道完整答案的情况下,但编辑/etc/systemd/logind.conf
和添加以下行可能会对您的搜索有所帮助。
IdleAction=poweroff
IdleActionSec=720min
这将在 12 小时的“空闲”时间后关闭系统电源。但我不确定如果会话被挂起,是否会报告为空闲。