如何使用Python与Xlib模块在窗口管理器的工作区之间切换?
这是我最有希望的尝试:
#!/usr/bin/python
from Xlib import X, display, error, Xatom, Xutil
import Xlib.protocol.event
screen = Xlib.display.Display().screen()
root = screen.root
def sendEvent(win, ctype, data, mask=None):
""" Send a ClientMessage event to the root """
data = (data+[0]*(5-len(data)))[:5]
ev = Xlib.protocol.event.ClientMessage(window=win, client_type=ctype, data=(32,(data)))
if not mask:
mask = (X.SubstructureRedirectMask|X.SubstructureNotifyMask)
root.send_event(ev, event_mask=mask)
# switch to desktop 2
sendEvent(root, Xlib.display.Display().intern_atom("_NET_CURRENT_DESKTOP"), [2])
以上代码在PyPanel源的各个地方被无耻地窃取;不幸的是,它没有做任何事情,甚至没有产生警告/异常.我在这里错过了什么吗?
我正在使用Python和PyGTK. Xlib似乎是切换桌面的正确选择.我不打算使用wnck(错误的Python模块)或类似的东西,但无论如何我都会感激任何指针.
我可能会补充一点,这是我第一次尝试使用Xlib(或PyGTK)编写Python应用程序.
解决方法:
显然,您需要处理同一个Display对象,然后在最后刷新它.就像是:
display = Xlib.display.Display()
screen = display.screen()
root = screen.root
# ...
sendEvent(root, display.intern_atom("_NET_CURRENT_DESKTOP"), [1, X.CurrentTime])
display.flush()
信用:来自a very similar thread的想法(几乎可行).
附:顺便说一句,桌面编号从0开始.