понедельник, 22 июля 2019 г.

"Мягко" запустить autokey через процесс sh


Давно пользуюсь данным инструментом, который позволяет гибко настроить запуск необходимых операций через комбинации клавиш (подробности). Установку можно осуществить через команду терминала:

sudo apt install -y autokey-gtk

Однако с некоторых пор иногда случайным образом возникает ситуация с выводом сообщения на экран, что autokey-gtk уже запущен (в настройках программы установлена галочка в поле "Automatically start Autokey at login"), pid этого процесса имеется, но программа не отвечает. Соответственно), отображающий работу программы значок в системном лотке (на панели, в трее) не появляется, а назначенные комбинации клавиш не работают.

Возникла идея осуществить "мягкий" запуск autikey-gtk, то есть запуск программы с задержкой. Попытка использовать скрипт sh, запускающий autokey-gtk, а потом выполняющий команду exit, привела лишь к частичному успеху. Все команды и паузы выполняются, но команда exit не проходит:

#!/bin/bash
sleep 65
autokey-gtk
sleep 10
exit

Примечание. Задержка перед запуском в 65 секунд выбрана из соображений запуска программы после отработки системной операции ротации логов работы, которая выполняется через 60 секунд после старта системы. Это можно наблюдать в диспетчере задач, если запускать его после прорисовки всех элементов рабочего стола. Смотреть sh -c /proc/self/fd/9

В диспетчере задач видно, что autokey.sh остался активным:


Первоначальным решением проблемы явилось создание скрипта autokey-stop.sh, "убивающего" процесс autokey.sh, и также стартующего с задержкой. То есть в "Настройки – Сеансы и запуск –  Автозапуск" (xfce) имеется 2 задачи:


Auto Keys имеет команду запуска скрипта autokey.sh –

     /home/user/scripts/autokey.sh

Auto Keys stop proc имеет команду удаления скрипта autokey.sh –

     sh -c "sleep 75 && /home/user/scripts/autokey-stop.sh

Имеется в виду, что user – это пользователь системы с логином user.

Листинг autokey.sh :

#!/bin/bash
sleep 65
autokey-gtk

Листинг autokey-stop.sh :

#!/bin/bash
OUTPUT="$(pgrep autokey.sh)"
kill -15 ${OUTPUT}
exit

Примечание. Команда pidof autokey.sh  не возвращает pid процесса autokey.sh, так как в понимании системы autokey.sh не является программой.

Затем, как оказалось, имеется способ завершения процесса autokey.sh без привлечения второго скрипта. Для этого после команды autokey-gtk необходимо добавить символ &.

Далее при просмотре каталога с настройками ~/.config/autokey, был найден файл протокола работы autokey.log Содержащиеся в нём записи касались всех сеансов работы autokey-gtk, начиная с момента установки в 2017 году (при каждом запуске autokey в файл добавлялись новые записи). Так как для анализа работы программы достаточно протокола за текущий день, а старые записи для меня являются малоинформативными, то в целях избежания его разрастания было принято решение об удалении autokey.log перед запуском autokey-gtk. При запуске программы файл autokey.log будет создан автоматически.

В результате скрипт autokey.sh принял вид:

#!/bin/bash
sleep 65
rm /home/user/.config/autokey/autokey.log
autokey-gtk &
sleep 10 && exit

Примечание. 10 секундная пауза была введена для "перестраховки" из соображений того, чтобы гарантировано запустился autokey-gtk. В принципе, можно обойтись и без паузы. Про каталог user выше было указано, что это домашний каталог пользователя системы с логином user.

После отработки всех команд в диспетчере задач остаётся только процесс autokey-gtk

Комментариев нет:

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