How to get an X11 Window from a Process ID?

Check if /proc/PID/environ contains a variable called WINDOWID


Try installing xdotool, then:

#!/bin/bash
# --any and --name present only as a work-around, see: https://github.com/jordansissel/xdotool/issues/14
ids=$(xdotool search --any --pid "$1" --name "dummy")

I do get a lot of ids. I use this to set a terminal window as urgent when it is done with a long command, with the program seturgent. I just loop through all the ids I get from xdotool and run seturgent on them.


Bit late to the party. However: Back in 2004, Harald Welte posted a code snippet that wraps the XCreateWindow() call via LD_PRELOAD and stores the process id in _NET_WM_PID. This makes sure that each window created has a PID entry.

http://www.mail-archive.com/[email protected]/msg05806.html


The only way I know to do this is to traverse the tree of windows until you find what you're looking for. Traversing isn't hard (just see what xwininfo -root -tree does by looking at xwininfo.c if you need an example).

But how do you identify the window you are looking for? Some applications set a window property called _NET_WM_PID.

I believe that OpenOffice is one of the applications that sets that property (as do most Gnome apps), so you're in luck.

Tags:

X11