如何在没有附加软件的情况下通过命令行在CDE中移动GUI窗口(即没有wmctrl,xdotool等)

时间:2015-08-19 19:56:05

标签: perl solaris x11

我在使用Solaris / CDE的系统上工作,并且必须每天手动操作许多窗口的位置数百次。我想通过shell或perl脚本自动执行此过程。

到目前为止我做了很多研究,发现大多数人都可以使用wmctrl或xdotool来解决这个问题。我没有管理员权限来安装这些软件包。我也缺少一个java / c编译器。但是我可以访问perl(我非常流利)或者可以编写命令行脚本。

我不需要像wmctrl或xdotool那样功能齐全的东西,我只需要移动窗口。我已经能够通过xprop获取我的GUI的详细信息但不确定从哪里开始。谢谢!

1 个答案:

答案 0 :(得分:0)

xprop的手册页表示它能够设置属性值:

  

-set property-name value

     

指定要在指定窗口上设置的属性的名称和属性

没有给出示例脚本来显示OP使用xprop检索值的方式,但xprop的输出很容易被解析。这是一个例子:

WM_STATE(WM_STATE):
            window state: Normal
            icon window: 0x0
_NET_WM_STATE(ATOM) = 
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CLOSE
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW
_NET_WM_PID(CARDINAL) = 1942
WM_CLIENT_LEADER(WINDOW): window id # 0x600023
WM_LOCALE_NAME(STRING) = "en_US.UTF-8"
WM_CLASS(STRING) = "xterm-319", "UXTerm"
WM_HINTS(WM_HINTS):
            Client accepts input or input focus: True
            Initial state is Normal State.
            bitmap id # to use for icon: 0x600030
            bitmap id # of mask for icon: 0x600032
WM_NORMAL_HINTS(WM_SIZE_HINTS):
            program specified size: 804 by 804
            program specified minimum size: 16 by 51
            program specified resize increment: 10 by 20
            program specified base size: 6 by 31
            window gravity: NorthWest
WM_CLIENT_MACHINE(STRING) = "michener.jexium-island.net"
WM_COMMAND(STRING) = { "xterm-319", "-class", "UXTerm", "-title", "uxterm", "-u8" }
WM_ICON_NAME(STRING) = "[unnamed] - vile"
WM_NAME(STRING) = "[unnamed] - vile"

至于如何继续:如果我正在开发这样的脚本,我将有一个函数将该输出解析为名称/值对,并有一个选项来更新其中一个窗口属性 - 引用源代码wmctrlxprop的内容,以了解属性应如何格式化。需要WM_SIZE_HINTS的文档才能理解