从后台捕获按键

Ale*_*tte 5 bash input keypress xinput

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

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

这是我当前的程序:

while true; do
    read -rsn1 input
    if [ "$input" = "a" ];
    then
        #Do Something
    fi
done
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但只能在前台运行。

任何帮助将不胜感激!

Ale*_*tte 6

在做了很多乱七八糟的事情之后,我能够通过使用 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
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助!