Python/X11:如何判断用户是否切换虚拟桌面
我想找个办法来判断用户是否在X11下切换了虚拟桌面。
我正在用Python和X11库以及PyGTK来做这个。我找到了几个用C语言写的有效例子,但我不太懂怎么把它们翻译成Python。我也看过几个X11的分页应用程序(比如fbpanel和pypanel)的源代码,但就是找不到我想要的东西。
我需要注册一个信号吗?是用X11还是GTK?
我需要一直等待吗?
我对X11和GTK都完全是新手,所以任何提示或帮助都非常感谢。
问候,
Philip
PS:我目前的努力可以在这里找到。
4 个回答
0
通常,当桌面发生变化时,系统会通过根窗口的属性变化来通知客户端,所以你应该关注PROPERTY_CHANGE_MASK,而不是SUBSTRUCTURE_MASK;这样可以减少很多无关的信息。
至于具体是哪些属性变化,我觉得这可能在不同的窗口管理器或桌面环境中会有所不同。我现在用的是ubuntu/unity,当我在切换桌面前后用“xprop -root”命令查看根窗口的属性,并对比结果时,我发现变化的属性是_NET_DESKTOP_VIEWPORT。
另外,我还注意到的一个主要的无关信息是,每当活动窗口发生变化时,根窗口的_NET_ACTIVE_WINDOW属性也会随之变化。
0
你可以看看libwnck,或者它的Python接口。
1
这里有一个基于GTK的解决方案:
screen = gtk.gdk.screen_get_default()
root = screen.get_root_window()
root.set_events(gtk.gdk.SUBSTRUCTURE_MASK)
root.add_filter(event_filter)
def event_filter(event, user_data):
# process event
return gtk.gdk.FILTER_CONTINUE
显然,SUBSTRUCTURE_MASK包含了一些通常与工作区切换相关的事件。不过,这个解决方案感觉有点奇怪。有没有什么好的想法?
问候,
Philip