Запуск программы из сценария при возобновлении работы из приостановки

Я пытаюсь запустить программу RealTimeSync после выхода системы из спящего режима, используя сценарий, расположенный в / lib / systemd / system-sleep / в файле RealTimeSync_kill_suspend.sh со следующим содержанием:

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

Я знаю, что он выполняет суб-скрипт RealTimeSync_resume.sh с следующее содержимое:

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

, поскольку он удаляет строки после обоих операторов echo в сценарии RealTimeSync_kill_suspend.sh и строки после обоих операторов echo в RealTimeSync_resume. sh в файл журнала 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

Но когда я ищу процесс с помощью ps -aux | grep RealTimeSync он не показывает правильного совпадения, просто:

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

Когда я запускаю суб-скрипт с sh / home / bart / Applications / FreeFileSync / RealTimeSync_resume.sh Я правильно выполняю процесс с помощью 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

Все упомянутые файлы имеют разрешения -rwxr-xr-x .

После поиска на форумах я понял, что RealTimeSync нуждается в какой-то службе, которая активируется при входе в систему, которая недоступна, например, людям, у которых были проблемы с запуском скриптов, запускающих synclients, требовался X-сервер для подключения к:

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

из этого ветка форума: https://ubuntuforums.org/showthread.php?t=2380045

Буду благодарен за любую помощь.

РЕДАКТИРОВАТЬ 1

Я обнаружил, что «FreeFileSync и ReadTimeSync требует доступа к графическому дисплею X11, поэтому они не могут работать в системном режиме. В пользовательском режиме systemd знает о пользовательском графическом сеансе и использует его. . " Итак, есть два возможных решения:

Любое из упомянутых выше, жесткое кодирование DISPLAY и XAUTHORITY , не рекомендуется, поскольку значение DISPLAY может отличаться от сеанса к сеансу.

Или работает как пользовательская служба, а не как системная служба, поскольку отображение инициализируется для пользователя.

Это я нашел здесь, устранение неполадок при запуске FreeFileSync в качестве системной службы: https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display- set-right

К сожалению, у меня проблемы с реализацией этих решений, буду благодарен за любую помощь.

РЕДАКТИРОВАТЬ 2

Хорошо, я справился! Сейчас я запускаю RealTimeSync из основного скрипта, хотя я думаю, что это не имеет никакого значения, важно инициализировать 'DISPLAY' следующим образом:

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

И установить владельцем этого скрипта root: chown root: root

Решение было отсюда: запускать скрипт после возобновления как зарегистрированный пользователь (не root)

Насколько я понимаю, это скорее обходной путь, чем правильное решение, поскольку жесткое кодирование DISPLAY могло бы вызвать проблемы, но временно работает. Если кто-то знает, как правильно запустить это как пользователь, а не root, я был бы благодарен за любые подсказки.

1
задан 6 August 2021 в 14:54

1 ответ

Замените сообщение резюме и попробуйте еще раз.

0
ответ дан 20 August 2021 в 10:29

Другие вопросы по тегам:

Похожие вопросы: