检索刚刚启动的 GUI 程序的 X11 窗口 ID

iag*_*ito 5 scripting process x11 window wmctrl

我想检索在后台启动的 GUI 程序的 X id,以便处理它们的 Windows 属性。到目前为止我一直在使用这个解决方法:

myprogram &
sleep 1
winID=$(wmctrl -l | awk '/./{line=$0} END{print $1;}')
Run Code Online (Sandbox Code Playgroud)

但这依赖于三个重要假设:

  • 该程序将花费不到 1 秒的时间来打开窗口(更不用说少于 1 秒可能太长了)
  • wmctrl该窗口将附加在列表的末尾
  • 同时不会打开其他窗口

myprogram打开窗口后是否会发送任何信号?我怎样才能拦截它?

Ant*_*hon 1

为了在我的程序中获取窗口 ID,我让程序将标题设置为唯一的内容,然后让程序启动wmctrl并解析其输出(而不是启动程序的 shell 脚本),然后报告窗口 ID(大多数通常通过文件)。

由于程序在窗口打开后才会继续,因此您永远不必等待太久。

这当然要求您可以更改myprogram(即从源代码编译)。

  • Gnome 可以做到这一点,因为它是窗口管理器。WM 在 X 中具有特殊地位,它会收到所有与窗口相关的事件的通知。我认为其他程序没有办法获得类似的通知。 (3认同)