Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从后台捕获按键_Bash_Input_Keypress_Xinput - Fatal编程技术网

Bash 从后台捕获按键

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

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

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

以下是我目前的计划:

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交互式
选项。