如何通过脚本移动任何应用程序并调整其​​大小:

如何通过脚本移动任何应用程序并调整其​​大小:

问题显示了如何通过标题来寻址窗口,然后对其进行定位/调整大小。

现在,要寻址窗口,有五个选项:
- 窗口的 ID:应用程序重新启动时更改 => 无用
- 窗口的标题:与其他窗口的标题相同 => 无用
- 窗口的命名空间:与其他窗口的命名空间相同 =>无用> 无用
- 用户可以通过点击选择 => 这样做的全部意义就是懒惰,不是吗?
- 将使用活动窗口=>也许,但我觉得这可能不可靠(?)

我想要做的是让一个脚本打开一堆应用程序,其中一些应用程序不止一次(相同或可变的标题)并将它们放置在我的桌面上。注意复数,我希望其中一些也能在另一个工作区上。wmctrl能够完成所有移动和调整大小,但我不确定如何进行窗口选择。

有没有办法在启动应用程序后立即获取窗口 ID?我知道你可以对进程 ID 执行此操作,并且wmctrl能够获取我正在运行的所有应用程序的 PID,那么有没有办法使用 PID 来寻址窗口?

或者,可以wmctrl反向进行标题匹配吗? (--help说将使用第一个匹配,是否可以使用最近开始的(所以我假设最后一个)匹配?)

答案1

当问题快完成时想到这个解决方案,所以我想我会自我回答。这工作可靠,但可能有更简单的方法。如果有办法直接完成我的要求,请随时留下另一个答案。

如何通过脚本移动任何应用程序并调整其​​大小:

此示例代码应该是不言自明的(带有注释):

#!/bin/bash
DISPLAY=:0 gnome-calculator & # start app
cpid=$! # get process ID of said app
sleep 1 # give it a second to open the window (adjust to needs)
cwid=$(wmctrl -lp | grep " $cpid " | cut -d " " -f 1) # get window ID
wmctrl -i -r "$cwid" -e "0,3200,572,396,415" # move and resize!
# start the 2nd application...
DISPLAY=:0 sol &
cpid=$!
sleep 1
cwid=$(wmctrl -lp | grep " $cpid " | cut -d " " -f 1)
wmctrl -i -r "$cwid" -b "remove,maximized_vert,maximized_horz" # un-maximize
wmctrl -i -r "$cwid" -t 1 # move to desktop 1 (2nd workspace)
wmctrl -i -r "$cwid" -e "0,1497,525,1342,860"

只需对所需数量的应用程序重复此操作即可,您可以使用它wmctrl -l来找出应用程序的当前几何形状,以便您知道要为参数提供什么-e

参数的格式-e为:<gravity>,<X_pos>,<Y_pos>,<width>,<height>.

相关内容