Захват клавиш из фона - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь написать сценарий bash, который следит за клавиатурой для определенных нажатий клавиш и запускает команды, когда обнаруживает их.В настоящее время я могу сделать это с помощью команды ввода, но только если терминал, на котором он работает, находится на переднем плане.Мне нужно, чтобы оно работало, когда окно не в фокусе.

Я смотрел на использование xinput test-xi2 --root для получения каждого события, которое, кажется, работает довольно хорошо, но я не уверен, какэффективно преобразовать этот ввод в определение ключа, которое мне полезно.

Вот моя текущая программа:

while true; do
    read -rsn1 input
    if [ "$input" = "a" ];
    then
        #Do Something
    fi
done

Приведенный выше код работает, но только на переднем плане.

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 15 июня 2019

Поработав, я смог заставить его работать с помощью xinput, наблюдая за моей клавиатурой.Каждый раз, когда на клавиатуре происходит событие, оно генерирует сообщение keyPressed, а затем сообщение keyReleased.Я отправил их в grep, чтобы получить сообщение, если это был выпущенный ключ, а затем передал это в цикл.Внутри цикла я сужаю строки до строки с ключевой информацией, а затем удаляю лишнюю информацию с помощью sed.Это оставляет меня с кодом ключа, который может быть преобразован в символ, хотя я просто использую число.Вот мой код:

xinput test-xi2 --root 3 | grep -A2 --line-buffered RawKeyRelease | while read -r line;
do
    if [[ $line == *"detail"* ]];
    then
        key=$( echo $line | sed "s/[^0-9]*//g")

    #Do something with the key

done

Надеюсь, это кому-нибудь поможет!

...