Executando o programa a partir de um script ao retomar da suspensão

Executando o programa a partir de um script ao retomar da suspensão

Tento executar o programa RealTimeSync ao retomar o sistema do modo de suspensão usando o script localizado no /lib/systemd/system-sleep/arquivo RealTimeSync_kill_suspend.shcom o seguinte conteúdo:

#!/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

Eu sei que ele executa um subscript RealTimeSync_resume.shcom o seguinte conteúdo:

#!/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

pois ele descarta linhas após ambas echoas instruções no RealTimeSync_kill_suspend.shscript e linhas após ambas echoas instruções no RealTimeSync_resume.shsubscript em um arquivo de log 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

Mas quando procuro o processo com ps -aux | grep RealTimeSyncele não mostra nenhuma correspondência adequada, apenas:

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

Quando executo o subscript com, sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.shobtenho o processo correto em execução com 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 os arquivos mencionados possuem -rwxr-xr-xpermissões.

Depois de pesquisar nos fóruns, percebi que o RealTimeSync precisa de algum serviço ativado no logon que não está disponível, por exemplo, pessoas que tiveram problemas com a execução de scripts iniciando synclients precisavam do servidor X para se conectar:

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

deste tópico do fórum:https://ubuntuforums.org/showthread.php?t=2380045

Eu ficaria grato por qualquer ajuda.

EDITAR 1

Descobri que "FreeFileSync e ReadTimeSync precisam de acesso à exibição gráfica do X11, portanto, não podem ser executados no modo de sistema. No modo de usuário, o systemd conhece a sessão gráfica do usuário e a utiliza." Portanto, existem 2 soluções potenciais:

Qualquer um dos mencionados acima, codificação DISPLAYe XAUTHORITY, desencorajados porque o valor DISPLAY pode diferir de sessão para sessão.

Ou executando como serviço do usuário, não como serviço do sistema, pois a exibição é inicializada para o usuário.

Encontrei isso aqui, solução de problemas ao executar o FreeFileSync como serviço do sistema:https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly

Infelizmente, tenho problemas para implementar essas soluções. Ficaria grato por qualquer ajuda.

EDITAR 2

Ok, acertei! Eu executo o RealTimeSync a partir do script principal agora, embora eu ache que isso não faz nenhuma diferença, o importante é inicializar 'DISPLAY' da seguinte forma:

#!/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

E defina o proprietário deste script como root:chown root:root <script_name>

A solução foi daqui:iniciar o script após retomar como usuário logado (não root)

Pelo que entendi, isso é mais uma solução do que uma solução adequada, pois a codificação DISPLAYpode causar problemas, mas funciona temporariamente. Caso alguém saiba como executar isso corretamente como um usuário não root, ficaria grato por qualquer dica.

informação relacionada