2010-06-28 25 views
6

Şu anda hangi uygulamanın Python'dan X11 ekranıma odaklandığını izlemek istiyorum. Amaç, bir zamanlama aracına bağlamaktır, böylece ne kadar zaman verimsiz kaldığımı takip edebilirim.Geçerli olarak odaklanmış uygulamayı nasıl algılayabilirim?

Zaten http://thpinfo.com/2007/09/x11-idle-time-and-focused-window-in.html bu kodu bulundu:

import Xlib.display 
display = Xlib.display.Display() 
focus = display.get_input_focus() 
print "WM Class: %s" % (focus.focus.get_wm_class(),) 
print "WM Name: %s" % (focus.focus.get_wm_name(),) 

Ancak, benim için çalışmak görünmüyor. Görünüşe göre, hangi uygulamanın odaklandığı önemli değil, hem get_wm_class() hem de get_wm_name() öğesi sadece None (Hiçbiri) döndürmez.

Elbette çözüm, Compiz gibi tüm bu yeni pencereli pencere yöneticileri ile çalışması gerekir.

cevap

8

Whoo! _NET_ACTIVE_WINDOW ipucu izlemek için libwnck kullanırsınız, özellikle uzun süren app yerine bir komut dosyası için,

import Xlib.display 
display = Xlib.display.Display() 
window = display.get_input_focus().focus 
wmname = window.get_wm_name() 
wmclass = window.get_wm_class() 
if wmclass is None and wmname is None: 
    window = window.query_tree().parent 
    wmname = window.get_wm_name() 
print "WM Name: %s" % (wmname,) 
+0

Yani, window.query_tree() 'aslında ne yapar? İstediğim sonucu elde etmek için de kullandım, ama arkasındaki anlam/işlev hala benim için bir gizem. Python Xlib dokümanları da pek yardımcı değil. – erb

0

bir miktar daha güzel bir çözüm: kendim çözdüm. (İpucu tanımının EWMH belirtimine bakın.)

İlgili konular