我可以在新的 Gnome 终端中启动以下命令:
nohup gnome-terminal --window-with-profile=Background --command ls >/dev/null 2>&1&
(基于https://askubuntu.com/a/46630/7146和https://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 windowminimize
。sleep 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}')
解释:
gnome-terminal -x sh -c "ls; bash" & disown
在后台运行 gnome-terminal 并执行命令(在本例中为ls
)sleep 3
等到 gnome-terminal 窗口出现(你可以用这个值做实验,3 秒可能太短或太长,取决于你的硬件)wmctrl -i -Y
-i -> 将窗口参数解释为数值,-Y -> 图标化(最小化)窗口$(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}")