从后台捕获按键

Capturing Keypresses from the Background

我正在尝试编写一个 bash 脚本来监视键盘上的特定按键,并在检测到它们时运行命令。我目前可以使用输入命令执行此操作,但前提是终端 运行 它位于前台。我需要在 window 未聚焦时让它工作。

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

这是我当前的程序:

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

以上代码有效,但仅限于前台。

如有任何帮助,我们将不胜感激!

经过一番折腾之后,我终于可以通过使用 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

希望这对某人有所帮助!