在应用程序启动时最大化应用程序的脚本

在应用程序启动时最大化应用程序的脚本

我知道这个问题是重复的:
如何通过命令行设置应用程序在屏幕上的窗口大小和位置?
从命令行调整最大化窗口的大小

我能够通过第一个链接解决我的问题。但我正在努力学习 Bash 语言,我想知道以下脚本出了什么问题:

#!/bin/bash

xfce4-settings-manager & sleep 0.1
xwininfo -name "xfce4-settings-manager" | grep xwininfo: | awk {'printf$4'}
wmctrl -i -r $1 -b add,maximized_vert,maximized_horz &

运行脚本后,我检查“xwininfo”是否采用了应用程序的另一个 ID 值。我不明白为什么。有人可以帮我解决这个问题吗?

提前致谢。

答案1

您正在寻找的工具是魔鬼派(无论是版本1还是版本2,注意它们使用完全不同的配置语言)。这个网站上有很多例子,例如1 2 3 4

您的脚本的问题已被确定杰夫·夏勒在评论中:从中提取输出的行xwininfo不会插入调用wmctrl.要在脚本中使用命令的输出,请使用命令替换

windowid=$(xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}')
wmctrl -i -r "$windowid" -b add,maximized_vert,maximized_horz &

我使用了一个中间变量来防止该行变得太长,但您可以全部内联完成:

wmctrl -i -r "$(xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}')" -b add,maximized_vert,maximized_horz &

我还结合了 grep 和 awk 调用,我发现在这里使用单个工具更简单。

您不需要使用xwininfo查找窗口 ID:wmctrl可以做到这一点,只需将窗口名称传递给它即可。

wmctrl -r "xfce4-settings-manager" -b add,maximized_vert,maximized_horz &

答案2

既然你想要:

第二行的结果由第三行的 $1 检索

你可以:

#!/bin/bash

xfce4-settings-manager & sleep 0.1
wid=$(xwininfo -name "xfce4-settings-manager" | grep xwininfo: | awk {'printf$4'})
wmctrl -i -r "$wid" -b add,maximized_vert,maximized_horz &

不过,如果我可以建议另一个版本(未经测试,因为我不在 X 显示器前):

#!/bin/bash

xfce4-settings-manager & 
while ! pgrep xfce4-settings-manager > /dev/null
do
  :
done
wid=$(xwininfo -name "xfce4-settings-manager" | awk '/xwininfo:/ { print $4 }')
wmctrl -i -r "$wid" -b add,maximized_vert,maximized_horz

变化:

  • 我不确定 wmctrl 是否必须放在后台,所以我删除了它&
  • 我将awk和grep结合起来,因为awk可以“grep”
  • 我把sleep 0.1(假设xfce4-settings-manager在该时间段内启动)改成了一个循环,要求pgrep查找进程

答案3

感谢回复。我尝试按照@Gilles 和@Jeff 在上述评论中解释的操作,但脚本不起作用。它与我在第一条消息中提到的问题相同。

让我解释一下发生了什么(逐行):

  1. 该脚本启动“xfce4-settings-manager”

    USER@PC:~$ xfce4-settings-manager & sleep 0.1 ;

[3]9825

  1. 它需要“xfce4-settings-manager”窗口的值。在这个例子中,我只想要输出结果。在剧本中,我是按照吉尔斯和杰夫告诉我的方式写的。

    USER@PC:~$ xwininfo -name "xfce4-settings-manager" | USER@PC:~$ xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}' 0x5400001

  2. 我在最后一个命令中包含了窗口值(0x5400001),但窗口没有最大化。

    USER@PC:~$ wmctrl -i -r 0x5400001 -b 添加,maximized_vert,maximized_horz

[4]9852

  1. 我运行“xwininfo”命令并选择“xfce4-settings-manager”窗口,这是其结果:

    用户@PC:~$ xwininfo

xwininfo:请通过在窗口中单击鼠标来选择您想要了解其信息的窗口。

xwininfo:窗口 ID:0x5800003“设置”

绝对左上角 X:343

绝对左上角 Y:286

相对左上角X:5

相对左上角Y:19

宽度:680

身高:195

深度:24

视觉:0x20

视觉等级:真彩色

边框宽度:0

类:输入输出

颜色图:0x22(已安装)

位重力状态:NorthWestGravity

窗口重力状态:NorthWestGravity

后备存储状态:无用

保存状态: 否

地图状态:IsViewable

覆盖重定向状态:否

角球:+343+286 -343+286 -343-287 +343-287

-几何尺寸680x195+338+267

[2] 完成 xfce4-settings-manager

[4]+ 完成 wmctrl -i -r 0x5400001 -b 添加,maximized_vert,maximized_horz

“xfce4-settings-manager”的窗口值有所不同,具体取决于从命令行检索值或使用光标选择窗口(0x5400001 和 0x5800003)。

有任何想法吗?

答案4

evince窗口标题等于 PDF 文件标题,并且其中没有文字证据...所以另一种尝试方法是等待一段时间(sleep 0.4证据就足够了),然后最大化wmctrl -l列表中的最后一个窗口(即,最后添加的窗口)如下所示:

evince file.pdf & sleep 0.4; wmctrl -i -r "$(wmctrl -l | tail -1 | fgrep -o '^\S+')" -b add,maximized_vert,maximized_horz

这适用于任何应用程序,但您必须确保您已经等待足够的时间才能将其升级到wmctrl

相关内容