Bash 从后台捕获按键
我试图编写一个bash脚本,监视键盘上的特定按键,并在检测到它们时运行命令。我目前可以使用input命令执行此操作,但前提是运行它的终端位于前台。我需要让它在窗口不对焦时工作 我已经研究过使用xinput test-xi2——root来获取每个事件,这似乎工作得很好,但我不确定如何有效地将输入转换为对我有用的键定义 以下是我目前的计划:Bash 从后台捕获按键,bash,input,keypress,xinput,Bash,Input,Keypress,Xinput,我试图编写一个bash脚本,监视键盘上的特定按键,并在检测到它们时运行命令。我目前可以使用input命令执行此操作,但前提是运行它的终端位于前台。我需要让它在窗口不对焦时工作 我已经研究过使用xinput test-xi2——root来获取每个事件,这似乎工作得很好,但我不确定如何有效地将输入转换为对我有用的键定义 以下是我目前的计划: while true; do read -rsn1 input if [ "$input" = "a" ]; then
while true; do
read -rsn1 input
if [ "$input" = "a" ];
then
#Do Something
fi
done
上面的代码可以工作,但只在前台
任何帮助都将不胜感激 在做了大量的胡闹之后,我能够通过使用xinput来监视我的键盘来让它工作。每当键盘上发生事件时,它都会抛出一条按键信息,然后抛出一条按键释放信息。我通过管道将这些信息传输到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
希望这对别人有帮助 您的意思是说,无论前台是什么应用程序,您都希望能够捕获字母“a”?甚至是GUI应用程序?我认为在后台运行bash脚本是无法做到这一点的。做一些关于键盘记录者的研究。它可以用,但只能用于单个shell进程。所有上述内容都可以替换为:
xinput test-xi2--root 3 | gawk'/rawkeyrease/{getline;getline;print$2;fflush()}'| while read-r key;做回显“$key”;完成
,在每个匹配行上保存产卵sed
,并在时消除。如果您的AWK是mawk
,则需要-W交互式
选项。