从 bash 执行 wmctrl

从 bash 执行 wmctrl

在终端上使用 稍微操作一下之后wmctrl,现在进入下一步。wmctrl从 bash 脚本执行。

当它完全单独时,我确实可以wmctrl在 bash 中执行。

例子:

#!/bin/bash

 SOUDIR=/usr/bin
 echo "$SOUDIR"
 $SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

但是当我添加 Firefox 行代码时它不起作用。我以为添加睡眠时间会起作用,但我错了。

这是当前的代码:

#!/bin/bash

firefox http://www.google.de
sleep 30s
SOUDIR=/usr/bin
echo "$SOUDIR"
$SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

如何使用此 bash 代码调整 Web 浏览器大小?

我是 bash 和 ubuntu 的新手。

答案1

好的,有几点:

  • 您不需要/usr/bin添加。 Shell 会自行找到 wmctrl。 这适用于可能涉及可移植性的非常特殊的情况。
  • 在命令末尾添加“&”符号firefox。只有前一个命令退出后,脚本才会继续执行。由于 Firefox 不会退出,因此脚本会等待它。
  • 正如 Oli 指出的那样,更好的方法是使用类名。我编写了多个脚本,通过wmctrl引用类名来查找窗口的十六进制 ID。

就我个人而言,我会这样做:

#!/bin/bash
firefox http://www.google.de &
sleep 3
WM_ID=$(wmctrl -lx | awk '$3~/Navigator.Firefox/ {print $1}')
wmctrl -i -r $WM_ID -e 0,0,0,500,800

这里我们打开 Firefox,让它在后台运行,然后我们提取与 class 匹配的窗口的十六进制 ID Navigator.Firefoxwmctrl -lx字段 3 是 wm_class,字段 1 是十六进制 ID。awk 帮助我们在这里提取字段 1。最后我们在最后的 wmctrl 语句中引用该数字 ID

答案2

该命令似乎firefox会阻止脚本继续执行,直到它退出。只需将其推入后台,您的脚本就可以继续执行:

firefox http://www.google.de &

顺便提一下,你可能还想看看-no-remote对于 Firefox。这将停止命令与 DISPLAY 中任何现有的 Firefox 实例进行交互。

当我们谈论切线时,firefox命令有一些辅助参数这 - 以及-no-remote- 可以帮助您定位新窗口。

例如,你可以设置一个特定的类名,然后让 Compiz 自动处理调整大小。并wmctrl -x <WM_CLASS>允许您以类别而不是 ID 为目标。大概比定位窗口名称或ID更为强大。

相关内容