【问题标题】:How to move window offscreen with wmctrl如何使用 wmctrl 将窗口移出屏幕
【发布时间】:2016-04-08 13:10:30
【问题描述】:

我正在尝试以编程方式移动一个窗口,使其部分显示在屏幕上。例如,单击 VLC 标题栏并拖动它以便只有一半的窗口可见就可以了。

当我输出wmctrl -lG 的结果时,效果很好:

0x04a00011  0 -293 138  600  420  HEVM002 VLC media player

但是,当我将其移回屏幕并尝试复制其位置时,它不起作用并将窗口剪辑到远端:

wmctrl -r "VLC media player" -e 0,-200,0,800,600

我已经在几个窗口管理器上进行了测试,它似乎在 xfwm 上运行良好,但在 compiz 上却不行。我可以设置一个标志或类似的东西来启用屏幕外的移动窗口吗?

【问题讨论】:

    标签: linux ubuntu x11 window-managers compiz


    【解决方案1】:

    在窗口管理器下运行时,这完全取决于窗口管理器。是否有强制部分离屏位置的标志取决于它是哪个窗口管理器。

    实现此目的的唯一与窗口管理器无关的方法是将窗口设为override_redirect 窗口。但是,当然,这意味着不再管理窗口。再次使其成为普通窗口将导致窗口管理器再次对其进行管理,这可能再次取决于窗口管理器,意味着再次强制它进入边界。

    也就是说,查看 wmctrl 的源代码,如果窗口管理器支持,它使用_NET_MOVERESIZE_WINDOW,否则回退到XMoveResizeWindow(或类似的)。然而,在第一种情况下,它首先将位置值转换为unsigned long,这实际上意味着任何负值无论如何都会丢失。在第二种情况下,负值似乎表示“不要移动”,所以也没有运气。

    您可以尝试使用xdotool windowmove 来正确处理负值。也许还考虑提交针对 wmctrl 的错误?

    【讨论】:

    • 干杯 - xdotool windowmove 产生了相同的结果,所以我可能会编辑 compiz 以添加支持
    • 对我(i3wm)来说,xdotool 有效,但 wmctrl 无效。所以在这种情况下,可能是窗口管理器拒绝了请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2016-10-21
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多