是否可以将(全局)按键绑定到某个命令,并且仍然不会中断按键完成?我的意思是,如果我尝试使用bindkey解决方案在这里发布在其他地方:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command"
q
那么按键“q”永远不会像其他情况那样完成:例如,永远不会在终端上打印字符“q”。
用于xdotool
发送“q”按键,如下所示:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command && xdotool key q"
q
导致循环,因为执行的“q”键xdotool
将通过绑定执行另一个“some_command”。
为了更清楚一点,我希望按“q”键像平常一样执行另外执行一些外部命令。上面的解决方案取代执行某些外部命令的“q”键按下事件。问题是,如果该外部命令也模拟“q”键按下,则绑定会重新启动外部命令,并且我会陷入无限循环。
答案1
好的,所以我将发布我找到的解决方案,但也许其他人有更好的解决方案。给出答案后这里,我可以看到运行时按下的所有键
xinput test <keyboad_id>
在终端中。然后,这只是一个简单的情况,将该命令的输出传输到一个程序中,该程序监视诸如“key release 24”之类的字符串(在我的键盘上释放“q”时的输出),然后该程序将在执行时执行您喜欢的任何操作匹配这个字符串。
例如,我们可以捕捉到按下“q”键并发出如下声音:
xinput test <keyboard_id> | while read in ; do
[[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav
done
显然,我们还可以观察其他输入,并根据需要运行其他内容。