如何在最小化的 Gnome 终端中启动脚本?

如何在最小化的 Gnome 终端中启动脚本?

我可以在新的 Gnome 终端中启动以下命令:

nohup gnome-terminal --window-with-profile=Background --command ls >/dev/null 2>&1&

(基于https://askubuntu.com/a/46630/7146https://stackoverflow.com/a/10708326/236081

但是,我希望新终端窗口在启动器中最小化启动。我该怎么做?

答案1

创建窗口后如何最小化它?

$ (mate-terminal --window-with-profile=Background --title=xxx  --command top >/dev/null 2>&1 &); sleep 0.1; xdotool windowminimize $(xdotool search --name xxx|head -1)

mate-terminal我使用 Mate 而不是 Gnome,但如果您将其替换为gnome-terminal:,效果应该一样好:

$ (gnome-terminal --window-with-profile=Background --title=xxx  --command top >/dev/null 2>&1&); sleep 0.1; xdotool windowminimize $(xdotool search --name xxx|head -1)

首先,我用 创建新窗口,mate-terminal并使用--title=xxx选项指定名称。之后,我用xdotool search --name xxx|head -1查找此窗口的 ID,并将其传递给xdotool windowminimizesleep 0.1延迟是必要的,因为窗口需要一点时间来创建。

除了使用窗口标题之外,您还可以使用其他搜索选项:

$ xdotool search Usage: xdotool search [options] regexp_pattern
--class         check regexp_pattern agains the window class
--classname     check regexp_pattern agains the window classname
--maxdepth N    set search depth to N. Default is infinite.
                -1 also means infinite.
--onlyvisible   matches only windows currently visible
--pid PID       only show windows belonging to specific process
                Not supported by all X11 applications
--screen N      only search a specific screen. Default is all screens
--desktop N     only search a specific desktop number
--limit N       break search after N results
--name          check regexp_pattern agains the window name
--title         DEPRECATED. Same as --name.
--all           Require all conditions match a window. Default is --any
--any           Windows matching any condition will be reported
--sync          Wait until a search result is found.
-h, --help      show this help output

If none of --name, --classname, or --class are specified, the  defaults are: --name --classname --class

使用选项的示例--class 'mate-terminal'

(mate-terminal --command 'top' &) && sleep 0.1 && xdotool windowminimize $(xdotool search --class 'mate-terminal' |sort|tail -1)

这应该适用于 gnome:

(gnome-terminal --command 'top' &) && sleep 0.1 && xdotool windowminimize $(xdotool search --class 'gnome-terminal' |sort|tail -1)

我对输出进行排序,xdotool search因为新创建的窗口应该是列出的最后一个。

答案2

Gnome-Terminal 没有最小化启动的选项。

以下是实现此目的的更多解决方法:

首先wmctrl是需要的,但是不是来自存储库的版本,因为此版本没有最小化窗口的选项。(如果您已经安装,wmctrl则必须将其删除)。

从github下载版本https://github.com/geekless/wmctrl/archive/master.zip并安装它(按照 INSTALL 文件 ->./configure然后sudo make install)。如果出现此问题,error: X11/Xmu/WinUtil.h您还必须安装sudo apt-get install libxmu-dev,然后重试。

然后您可以从命令行运行以下命令,例如:

gnome-terminal -x sh -c "ls; bash" & disown && sleep 3 &&  wmctrl -i -Y  $(wmctrl -l | awk -F' ' 'END{print $1}')

解释:

  1. gnome-terminal -x sh -c "ls; bash" & disown在后台运行 gnome-terminal 并执行命令(在本例中为ls
  2. sleep 3等到 gnome-terminal 窗口出现(你可以用这个值做实验,3 秒可能太短或太长,取决于你的硬件)
  3. wmctrl -i -Y -i -> 将窗口参数解释为数值,-Y -> 图标化(最小化)窗口
  4. $(wmctrl -l | awk -F' ' 'END{print $1}')或者$(wmctrl -l | tail -1 | cut -d' ' -f1)获取最后打开的窗口的窗口 ID(在这种情况下应该是 gnome-terminal 的窗口 ID)

为了简化它,您可以向文件添加一个函数$HOME/.bashrc

gterm-min() {
    gnome-terminal -x sh -c "$1; bash" & disown  
    sleep 3   
    wmctrl -i -Y  $(wmctrl -l | awk -F' ' 'END{print $1}')
}

那么你可以像这样使用它:

gterm-min "ls -la"

答案3

我的解决方案基于以下问题给出的一些答案:最小化最大化windows。不过,在这种情况下,我只想针对这个 Gnome 终端(而不是其他 Gnome 终端),所以我使用以下命令给它命名--title

nohup gnome-terminal --title="Tiny Terminal" --window-with-profile=Background --command "$argv" >/dev/null 2>&1&

并为名为“Tiny Terminal”的窗口创建了一个名为“Devil's Pie”的规则:

(if
(is (window_name) "Tiny Terminal")
(begin (minimize) )
)

(如果您愿意,您可以使用 gdevilspie 在 GUI 中创建此规则。)

这样就达到了最初想要的效果。然而,当我尝试的时候,我意识到我还想让终端恢复到最大化状态,这在单独的答案中解决

答案4

下面是我如何启动“语言工具”服务器,无需睡眠,无需循环:

#!/bin/bash

LT_WIN_NAME='The Language Tool'

xterm -geometry 126x12+0+0 -T "${LT_WIN_NAME}" -e\
 java -cp languagetool-server.jar org.languagetool.server.HTTPServer --allow-origin "*" &
xdotool windowminimize $(xdotool search --sync --name "${LT_WIN_NAME}")

相关内容