Blu*_*uee 19 python linux shell user-interface automation
正如标题所解释的,我正在尝试使用终端将命令作为击键发送到最小化的GUI应用程序。
在Stack上有很多类似的问题,都给出了很好的答案,但我主要看到的解决方案存在三个问题:大多数解决方案都需要自动化的应用程序才能成为活跃的解决方案。或者,在脚本/进程运行时,我通常无法使用键盘。或更糟糕的是,该解决方案仅适用于Windows OS。
我需要这个人在2个月前问的问题:将击键发送到特定的窗口(在后台),但与此同时还要执行其他操作, 但是我希望在Linux上执行此操作。我正在使用Kubuntu 18.10,如果有帮助的话。
xdotool已经关闭,但是我无法完全将命令发送到特定窗口或PID。它还使用“我的键盘”,因此,例如,当xdotool运行时,我无法在线编写论文/代码/浏览。Pexpect也有最后一个问题。
AutoHotKey看起来可以使用,但是仅适用于Windows,并且我尝试不使用Wine。与pywin32相同。
键盘(https://github.com/boppreh/keyboard)看起来不错,但是它无法将命令发送到特定的应用程序。与PyAutoGUI相同。
我选择Python标记是因为我看到的大多数解决方案都使用Python,但是我可以使用任何语言。
使用嵌套的 X 服务器来输入击键,而无需更改焦点或键盘抓取。概念证明:
Xephyr -resizeable :13
export DISPLAY=:13
xterm
xdotool type rhabarber
Run Code Online (Sandbox Code Playgroud)
嵌套Xephyr
的 X 服务器启动并将侦听本地 X 套接字 13(而 :0 通常标识当前正在运行的 X 服务器,但当多个会话同时运行时,它可能会更高)。然后我们将 DISPLAY 环境变量设置为 :13,这样我们启动的任何 X 应用程序都会连接到 Xephyr;xterm
是我们的目标应用程序。使用xdotool
或任何其他工具我们可以发送击键。
由于目标 X 服务器是通过 识别的$DISPLAY
,因此也可以从其他地方启动应用程序或触发输入事件。如果需要,您还可以在 Xephyr 中运行轻量级窗口管理器,例如“最大化”应用程序,使其填充整个 Xephyr 窗口。