从后台捕获按键

时间:2019-06-14 16:22:33

标签: bash input keypress xinput

我正在尝试编写一个bash脚本,该脚本监视键盘上的特定按键,并在检测到它们时运行命令。我目前能够使用输入命令来执行此操作,但前提是运行它的终端在前台。当窗口不清晰时,我需要使其工作。

我已经看过使用xinput test-xi2 --root来获取每个事件,这似乎效果很好,但是我不确定如何有效地将该输入转换为对我有用的键定义。

这是我当前的程序:

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

上面的代码有效,但只能在前台使用。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

经过很多混乱之后,我可以通过使用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

希望这对某人有帮助!