如何让Folding@Home在空闲时运行?

如何让Folding@Home在空闲时运行?

我已经安装并配置了 Folding@Home:

$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 19.10
Release:    19.10
Codename:   eoan
$ FAHClient --version
7.5.1
$ cat /etc/fahclient/config.xml 
<config>
  <!-- Network -->
  <proxy v=':8080'/>

  <!-- Slot Control -->
  <idle v='true'/>
  <power v='FULL'/>

  <!-- User Information -->
  <team v='[omitted]'/>
  <user v='[omitted]'/>

  <!-- Folding Slots -->
  <slot id='0' type='CPU'/>
  <slot id='1' type='GPU'/>
</config>

但是,启动服务后永远不会开始处理。如果我切换客户的idle设置它立即开始处理,但是即使我将设置降低power到中等,机器也几乎无法用于其他任何事情。如何确保 Folding@Home 在且仅在机器空闲时才工作?也就是说,在没有人工干预的情况下,它应该在几分钟的空闲时间后开始处理,并在不再空闲时立即停止处理。

答案1

我有完全相同的问题,客户从不认为我的计算机空闲。我最终制作了一个脚本,仅在屏幕锁定时恢复 FAH。效果非常好。您可以在这里查看:

https://github.com/Madoshakalaka/gnome-folding-at-screenlock

以下是在存储库出现故障时使其正常工作的完整步骤:

  1. 将此服务文件复制到/home/YOUR_DESTOP_USER/.config/systemd/user/gnome-folding-at-screenlock.service
[Unit]
Description=FAH controller based on screen locking/unlocking signals

[Service]
ExecStart=/usr/bin/gnome-folding-at-screenlock.sh

[Install]
WantedBy=default.target
  1. 将此 shell 脚本复制到您的/usr/bin/gnome-folding-at-screenlock.sh并为其授予可执行权限sudo chmod +x /usr/bin/gnome-folding-at-screenlock.sh
#!/usr/bin/env sh

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
# Somehow I receive duplicate signals during locking and unlocking.
# It's a weird behavior but does no harm in our case.
  while read x; do
    case "$x" in
    "boolean true")
      echo "screen turns locked. Initiate folding" && FAHClient --send-unpause ;;
    "boolean false") echo "screen turns unlocked. Unfold! Unfold!" && FAHClient --send-pause ;;
    *) ;;
    esac
  done
  1. sudo systemctl enable foldingathome && sudo systemctl start foldingathome如果您还没有这样做。请注意,我们的脚本不会启动或停止foldingathome服务。它假设服务已启动并通过 暂停/取消暂停折叠FAHClient。暂停或取消暂停将保留在位于 的配置文件中/etc/foldingathome/config.xml
  2. 转到浏览器中的仪表板http://localhost:7396/并更改一些选项。您应该勾选“当我工作时”选项,因为我们不再依赖 FAH 的空闲检测。此外,您也可以设置理想的功率级别。最后,通过点击“停止折叠”按钮来停止折叠,这实际上会<paused v='true'>向您的配置文件添加一个标签(它的作用与唤醒显示器时我们的脚本所做的完全相同)。
  3. systemctl --user enable gnome-folding-at-screenlock.service。不要以 root 身份或使用 sudo 运行,因为锁定和解锁与您的桌面用户相关。
  4. systemctl --user start gnome-folding-at-screenlock.service。不要以 root 身份或使用 sudo 运行。
  5. 完毕!现在,只要您离开计算机,只需按super+即可锁定屏幕。l蛋白质将立即开始折叠!当你回来后,解锁你的电脑,折叠就会立即暂停!
  6. 为了获得奖励积分,请转到 GNOMESettings > Power并关闭自动暂停,否则将无法进行扩展折叠。默认情况下,20 分钟不活动后会暂停,这也会停止 FAH。

答案2

这是我的快速而肮脏的解决方案,灵感来自于答案https://unix.stackexchange.com/a/259963

#!/bin/bash

let TIMEOUT_MINUTES=5
let TIMEOUT_MS=TIMEOUT_MINUTES*60000

while [ 0 ]
do
IDLE=$(xprintidle)
    if [ $IDLE -lt $TIMEOUT_MS ]
        then
            FAHClient --send-pause
        else
            FAHClient --send-unpause
    fi
    sleep 15
done

只需根据您的喜好更改TIMEOUT_MINUTESsleep值,然后将其设置为在登录时启动。

如果xprintidle您的存储库中没有,就像我运行 Fedora 37 时的情况一样,您可以从源代码构建它(可在https://github.com/g0hl1n/xprintidle)。

相关内容