Рейтинг:1

Запуск программы из скрипта при выходе из режима ожидания

флаг us

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

#!/бин/ш

случае $ 1 в
        предварительно)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                выход
                ;;
        публиковать)
                echo "$(дата) - $1: запуск сценария возобновления RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                ш /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
эсак

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

#!/бин/ш

echo "$(date) - Запуск RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

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

echo "$(дата) - должен быть запущен RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

выход

поскольку он пропускает строки после обоих эхо заявления в RealTimeSync_kill_suspend.sh сценарий и строки после обоих эхо заявления в RealTimeSync_resume.sh субскрипт в файл журнала suspend_resume.log:

Чешская Республика, 5 сентября 2021 г., 16:55:50 CEST — предварительно: Killing RealTimeSync
Четверг, 5 сентября 2021 г., 16:55:58 CEST — сообщение: Вызов сценария возобновления RealTimeSync
Четверг, 5 сентября 2021 г., 16:55:58 CEST — запуск RealTimeSync
czw, 5 sie 2021, 16:56:28 CEST — должен быть запущен RealTimeSync

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

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

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

объявить -x DISPLAY=":0.0"
объявить -x XAUTHORITY="/home/<ваш пользователь>/.Xauthority"
synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1

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

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

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

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

Любой из упомянутых выше, жесткое кодирование ОТОБРАЖАТЬ и XAUTHORITY, не рекомендуется, так как значение DISPLAY может отличаться от сеанса к сеансу.

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

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

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

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

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

#!/бин/ш

случае $ 1 в
        предварительно)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                выход
                ;;
        публиковать)
                echo "$(date) - Вызов сценария возобновления 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
;;
эсак

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

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

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.