如何在 Linux 上的 X Window System 中找到一个窗口并将其置于最前面?

Posted

技术标签:

【中文标题】如何在 Linux 上的 X Window System 中找到一个窗口并将其置于最前面?【英文标题】:How to find a window in X Window System on Linux and bring it to front? 【发布时间】:2015-07-15 00:49:32 【问题描述】:

我在 Windows 上使用 Java 机器人和 User32 本机库对 Swing GUI 进行了一系列自动化用户测试。使用User32.INSTANCE.EnumWindows 之类的方法,我可以找到一个具有特定标题的窗口,将其放在前面,然后使用击键来执行操作。我正在寻找的窗口是其他 Swing 应用程序(在单独的 JVM 中运行)、PDF 查看器或浏览器。我无法控制这些窗口。

有没有办法在 Linux 上做到这一点?

我的设置(如果有帮助可以更改,无论如何都会使用虚拟机):

Ubuntu 14.04 tightvnc 服务器与 xvnc IceWM 窗口管理器

注意:我在无头服务器上运行这些测试。

所需操作:

查找命名窗口(按标题,以确认已打开某些内容) 将命名窗口置于前面并聚焦于它(以执行击键)

【问题讨论】:

您可以查看XTest 扩展以及wmctrlxdotool 等工具。 【参考方案1】:

按照 Etan 的建议,我已经安装了 wmctrl:

sudo apt-get install wmctrl

然后从 Java 中调用它。查找命名窗口:

wmctrl -l <title>

为了获得焦点:

wmctrl -a <title>

即使使用部分标题也能正常工作,因此我可以轻松替换为 User32 原生库编写的测试。

【讨论】:

以上是关于如何在 Linux 上的 X Window System 中找到一个窗口并将其置于最前面?的主要内容,如果未能解决你的问题,请参考以下文章

Linux上制作Window启动盘

为啥某些 Linux x86_64 系统调用需要存根?

x:ArrayExtension

所有 HTTP 流量都通过 Windows 上的 HTTP.SYS 吗?

如何将 Linux 驱动程序与硬件设备匹配

linux下的程序如何在windows下运行