Ejecutar el programa desde un script al reanudar desde la suspensión

Ejecutar el programa desde un script al reanudar desde la suspensión

Intento ejecutar el programa RealTimeSync al reanudar el sistema desde el modo de suspensión usando el script ubicado en /lib/systemd/system-sleep/un archivo RealTimeSync_kill_suspend.shcon el siguiente contenido:

#!/bin/sh

case $1 in
        pre)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                exit
                ;;
        post)
                echo "$(date) - $1: Invoking RealTimeSync resume script" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
esac

Sé que ejecuta un subíndice RealTimeSync_resume.shcon el siguiente contenido:

#!/bin/sh

echo "$(date) - Running RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

/home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real &

echo "$(date) - RealTimeSync should be running" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

exit

ya que coloca líneas después de ambas echodeclaraciones en el RealTimeSync_kill_suspend.shscript y líneas después de ambas echodeclaraciones en RealTimeSync_resume.shel subguión en un archivo de registro suspend_resume.log:

czw, 5 sie 2021, 16:55:50 CEST - pre: Killing RealTimeSync
czw, 5 sie 2021, 16:55:58 CEST - post: Invoking RealTimeSync resume script
czw, 5 sie 2021, 16:55:58 CEST - Running RealTimeSync
czw, 5 sie 2021, 16:56:28 CEST - RealTimeSync should be running

Pero cuando busco el proceso ps -aux | grep RealTimeSyncno muestra ninguna coincidencia adecuada, solo:

bart       31262  0.0  0.0  12252  2612 pts/0    S+   17:38   0:00 grep --color=auto RealTimeSync

Cuando ejecuto el subscript, sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.shobtengo el proceso correcto ejecutándose con ps -aux | grep RealTimeSync:

bart       31066  0.0  0.0    212    68 pts/0    S    17:37   0:00 /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
bart       31071  0.3  0.1 442428 41260 pts/0    Sl   17:37   0:00 /home/bart/Applications/FreeFileSync/Bin/RealTimeSync_x86_64 /home/bart/Documents/Documents_backup.ffs_real
bart       31262  0.0  0.0  12252  2612 pts/0    S+   17:38   0:00 grep --color=auto RealTimeSync

Todos los archivos mencionados tienen -rwxr-xr-xpermisos.

Después de buscar en foros, se me ocurrió que RealTimeSync necesita algún servicio que se activa al iniciar sesión y que no está disponible; por ejemplo, las personas que tenían problemas con la ejecución de scripts al iniciar sincronizadores necesitaban el servidor X para conectarse:

declare -x DISPLAY=":0.0"
declare -x XAUTHORITY="/home/<your user>/.Xauthority"
synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1

de este hilo del foro:https://ubuntuforums.org/showthread.php?t=2380045

Estaría agradecido por cualquier ayuda.

EDITAR 1

Descubrí que "FreeFileSync y ReadTimeSync necesitan acceso a la pantalla gráfica X11, por lo que no pueden ejecutarse a través del modo de sistema. En el modo de usuario, systemd conoce la sesión gráfica del usuario y la usa". Entonces hay posibles 2 soluciones:

Cualquiera de los mencionados anteriormente, codificación rígida DISPLAYy XAUTHORITY, no se recomienda ya que el valor DISPLAY puede diferir de una sesión a otra.

O ejecutarse como servicio de usuario, no como servicio del sistema, ya que la visualización se inicializa para el usuario.

Esto lo encontré aquí, solución de problemas al ejecutar FreeFileSync como servicio del sistema:https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly

Lamentablemente tengo problemas para implementar estas soluciones, agradecería cualquier ayuda.

EDITAR 2

Ok, ¡lo logré! Ahora ejecuto RealTimeSync desde el script principal, aunque supongo que esto no hace ninguna diferencia, lo importante es inicializar 'DISPLAY' de la siguiente manera:

#!/bin/sh

case $1 in
        pre)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                exit
                ;;
        post)
                echo "$(date) - Invoking RealTimeSync resume script" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                env DISPLAY=:1 sudo -u bart /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
;;
esac

Y establezca el propietario de este script como root:chown root:root <script_name>

La solución fue desde aquí:iniciar el script después de reanudar como usuario registrado (no root)

Según tengo entendido, esto es más una solución que una solución adecuada, ya que la codificación DISPLAYpuede plantear problemas, pero funciona temporalmente. En caso de que alguien sepa cómo ejecutar esto correctamente como usuario y no como root, agradecería cualquier sugerencia.

información relacionada