通过键盘或鼠标控制 xdotool 脚本

通过键盘或鼠标控制 xdotool 脚本

我在由外部条件控制的循环中使用 xdotool(最简单的情况是:ctrl-c)。我的问题是循环速度太快,在循环运行时很难转到终端来控制循环。在以下非常简单的命令行示例中,目标是用手移动驼鹿,并快速重复单击您用手指向的目标:

while true; do xdotool click 1 sleep 0.02; echo -n .; done

当我的终端不是活动窗口时,是否有一种简单而安全的方法(不是黑客手段)让 xdotool 或我的脚本读取鼠标按钮或键盘的真实状态?目前,我只是组织我的窗口,以便我可以在目标窗口外滑动到终端,然后按 ctrl-c,但我希望能够通过右键单击或类似操作来打开/关闭。

答案1

我找到了一种相当简单的方法来实现键盘中断,即使用 python3(它必须以 root 身份运行才能捕获按键)。因此,我将 xdotool 包装在一个 python3 脚本中,该脚本能够在脚本运行的窗口不活动时读取键盘的“状态”。

我确信下面的代码可以修改为停止/继续,而不是直接退出整个过程。但在这个简单的例子中F3键用于停止循环。

可能适用于 python 2.7(我没有试过,但是下面用pip替换pip3试试),是的在 Ubuntu 16.04 上使用 python3 测试

首先,你需要安装两个软件:xdotoolpip3

sudo apt install xdotool pip3

然后你需要安装keyboardpip 的包

pip3 install keyboard

该脚本如下所示,保存它,使其可执行(chmod +x,这在技术上不是必需的)并使用 sudo 或以 root 用户身份运行它。

#!/usr/bin/python3
import keyboard
import subprocess
import os

def key_press(key):
    if key.name == "f3":
        os._exit(0)

keyboard.on_press(key_press)

while True:
    subprocess.call(['/usr/bin/xdotool', 'click', '1', 'sleep', '0.02'])

我对键盘 API(或 Python)没有完全理解,但据我所知,每次按下一个键时,keyboard.on_press都会调用一个回调(在本例中是函数)。因此,如果您想更改按下键时发生的情况,请更改 if 语句中的代码。如果您想更改要监听的键,请更改为另一个键。如果您想监听任何按键,只需删除 if 行和下一行的缩进即可。key_presskey_pressf3

请注意底线,其中使用数组来包含 xdotool 的所有参数。如果您想添加更多参数,则必须向数组添加更多字符串,所有参数都必须是字符串。

答案2

呃!??我刚刚发现了怎么做:-o:有一件事可以用 xdotool 检查,那就是鼠标的位置,因此可以检查鼠标是否移动并据此修改脚本行为。

相关内容