从bash中的进程获取X窗口ID

时间:2013-12-14 07:41:55

标签: bash xorg

是否有任何bash工具/ warper可以判断特定进程创建了哪个x窗口?

3 个答案:

答案 0 :(得分:3)

如上所述,您可以使用wmctrlxprop等命令行工具。表现良好的客户端应将_NET_WM_PID属性设置为创建主窗口的进程的pid(所有流行的工具包都会为您执行此操作)。请注意,某些客户端未设置它或可能位于另一台物理计算机上(您可以使用WM_CLIENT_MACHINE属性) - 因此请将此信息用作提示,并且不要依赖它存在或准确。请参阅emwh spec at freedesktop以供参考。

答案 1 :(得分:2)

wmctrl -lp

给我窗口及其PID。样本输出:

0x04c00022  0 2168   ciro ciro.santilli - Skype™
0x03c00014  0 2154   ciro Krusader
0x03200022  0 2181   ciro Guake!
...

答案 2 :(得分:2)

Here是几个X11窗口管理解决方案(包括此问题之一)。

要通过进程ID获取窗口的ID,请按以下方式使用wmctrl:

#!/usr/bin/env bash
# getwindidbypid
# 
# Get the ID of a window by PID (if the process has a window).
# 
# Usage:
#   getwindidbypid <PID>
# 

while IFS= read line; do
  if [[ "${line}" =~ (0x)([0-9a-z]+)([ ][- ][0-9]+[ ])([0-9]*) ]]; then
    winId="${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
    pid="${BASH_REMATCH[4]}"
    if [[ "${pid}" -eq "${1}" ]]; then
      WIND_IDS+=("${winId}")
    fi
  fi
done < <(wmctrl -lp)

if [ "${#WIND_IDS[@]}" -gt 0 ]; then
  echo "${WIND_IDS[0]}"
fi

示例:

user ~ $  getwindidbypid 37248
0x05a00012