Показаны сообщения с ярлыком autokey. Показать все сообщения
Показаны сообщения с ярлыком autokey. Показать все сообщения

понедельник, 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

пятница, 18 декабря 2015 г.

Autokey – назначение горячих клавиш для различных операций


Как указано из описания, AutoKey – инструмент для автоматизации работы в Linux и X11. Он позволяет выполнять заранее определённые действия по комбинациям клавиш или набранным сокращениям. Он имеет графический интерфейс пользователя, который хорошо подходит для новичков, а также интерфейс для сценариев на Python.

Autokey можно установить из комплекта стандартных репозиториев. Например, запустив в Linux Mint "Менеджер программ", достаточно вписать в строку поиска autokey и данный пакет сразу же будет найден.


В Ubuntu и Linux Mint необходимо выбирать autokey-gtk. После установки Autokey присутствует в меню "Стандартные – Autokey". После запуска у Вас будут отображены главное окно Autokey на рабочем столе и пиктограмма в системном трее.



  Назначение горячих клавиш для перехода в определённое место (к папке или файлу) файловой системы

Выделите мышкой "Sample Scripts", нажмите кнопку "Создать" и выберите "Script". Введите имя скрипта, которое бы в последующем Вам поясняло, к чему созданный Вами скрипт относится. Далее у Вас появится окно скрипта, в котором будет строчка: # Enter script code



Удалите # Enter script code и введите свой текст скрипта:

import subprocess
subprocess.call(['xdg-open', 'Ваш путь к папке (файлу)'])

Например, для создания вызова папки Документы:

import subprocess
subprocess.call(['xdg-open', '/home/Ваша_домашняя_папка/Документы'])

Далее вам необходимо назначить комбинацию клавиш. Нажмите среднюю кнопку "Set" и далее "Press to Set".



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


Затем жмите кнопку OK. Записанная комбинация клавиш у Вас будет отображена:


На рисунке отображено назначение клавиш "Alt" и 3 

Если вас всё устроило, то жмите кнопку "Save" на верхней панели главного окна.


Если нет – продожайте редактировать, нажимая на среднюю кнопку "Set". Закройте главное окно и проверьте как у Вас срабатывает комбинация клавиш. Получилось? Здорово?

  Назначение горячих клавиш для запуска программ

Назначение запуска программ происходит аналогично вышеописанному, только вводимый код будет другим.

Вызов приложения:

import subprocess
subprocess.Popen(["путь к приложению"])

Все пользовательские прикладные приложения расположены в папке usr/bin корневого раздела. Поэтому, указываемый в тексте скрипта путь к приложению будет иметь вид:  /usr/bin/имя_программы.

Пример вызова текстового редактора Gedit:

import subprocess
subprocess.Popen(["/usr/bin/gedit"])

Пример вызова клиента FTP Filezilla:

import subprocess
subprocess.Popen(["/usr/bin/filezilla"])

Однако в некоторых случаях Ваши программы (особенно это относится с ПО, установленному из сторонних репозиториев) будут расположены в папке /opt


  Назначение горячих клавиш для вставки готового текста

Вы можете набрать готовые слова или фразы и затем их вставлять с помощью Autokey. Обратитесь к папке "My Phrases". В стандартную комплектацию уже включенs три готовых фразы. Фразы содержатся в файлах txt, которые расположены в домашней папке. Откройте в менеджере файлов (Nautilus, Nemo для Cinnamon, Caja для MATE) свою домашнюю папку, включите отображение скрытых папок и файлов (клавиши ctrl и h) и перейдите по пути:
.config – autokey – data – My Phrases



Идущие в комплекте примеры можно редактировать прямо в окне autokey, например:


Обратите внимание, что в первом примере у Вас будет заполнено поле Window Filter:


Это говорит о том, что данный скрипт сработает только в программе gedit. Поэтому если Вы желаете, чтобы готовые слова и фразы вставлялись у Вас во все приложения: и gedit, и браузер, и Libre Office ... , то это поле не должно быть заполнено:


И последнее. Чтобы убедиться, что autokey у Вас будет запускать при старте Вашего сеанса работы в системе (в противном случае Ваши пользовательские горячие клавиши работать не будут до тех пор, пока autokey не будет запущен), активизируйте главное окно Autokey и в глобальном меню нажмите "Edit – Preferences". У вас должна стоять галочка в поле "Automatically start AutoKey at login":


  P.S. Впервые попытка использования Autokey была предпринята ещё во время работы с Ubuntu 12.04  Данное ПО вызвало бюро восторгов и положительных эмоций, так как не только позволило отказаться от ряда манипуляций с мышью, но и позволило снизить нагрузку на кисть и указательный палец. К тому же в некоторых вопросах пользоваться клавиатурой оказалось предпочтительнее, чем мышкой. А источником вдохновения, вероятно, явилась природная любознательность. Как пелось в песенке из кинофильма "Эта весёлая планета", мне всегда чего-то не хватает ...