Как заставить 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. Скопируйте этот скрипт оболочки на свой компьютер /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. Для бонусных очков перейдите в GNOME Settings > 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_MINUTESи sleepпо своему усмотрению, а затем настройте запуск при входе в систему.

Еслиxprintidle его нет в вашем репозитории, как это было в моем случае при работе с Fedora 37, вы можете собрать его из исходного кода (доступного по адресуhttps://github.com/g0hl1n/xprintidle).

Связанный контент