Openbox据说是符合EWMH标准的这里。我想使用这个遵从层来实现一个没有装饰的窗口,就像建议的关于这个问题最好的答案一样。
因此,我试图使用python和Xlib构建一个简单的窗口,它使用_NET_WM_WINDOW_TYPE_DOCK类型提示来消除窗口装饰。但是,该过程在以下代码中失败:
from Xlib import X, display
d = display.Display()
s = d.screen()
w = s.root.create_window(10, 10, 100, 100, 1, s.root_depth, background_pixel=s.black_pixel, event_mask=X.ExposureMask|X.KeyPressMask)
int_atom = d.intern_atom('int')
wm_window_type = d.intern_atom('_NET_WM_WINDOW_TYPE')
wm_window_type_dock = d.intern_atom('_NET_WM_WINDOW_TYPE_DOCK')
w.change_property(wm_window_type, int_atom, 32, [wm_window_type_dock, ], X.PropModeReplace)
w.map()
d.next_event()
d.next_event()
print(w.get_full_property(wm_window_type, X.AnyPropertyType).value[0])
print(wm_window_type_dock)窗户出现了,但仍然有装饰。最后两个print语句都返回434,因此我想窗口确实有一个有效的EWMH window_type。所以问题有两个:
发布于 2019-11-16 12:07:37
我花了大约12个小时才找到答案:
我在change_property中使用了错误的原子。这一呼吁应改为:
w.change_property(wm_window_type, Xatom.ATOM, 32, [wm_window_type_dock, ], X.PropModeReplace)因此,使用相关的import语句,整个代码变成:
from Xlib import X, Xatom, display
d = display.Display()
s = d.screen()
w = s.root.create_window(10, 10, 100, 100, 1, s.root_depth, background_pixel=s.black_pixel, event_mask=X.ExposureMask|X.KeyPressMask)
wm_window_type = d.intern_atom('_NET_WM_WINDOW_TYPE')
wm_window_type_dock = d.intern_atom('_NET_WM_WINDOW_TYPE_DOCK')
w.change_property(wm_window_type, Xatom.ATOM, 32, [wm_window_type_dock, ], X.PropModeReplace)
w.map()
d.next_event()
d.next_event()
print(w.get_full_property(wm_window_type, Xatom.ATOM).value[0])
print(wm_window_type_dock)它如预期的那样工作(请注意,如果屏幕的背景是黑色的,则应该更改background_pixel值以查看任何内容)。
https://stackoverflow.com/questions/58885803
复制相似问题