¿Cómo hacer que Folding@Home se ejecute cuando está inactivo?

¿Cómo hacer que Folding@Home se ejecute cuando está inactivo?

He instalado y configurado 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>

Sin embargo, después de iniciar el servicio nunca comienza a procesarse. Si cambio elidleconfiguración del clientecomienza a procesarse inmediatamente, pero luego la máquina queda prácticamente inutilizable para cualquier otra cosa, incluso si reduzco la powerconfiguración a media.¿Cómo puedo asegurarme de que Folding@Home funcione cuando, y sólo cuando, la máquina esté inactiva?Es decir, sin intervención manual, debería comenzar a procesarse después de unos minutos de inactividad y debería detenerse inmediatamente cuando ya no esté inactivo.

Respuesta1

Tengo exactamente el mismo problema y el cliente nunca piensa que mi computadora está inactiva. Terminé creando un script que solo reanuda FAH cuando la pantalla está bloqueada. Funcionó de maravilla. Puedes consultar aquí:

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

Estos son los pasos completos para que esto funcione en caso de que el repositorio falle:

  1. Copie este archivo de servicio a/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. Copie este script de shell a su /usr/bin/gnome-folding-at-screenlock.shy otorgue el permiso ejecutable con 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 foldingathomeSi aún no lo has hecho. Tenga en cuenta que nuestro script no iniciará ni detendrá el foldingathomeservicio. Se supone que el servicio está iniciado y pausa/reanuda el plegado a través de FAHClient. La pausa o reanudación persistirá en el archivo de configuración ubicado en /etc/foldingathome/config.xml.
  2. Vaya al panel de su navegador en http://localhost:7396/y cambie algunas opciones. Debe marcar la opción "Mientras estoy trabajando" porque ya no dependemos de la detección inactiva de FAH. Además, también puedes configurar tu nivel de potencia ideal. Finalmente, detenga el plegado presionando el botón "Detener plegado", que en realidad agrega una <paused v='true'>etiqueta a su archivo de configuración (hace exactamente lo mismo que hace nuestro script cuando activa su monitor).
  3. systemctl --user enable gnome-folding-at-screenlock.service. No lo ejecute como root o con sudo porque el bloqueo y desbloqueo está vinculado al usuario de su escritorio.
  4. systemctl --user start gnome-folding-at-screenlock.service. No lo ejecute como root o con sudo.
  5. ¡Hecho! Ahora puedes presionar super+ ly bloquear la pantalla cuando estés lejos de la computadora. ¡Las proteínas comenzarán a plegarse de inmediato! Cuando regrese, desbloquee su computadora y el plegado se detendrá inmediatamente.
  6. Para obtener puntos de bonificación, vaya a GNOME Settings > Powery desactive la suspensión automática; de lo contrario, no será posible el plegado extendido. De forma predeterminada, la suspensión ocurre después de 20 minutos de inactividad, esto también detendrá FAH.

Respuesta2

Aquí está mi solución rápida y sencilla, inspirada en la respuesta enhttps://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

Simplemente cambie los valores TIMEOUT_MINUTESy sleepa su gusto y luego configúrelo para comenzar al iniciar sesión.

Si xprintidleno está en su repositorio, como fue mi caso al ejecutar Fedora 37, puede compilarlo desde el código fuente (disponible enhttps://github.com/g0hl1n/xprintidle).

información relacionada