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)
上面的代码可以工作,但只能在前台运行。
任何帮助将不胜感激!
在做了很多乱七八糟的事情之后,我能够通过使用 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)
希望这对某人有帮助!