Anyone got an idea how to get from an Xserver the list of all open windows?
From the CLI you can use
xwininfo -tree -root
If you need to do this within your own code then you need to use the XQueryTree
function from the Xlib
library.
If your window manager implements EWMH specification, you can also take a look at the _NET_CLIENT_LIST
value of the root window. This is set by most modern window managers:
xprop -root|grep ^_NET_CLIENT_LIST
That value can easily be obtained programmatically, see your Xlib documentation!
xprop -root _NET_CLIENT_LIST
–
Pero Building off of Marten's answer, (assuming your window manager supports Extended Window Manager Hints) you can feed that list of window ids back into xprop
to get the _NET_WM_NAME
property:
$ xprop -root _NET_CLIENT_LIST |
pcregrep -o1 '# (.*)' |
sed 's/, /\n/g' |
xargs -I{} -n1 xprop -id {} _NET_WM_NAME
But at the command line, it would just be easier to use wmctrl
:
$ wmctrl -l
Programmatically, with python-xlib
, you can do the same with:
#!/usr/bin/env python
from Xlib.display import Display
from Xlib.X import AnyPropertyType
display = Display()
root = display.screen().root
_NET_CLIENT_LIST = display.get_atom('_NET_CLIENT_LIST')
_NET_WM_NAME = display.get_atom('_NET_WM_NAME')
client_list = root.get_full_property(
_NET_CLIENT_LIST,
property_type=AnyPropertyType,
).value
for window_id in client_list:
window = display.create_resource_object('window', window_id)
window_name = window.get_full_property(
_NET_WM_NAME,
property_type=AnyPropertyType,
).value
print(window_name)
Or, better yet, using the EWMH
library:
#!/usr/bin/env python
from ewmh import EWMH
window_manager_manager = EWMH()
client_list = window_manager_manager.getClientList()
for window in client_list:
print(window_manager_manager.getWmName(window))
window_manager_manager
object name to wm
. Also I received an error on xlib example line property_type=AnyPropertyType
that readsi: TypeError: get_full_property() got an unexpected keyword argument 'property_type' –
Novocaine python-xlib
? In any case, if you just remove the property_type=
part, it should work as a positional argument. –
Curly © 2022 - 2024 — McMap. All rights reserved.