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.sh
con 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.sh
con 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 echo
declaraciones en el RealTimeSync_kill_suspend.sh
script y líneas después de ambas echo
declaraciones en RealTimeSync_resume.sh
el 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 RealTimeSync
no 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.sh
obtengo 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-x
permisos.
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 DISPLAY
y 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 DISPLAY
puede 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.