如何使X11窗口跨越多个监视器

我正在尝试使用XResizeWindow()创建一个跨越2个监视器的窗口,但是窗口管理器? 将其限制为一个。

是否有一个提示或属性我可以与窗口关联告诉WM不要限制它?

对于我的测试用例,我有两台1600×1200显示器,nVidia将其作为一个3200×1200屏幕呈现给KDE4。 XDisplayWidth(显示,0); 返回3200和XDisplayHeight(显示,0); 返回1200。

我打电话的时候

XCreateWindow(display, DefaultRootWindow(display), 220, 0, 1700, 930, 1, DefaultDepth(display,screen), InputOutput, CopyFromParent, CWCursor, &attributes); 

对于一个窗口1700×930在220,0我得到一个窗口1593×930在0,0,完全保持在左侧监视器上。 任何大于它的XResizeWindow都会缩小到1593.(我假设7个像素是窗口装饰,这很好。)

但是,如果我然后XMoveWindow(显示,赢,800,0),它将移动窗口跨越屏幕,然后我可以将其放大到3200宽(减去几个像素)。

有什么办法可以告诉窗口管理员,或者是这样做的人,不要将窗口限制在一台显示器上,让我使用整个屏幕?

谢谢!

 %xrandr -q --verbose xrandr: Failed to get size of gamma for output default Screen 0: minimum 3200 x 1200, current 3200 x 1200, maximum 3200 x 1200 default connected 3200x1200+0+0 (0x161) normal (normal) 0mm x 0mm Identifier: 0x160 Timestamp: 64409661 Subpixel: unknown Clones: CRTC: 0 CRTCs: 0 Transform: 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 filter: 3200x1200 (0x161) 192.0MHz *current h: width 3200 start 0 end 0 total 3200 skew 0 clock 60.0KHz v: height 1200 start 0 end 0 total 1200 clock 50.0Hz 

一般来说,应用程序不应该试图严格控制其窗口大小和位置,因为WM应该是智能的并且以最佳方式放置窗口。 如果你想要控制,尝试使用XSizeHints如下所示:

 XSizeHints sh; sh.width = sh.min_width = 1700; sh.height = sh.min_height = 930; sh.h = 220; sh.y = 0; sh.flags = PSize | PMinSize | PPosition; XSetWMNormalHints(dpy, win, &sh); XMapWindow(dpy, win); 

WM将尊重min_width并且不会缩小窗口小于此值。

如果您需要跨越多个监视器的全屏窗口,则执行的操作会有所不同,请参见此处 。