启动 xfce4-terminal 后 WMCTRL 不起作用

启动 xfce4-terminal 后 WMCTRL 不起作用

如果我在终端中输入这两个命令:

xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt
wmctrl -r dt -e 0,10,10,720,720

我得到了想要的结果(带有 title 的窗口的位置和大小调整dt,注意不像gnome-terminalxfce4-terminal不会重写手动分配的标题)

我自然希望这能起作用:

#! /bin/bash
xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt && wmctrl -r dt -e 0,10,10,720,720

终端自行显示正确的设置和标题,但wmctrl没有任何效果。

答案1

连接&&运算符导致第二个命令直到第一个命令 ( ) 退出后才执行xfce4-terminal(并且仅当退出状态指示成功时,因为它是短路逻辑运算符)。

&&如果您更改为; 或只是将wmctrl命令放在脚本的单独一行上,您应该会获得预期的行为。

答案2

命令退出后直接运行 wmctrl xfce4-terminal。但是,如果已经有一个打开的 Xfce 终端实例,xfce4-terminal则将其自身置于后台并立即返回命令提示符,同时仍在设置实际终端屏幕的过程中。因此,当wmctrl启动时,带有标题的窗口rd可能还不存在。

如果您不必键入命令(如示例中所示)&&,则wmctrl启动速度太快。在第一个示例中,键入或从历史记录中选择的延迟足以使终端窗口具有正确的标题。

如果您剪切并粘贴第一个示例中的两个命令行输入,您可能也会遇到该问题。

您应该sleep在调用之前输入命令wmctrl。您可以试验持续时间,1 秒应该足够了,因为在启动的 shell 需要处理其启动文件之前将设置终端的标题。 (如果您使用需要检索的 URL 启动 Firefox/Chrom,则等待预期标题可能需要几秒钟,并且当出现网络错误时可能永远不会出现)。

为了获得统一的行为,请xfce4-terminal在后台启动,这样即使这是您启动的第一个实例,它也不会阻塞。

xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt &
sleep 1
wmctrl -r dt -e 0,10,10,720,720

答案3

安东的回答解释了正在做什么。wmctrl不过,在事后调整窗口大小或移动窗口是有问题的;您需要依靠计时器,因此窗口会在短时间内出现在错误的位置然后移动(或者,如果机器真的很慢,窗口将不会移动,因为wmctrl运行得太早)。此外,您可能有另一个具有相同标题的窗口(除非您生成保证唯一的标题,例如使用随机字符串或时间戳)。

幸运的是,xfce4-terminal有一个选项可以设置其初始位置和大小。它遵循标准X11 几何语法。使用它而不是调用wmctrl.请注意,大小以字符单元表示,而不是像素。

xfce4-terminal --geometry 80x40+10+10 --hide-menubar --hide-borders --hide-toolbars --title=dt

相关内容