Ich beschaffe mir mit einem Skript mittels Xlib die Namen und ID's aller aktuell offenen Fenster. Jetzt soll mit Popen ein beliebiges (grafisches) Programm aufgerufen und nur dessen Name und ID zurückgegeben werden. Komischerweise wird das Fenster für das Programm zwar geöffnet, aber es erscheint kein neuer Eintrag in der Liste (müsste als letzter Eintrag erscheinen). Jemand ne Idee, was ich falsch mache? Ich nutze hier XFCE als Fenstermanager, falls das von Belang ist. Hier mal das Skript:
from subprocess import Popen
from Xlib.display import Display
from Xlib.X import AnyPropertyType
Popen(['gnome-terminal'])
display = Display()
screen = display.screen()
root = screen.root
win_list = display.intern_atom('_NET_CLIENT_LIST')
list_content = root.get_full_property(win_list, AnyPropertyType)
win_ids = [win_id for win_id in list_content.value] # gesonderte LC, weil spaeter auf das letzte Element zugegriffen werden soll
for win_id in win_ids:
name = display.create_resource_object('window', win_id).get_wm_name()
print win_id, name
Ich habe herausgefunden, dass es bei mir ab time.sleep(0.31) geht, bei 0.3 noch nicht. Aber optimal finde ich das nicht wirklich. Ich habe es deshalb mit einer Endlos-Schleife probiert: