Is there any bash tool/warper that could tell which x window(s) has been created by specific process ?
Get X window id from process in bash
10.8k Views Asked by grinchfox Colinsgrove At
3
There are 3 best solutions below
0

As mentioned, you can use command line tools like wmctrl
or xprop
. Well behaved clients should set _NET_WM_PID
property to be pid of the process which created main window (all popular toolkits do this for you). Note that some clients don't set it or may be on another physical machine (you can use WM_CLIENT_MACHINE
property) - so use this information as a hint and don't rely on it to be present or accurate. See emwh spec at freedesktop for reference.
0

Here are multiple great X11 window management solutions.
Try wmctrl. Here's a script:
#!/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
Example:
user ~ $ getwindidbypid 37248
0x05a00012
gives me the windows and their PIDs. Sample output: