为什么“xwininfo”和“xdotool”为同一个窗口提供不同的窗口 ID?

为什么“xwininfo”和“xdotool”为同一个窗口提供不同的窗口 ID?

在 Lubuntu 18.04 上的终端仿真器 (lxterminal) 的选项卡中,我尝试通过单击选项卡内的同一位置(显示 shell 的位置)来找出其窗口 ID,方法是xwininfo

$ xwininfo -int | grep -Po '(?<=Window id: )[0-9a-zA-Z]+'
31457283

xdotool

$ xdotool selectwindow 
35652689

为什么要给xwininfoxdotool不同的窗口 ID?

因此,不同的窗口 ID 会导致不同的进程 ID:

$ xdotool getwindowpid 31457283
1480    
$ ps aux | grep -i 1480
t         1480  0.1  0.3 473204 31240 ?        Sl   Nov21  23:18 lxterminal

$ xdotool selectwindow getwindowpid
window 35652689 has no pid associated with it.

窗口 ID 不同的问题不仅仅发生在 lxterminal 的标签页中,还发生在 Firefox 的标签页中,或者 evince 的窗口中。我还没有发现通过点击窗口内部的方式两种方式给出相同窗口 ID 的应用程序。

答案1

这是两件不同的事情。

  • 窗口 ID:由xdotool selectwindow和返回xwininfo -int
  • 进程 ID:由xdotool selectwindow getwindowpid和返回xprop | grep _NET_WM_PID(如果您有XOrg 的附加窗口属性

进程 ID 是内核的进程标识符,用于终止进程、安排任务等。

窗口 ID 是窗口服务器的窗口标识符。一个进程可以生成任何窗口数量,而且它们经常会生成不止一个。想想 GIMP 在整个屏幕上有多少个自由浮动的对话框。

在这种情况下,进程 ID 只是混淆了问题,但如果你的目标是同一窗口比任何单个目标你应该得到相同的结果

  • xdotool selectwindow
  • xwininfo -int

在同一行上运行它们,双击并查看它们都显示的内容:

xwininfo -int | grep -Po '(?<=Window id: )[0-9a-zA-Z]+'; xdotool selectwindow;

我安装lxterminal并确认您看到的内容是独一无二的。我无法重现。

相关内容