Încerc să rulez programul RealTimeSync la reluarea sistemului din repaus folosind scriptul aflat în /lib/systemd/system-sleep/
în dosar RealTimeSync_kill_suspend.sh
cu urmatorul continut:
#!/bin/sh
caz de 1 USD in
pre)
echo „$(data) - $1: Killing RealTimeSync” >> /home/bart/Applications/FreeFileSync/suspend_resume.log
kill -9 `ps -aux | pgrep RealTimeSync`
Ieșire
;;
post)
echo „$(data) - $1: Se invocă scriptul de reluare RealTimeSync” >> /home/bart/Applications/FreeFileSync/suspend_resume.log
sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
esac
Știu că execută subscript RealTimeSync_resume.sh
cu urmatorul continut:
#!/bin/sh
echo „$(date) - Rulează RealTimeSync” >> /home/bart/Applications/FreeFileSync/suspend_resume.log
/home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real &
echo „$(date) - RealTimeSync ar trebui să ruleze” >> /home/bart/Applications/FreeFileSync/suspend_resume.log
Ieșire
pe măsură ce scade linii după ambele ecou
declarații în RealTimeSync_kill_suspend.sh
scenariul și rândurile după ambele ecou
declarații în RealTimeSync_resume.sh
subscript într-un fișier jurnal suspend_resume.log
:
czw, 5 sie 2021, 16:55:50 CEST - înainte: Killing RealTimeSync
czw, 5 sie 2021, 16:55:58 CEST - post: Invocarea scriptului de reluare RealTimeSync
czw, 5 sie 2021, 16:55:58 CEST - Rulează RealTimeSync
czw, 5 sie 2021, 16:56:28 CEST - RealTimeSync ar trebui să ruleze
Dar când caut procesul cu ps -aux | grep RealTimeSync
nu arată nicio potrivire adecvată, doar:
bart 31262 0,0 0,0 12252 2612 puncte/0 S+ 17:38 0:00 grep --color=auto RealTimeSync
Când rulez subscript cu sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
Primesc procesul corect care rulează cu ps -aux | grep RealTimeSync
:
bart 31066 0,0 0,0 212 68 puncte/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 puncte/0 Sl 17:37 0:00 /home/bart/Applications/FreeFileSync/Bin/RealTimeSync_x86_64 /home/bart/Documents/Documents_backup
bart 31262 0,0 0,0 12252 2612 puncte/0 S+ 17:38 0:00 grep --color=auto RealTimeSync
Toate fișierele menționate au -rwxr-xr-x
permisiuni.
După ce am căutat pe forumuri, mi-am dat seama că RealTimeSync are nevoie de un serviciu care este activat la conectare și care nu este disponibil, de exemplu, persoanele care au avut probleme cu rularea scripturilor care pornesc synclients aveau nevoie de server X pentru a se conecta la:
declara -x DISPLAY=":0.0"
declara -x XAUTHORITY="/home/<utilizatorul tău>/.Xauthority"
synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1
din acest forum-thread: https://ubuntuforums.org/showthread.php?t=2380045
Aș fi recunoscător pentru orice ajutor.
EDITARE 1
Am descoperit că „FreeFileSync și ReadTimeSync au nevoie de acces la afișajul grafic X11, deci nu pot rula prin modul sistem. În modul utilizator, systemd știe despre sesiunea grafică a utilizatorului și o folosește.” Deci există 2 soluții potențiale:
Oricare dintre cele menționate mai sus, hardcoding AFIŞA
și AUTORITATEA X
, descurajat deoarece valoarea DISPLAY poate diferi de la o sesiune la alta.
Sau rulează ca serviciu pentru utilizator, nu ca serviciu de sistem, deoarece afișajul este inițializat pentru utilizator.
Am găsit asta aici, depanarea rulării FreeFileSync ca serviciu de sistem: https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly
Din păcate, am probleme la implementarea acestor soluții, aș fi recunoscător pentru orice ajutor.
EDITARE 2
Ok, am reușit! Rulez RealTimeSync din scriptul principal acum, deși cred că acest lucru nu face nicio diferență, important este să inițializați „DISPLAY” după cum urmează:
#!/bin/sh
caz de 1 USD in
pre)
echo „$(data) - $1: Killing RealTimeSync” >> /home/bart/Applications/FreeFileSync/suspend_resume.log
kill -9 `ps -aux | pgrep RealTimeSync`
Ieșire
;;
post)
echo „$(date) - Se invocă scriptul de reluare RealTimeSync” >> /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
Și setați proprietarul acestui script la root: chown root:root <nume_script>
Solutia a fost de aici: porniți scriptul după reluare ca utilizator conectat (nu root)
După cum am înțeles, aceasta este mai degrabă o modalitate de ocolire decât o soluție adecvată ca hardcoding AFIŞA
poate pune probleme, dar funcționează temporar. În cazul în care cineva știe cum să ruleze corect acest lucru ca utilizator, nu root, aș fi recunoscător pentru orice indicii.