我的shell脚本如何控制zenity窗口的位置?

Nor*_*sey 5 x11 shell zenity

zenity当我的垃圾邮件过滤器守护程序过滤一组邮件时,我正在发布一个简单的通知.目前此消息已发布到屏幕中间,这是突兀的.我想将它发布到左上角.但是,zenity不尊重-geometry应该是所有X应用程序的标准选项,并且其文档提供了控制窗口高度和宽度的选项,但不提供放置.

有没有办法控制zenity窗口张贴的(x,y)坐标?

如果没有,有没有办法通过修改X资源或窗口管理器来解决这个问题(我正在使用fvwm)?


编辑:以下内容不起作用~/.fvwm2rc(fvwm版本2.5.26):

Style "Information" PositionPlacement -0 -0
Style "Zenity" PositionPlacement -0 -0
Run Code Online (Sandbox Code Playgroud)

它们也不适用于-0 -0删除,如手册页中所示.(窗口标题为zenity --info"信息".)

有趣的是,zenity忽略了我之前的窗口管理器指令,默认情况下应手动放置窗口.


编辑:

在许多其他有趣的信息中,xprop(1)有关zenity窗口的报告:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOG
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified location: 0, 0
                program specified minimum size: 307 by 128
                program specified maximum size: 307 by 128
                window gravity: NorthWest
WM_CLASS(STRING) = "zenity", "Zenity"
WM_ICON_NAME(STRING) = "Information"
WM_NAME(STRING) = "Information"
Run Code Online (Sandbox Code Playgroud)

尽管这个显然令人鼓舞的报道,窗口实际上并没有张贴在0,0 :-(

我知道Style命令正在生效,因为我添加了!Borders选项,果然zenity窗口没有边框发布......但仍然在该死的屏幕中央!

ADE*_*Ept 1

是的,在窗口管理器的适当帮助下这绝对是可能的。例如,使用 xmonad 这将是一行代码......

我的 fvwm 有点生疏,但看起来像是这样的:

Style "zenity" PositionPlacement -0 -0
Run Code Online (Sandbox Code Playgroud)

在你的 fvwm2rc 中应该可以解决问题。

编辑:请注意小写的“zenity”,因为根据文档,它不仅应该匹配窗口标题,还应该匹配窗口类(您可以使用“xprop”实用程序找到它:启动它并指向有问题的窗口)。

根据 xprop,zenity 窗口有两个有趣的属性:

  1. _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOG,说明这是一个对话框窗口
  2. 它有WM_TRANSIENT_FOR(WINDOW): window id # <some window id here>,表示它是一个对话框的主窗口(在我的例子中 - xterm 窗口)

因此,如果我的建议不起作用,那么几乎可以肯定是因为 fvwm 以特殊方式处理对话框 - 无论是由于配置还是由于硬编码行为。

您可以尝试将“ EWMHIgnoreWindowType”添加到 zenity 窗口的样式中,这应该会让 fvwm 忽略这些提示