我知道这个问题是重复的:
如何通过命令行设置应用程序在屏幕上的窗口大小和位置?
从命令行调整最大化窗口的大小
我能够通过第一个链接解决我的问题。但我正在努力学习 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 在上述评论中解释的操作,但脚本不起作用。它与我在第一条消息中提到的问题相同。
让我解释一下发生了什么(逐行):
- 该脚本启动“xfce4-settings-manager”
USER@PC:~$ xfce4-settings-manager & sleep 0.1 ;
[3]9825
它需要“xfce4-settings-manager”窗口的值。在这个例子中,我只想要输出结果。在剧本中,我是按照吉尔斯和杰夫告诉我的方式写的。
USER@PC:~$ xwininfo -name "xfce4-settings-manager" | USER@PC:~$ xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}' 0x5400001
我在最后一个命令中包含了窗口值(0x5400001),但窗口没有最大化。
USER@PC:~$ wmctrl -i -r 0x5400001 -b 添加,maximized_vert,maximized_horz
[4]9852
- 我运行“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