根据https://unix.stackexchange.com/a/254854/674和https://unix.stackexchange.com/questions/458895/how-can-i-bring-a-background-gui-job-to -the-front-of-my-desktop,有一个来自 xdotool 手册页的示例
# Activate google-chrome when you move the mouse to the bottom-left corner:
xdotool behave_screen_edge bottom-left search --class google-chrome windowactivate
手册页说
--class 与窗口类匹配。
--classname 与窗口类名匹配。
什么是“类”和“类名”?
它们有哪些可能的值?
如何找出窗口的类和类名?
谢谢。
在 X11 下,窗口具有 XWindowdAttributes 结构和XClassHint 结构 属性,应用程序可以从中获取有关窗口的信息。特别是最后一个负责
WM_CLASS
属性,两个逗号分隔的字符串,通过xprop
命令可以很容易地看到。例如,Chrome 有这两个记录为:
因此,例如 Chrome 的 Hangouts 扩展程序,具有相同的类名,但不同的实例名:
这允许诸如
xdotool
搜索特定应用程序类型或特定窗口实例的所有窗口之类的工具。例如,这对于诸如将窗口分组在应用程序的同一图标下的停靠点之类的东西也可能是有用的属性。特别是 for
xdotool
,classname
对应第一个字符串,class
对应第二个字符串。在我的 Chrome 和环聊应用示例中:从查看源代码中也可以看出这一点。例如,让我们关注类名。在cmd_search.c我们建立了一个搜索结构,它有一个搜索掩码属性(第 171 到 173 行)。
这被传递给在xdo_search.c
xdo_search_windows
中定义的函数,该 函数又调用_xdo_match_window_classname,最终使用标准Xlib函数XGetWindowAttributes和XGetClassHint检索本答案开头提到的两个结构。check_window_match
旁注:Gtk 应用程序显然总是创建一个带有子窗口的小父窗口,这意味着您在搜索特定窗口时可能会得到令人困惑的结果。