给定XX的进程iD,我想有一个任何窗口ID的列表,其中_NET_WM_PID = XX。如果可能的话,最好的办法是最旧的仍处于活动状态的窗口ID。
我对linux还是很陌生,但是我想做的是创建一个使用命令行的脚本,并查看是否有一个窗口已经打开,该窗口属于使用同一命令行调用的进程。如果是这样,只需将焦点设置在该窗口上,否则执行命令行以进行新的处理。我的意图是在我的ubuntu桌面上使用此脚本,在这里我会将这个脚本挂接到我的笔触鼠标手势命令中,这样,例如,每次我为gmail手势时,我都不会获得全新的gmail会话,转到我现有的gmail chrome应用程序窗口。也许有一个更简单的方法可以解决所有这些问题,但是我还没有找到解决方法。
在帮助下,我已经弄清楚了如何使用pgrep为命令行找到PID,以及如何使用wmctrl将焦点设置到窗口句柄,但是我一直坚持从PID到窗口ID。
xwininfo和xprop允许检索您想要的内容,但这有点棘手。
xwininfo允许检索所有已知的窗口,并且xprop可以查询_NET_WM_PID参数的有关单个窗口ID的X。
到目前为止,一种骇人听闻的方法是:
#!/bin/sh findpid=$1 known_windows=$(xwininfo -root -children|sed -e 's/^ *//'|grep -E "^0x"|awk '{ print $1 }') for id in ${known_windows} do xp=$(xprop -id $id _NET_WM_PID) if test $? -eq 0; then pid=$(xprop -id $id _NET_WM_PID|cut -d'=' -f2|tr -d ' ') if test "x${pid}" = x${findpid} then echo "Windows Id: $id" fi fi done
结果:
mycroft:~ $ ./find_windows.sh 1919 Windows Id: 0x1800748 Windows Id: 0x181b221 Windows Id: 0x1803ad5 Windows Id: 0x181f681 Windows Id: 0x181f658 Windows Id: 0x180006d Windows Id: 0x1800003 Windows Id: 0x1800001 Windows Id: 0x180001e
如您将看到的,即使您仅在屏幕上看到一个窗口,单个进程也可能具有一定数量的已知窗口。
也许您应该获得这些工具资源,以便做出自己想要的东西。