问题标签 [xdotool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
663 浏览

c++ - Travis CI 上的 C++ 桌面 GUI 测试

我非常喜欢 Travis CI 的持续集成测试。我用它测试了我的大部分 C++ 控制台、桌面(Qt、SFML)和 Web(使用 Wt)应用程序。它非常适合测试基于浏览器的应用程序,并且已经很好地记录了这一点

我不能做的一件事是在 Travis CI 上测试桌面应用程序的 GUI。

我需要一些基本的东西,比如“获得一个具有特定标题/名称的窗口”、“在窗口中心单击鼠标左键”和“向窗口发送一个空格”。

我已经可以使用 xdotools、LDTP2 和 Sikuli 在本地执行此操作,但只能在本地执行。然而,在 Travis CI 上,我无法让这些工具成功运行。我一直在尝试写一个关于它的教程这些是我的脚本),我已经联系了 Travis 的人,甚至在这里设置了赏金,但都没有成功。

因为这是一个复杂的过程(在 Travis 上设置 Windows 管理器,编写桌面应用程序进行测试,编写脚本以在 bash 中测试这些)我认为在这里发布那些小错误没有用(大多数人已经在这里有了答案)。

我的问题是:有没有人有一个工作的例子

  • 非 Web C++ GUI 应用程序
  • 它的 GUI 在本地和 Travis 上都经过测试
  • 这些测试包括发送按键和鼠标点击

我不关心确切的工具(xdotools 或其他一些窗口管理器工具、Qt 或其他一些 C++ GUI 库、bash 或任何其他脚本语言)。我只想让 Travis CI 在git push.

0 投票
1 回答
816 浏览

python - 在linux中使用python模拟键盘按下

我尝试使用 xdotool 进行模拟,但引发了一个异常,例如

错误:即使尝试使用 export DISPLAY=':0.0',也无法打开显示:(null)。

我错过了什么?

0 投票
1 回答
396 浏览

bash - xdotool 输出被 xbindkeys 拦截

我的键盘上有一个坏键,点“。” 再具体一点。它的行为非常奇怪,大约 7/10 次键盘在单击一次时键入双点“..”。我使用 xbindkeys 来拦截按下点键并触发我的 bash 脚本启动。我编写的 bash 脚本会检查它正在运行的实例数量,并且只键入“.”。一次。

正如您从脚本中看到的那样,我实际上并没有输入“。” 使用 xdotool 键,但相反,我启用 Numlock 并键入另一个“。” 在我的键盘上,位于与删除相同的按钮上。

正如您可能猜到的那样,这不是一个完美的解决方案,因为这两个键在 100% 的时间里不会以完全相同的方式起作用。

我试着告诉 xdotool 输入“。” 作为 Unicode 字符

我试着告诉 xdotool 输入“。” 作为由 Bash 生成的字符串

我试着告诉 xdotool 输入“。” 作为由 Bash 生成的包含 Unicode 字符“.”的字符串。

这似乎都不起作用,因为它被拦截,好像点键已被 xbindkeys 按下并一次又一次地触发相同的脚本。

有什么我可以做的吗?我可以使用其他工具来模仿按键吗?

0 投票
1 回答
878 浏览

linux - 是否可以使用 xdotool 输入 Web 控制台命令?

是否可以使用 xdotool 输入类似以下命令的 Web 控制台命令:

0 投票
1 回答
244 浏览

python - 我在 shell 脚本中运行一个程序。我怎么知道它是否已加载?(Linux)

我编写了一个运行 python 程序的 shell 脚本。然后我想使用 xdotool 将文件加载到程序中。现在这是我的代码:

我真的不喜欢只等待 10 秒以加载程序的解决方案。有没有更好的办法?

0 投票
1 回答
647 浏览

c++ - 如何在 xdotool 命令中使用变量

我有以下代码。当我执行代码时,我的鼠标指针移动到 0 0 坐标。我需要将光标移动到 x1 y1 位置。x1 y1 的值是整数。

0 投票
1 回答
1146 浏览

c++ - 将浮点数与参数内的字符串连接起来

马上,不,这不是重复的。我一直在寻找几个小时来做​​到这一点,但它可能很简单,因为我几周前开始编码。

如何将字符串与参数内的浮点数连接起来?

我希望能够做到这一点,但它不起作用:

是的,这是 C++,只是我在 Bison 内部使用它,所以$2 和 $3 是变量(它们是浮点数)。就像在 Bison 文件中一样,我有很多事情要做,我希望能在一行中找到一个解决方案,就像我在这里使用的格式一样

编辑

这里的问题实际上在于连接。我这样做了,但它仍然不起作用,并给了我同样的错误:

编辑 2

很抱歉进行了这么多编辑,但我尝试过

但它仍然不起作用:(还有其他想法吗?这次错误说‘to_string’ was not declared in this scope

亲切的问候,
马修·萨内特拉

0 投票
0 回答
268 浏览

linux - ssh终端中的ipython缓慢执行xdotool命令

我遇到了一个我不确定如何调试的行为。

基本设置

在编辑 python 文件时,我有一个 vim 脚本可以与 IPython 交互。基本上它会运行我在光标处选择的任何命令。它工作得很好,大大提高了我的工作效率。但是,有一个问题。当 IPython 终端在 SSH 窗口中时,速度非常慢。这可能是一个非常小众的问题,所以我会尽力解释它,并尽可能提供 MWE,但这里有很多组件在起作用。

我在客户端和服务器系统上运行带有 Gnome 3 前端的 Ubuntu Linux 16.04。IPython 是 5.2.2 版。我的终端是终结者。

初步实验

当 vim 收到一个 is 时执行这个基本脚本:

  • 将当前行复制到系统剪贴板。
  • 预处理文本以修复任何缩进问题。
  • 用于wmctrl查找并记住我的 gvim 窗口的窗口 ID。
  • 用于wmctrl查找最近选择的终端窗口的窗口 ID(这通常是运行 IPython 的窗口)。
  • 用于wmctrl专注于 IPython 窗口
  • 用于xdotool发送 ctrl+shift+v 键序列。这会将文本粘贴到 IPython 提示符中。
  • 用于xdotool发送 KP_Enter,它将在 IPython 提示符下执行代码。
  • 用于wmctrl将焦点重新回到 gvim 窗口,这使得交互看起来很流畅(通常情况下,但在这种情况下不会)。

在脚本的后半部分,它等待 0.01 秒让每个命令执行。

我写了一些调试文本和时间戳,看看我是否能查明是什么花了这么长时间。

您可以看到脚本从时间 1496591696.3065684 开始,然后很快通过第一部分,在 1496591696.315782 结束,到目前为止只有 ~.01 秒并且不明显。然后它执行wmctrlandxdotool命令。这些是使用 python 的子处理模块调用的。总的来说,整个脚本在 1496591696.550773 处结束,总共只有 ~.2 秒,这也不是很明显。

因此,脚本本身很快。但是当我查看 IPython 终端时,至少 1 或 2 秒内没有任何反应。我相信这是因为当 xdotool 执行时它会很快返回,但是发送的密钥序列被卡在某个缓冲区的某个地方并且永远存在。

最小的例子

所以,我确定问题不在我的脚本中。它要么与 ipython、ssh 和/或 xdotool 的某种组合有关。这是重现该问题的 MWE:

  • 打开一个终端窗口。
  • 使用 查找终端窗口的 ID wmctrl -lx
  • SSH 进入远程机器并启动ipython.
  • 打开第二个终端窗口。
  • 将任何虚拟文本复制到剪贴板。
  • 执行这个测试命令(使用正确的窗口 ID):

    wmctrl -ia 0x2400004 && xdotool key ctrl+shift+v && xdotool key KP_Enter

当我这样做时,会发生同样的缓慢。它很快切换到终端窗口,我可以看到测试命令在我的第二个终端中完成,但粘贴的文本在 IPython 中没有出现大约 4 秒(手动计数)。

最小示例的变体

这些变化导致行为消失:

直接粘贴 如果您只是选择 IPython 窗口并按 ctrl+shift+v,则文本会立即粘贴。关于被聚焦的窗口wmctrl或发送的 ctrl+shift+v 命令的某些东西xdotool一定是造成问题的原因。

粘贴到 bash 提示符有效 如果您不启动 IPython,并执行测试命令,复制的文本会很快粘贴到 SSH bash 提示符中。所以 IPython 正在为这个问题做出贡献。

tmux 使行为消失 最后一个变化真的很奇怪,但可能表明潜在的问题。如果不是open terminal -> ssh -> start ipython,我会open terminal -> ssh -> start tmux -> start ipython,然后运行测试脚本也会快速复制文本。我猜 tmux 在替换输入缓冲区方面做了一些事情,但我真的对 I/O 细节知之甚少,无法知道那是什么。


所以,我想我已经能够确定当 IPython 直接通过 SSH 接收 IO 以及何时xdotool发送 IO 时,这是一些奇怪的 I/O 缓冲区问题。但现在我不知道如何继续解决这个问题,或者是否有可能解决。

很好,我找到了 tmux 解决方法,但是强迫自己进入 tmux 进行这些交互式会话可能会限制输出滚动/从终端输出复制回我的客户端机器。它还阻止我做一些需要 X11 转发的事情。我希望能够直接在 ssh 中工作。

因此,如果有人有任何想法,我将非常感谢您对此的帮助。

0 投票
0 回答
66 浏览

bash - 一旦脚本开始循环,终端就会关闭

我尝试了以下脚本来测试终端和while循环,执行后,脚本回显了终端中的所有变量而没有关闭,正如我所料..

但是一旦我执行我的脚本,一旦 while 循环开始,终端就不会保持打开状态。

0 投票
1 回答
538 浏览

linux - Linux xdotool 键卡住

我一直在制作一个让你无法退出终端的脚本,除非你输入“是”。我已经使用此命令暂时禁用 Alt 键。

我现在无法“释放”该键,并且我的 Alt 键不再正常工作。我确实尝试过

这导致不断按下 Alt 键。我确实发现,卸载 xdotool 会使 Alt 键再次起作用。然而我仍然需要 Xdotool。因此,这不是我的选择。

你能帮我“释放” Alt 键,既不让它按下,也不能永久按下?

一些附加信息:
我正在使用 Linux Mint 18。我的脚本正在使用 bash 运行。