Contents

从命令行管理GNOME终端

1. 概述

在图形用户界面中工作时,我们经常需要运行 bash 命令或脚本。 因此,文本终端的能力是必要的。

我们将研究使用gnome-terminal的选项卡有效运行 bash 命令的方法。

2. 什么是gnome-terminal

gnome-terminal是文本终端的模拟器。我们可以使用 bash 命令*gnome-terminal *来启动它。 我们将在本教程中使用 3.40.3 版本。

在某些 Linux 发行版中,gnome-terminal不是开箱即用的,因此我们需要手动安装它。

3. 在gnome-terminal中创建选项卡

使用*–tab*选项,gnome-terminal命令会创建选项卡。因此,让我们获取两个选项卡:

gnome-terminal --tab --tab

选项卡出现在最后创建的gnome-terminal中。详细地说,如果我们在现有的gnome-terminal中发出这个命令,新的标签会附加到它上面。

另一方面,如果我们从不同类型的终端开始,例如xterm ,则会弹出一个全新的gnome-terminal ,其中正好有两个选项卡。

4. 在gnome-terminal中运行命令

让我们启动gnome-terminal并使用“-”分隔符在其中运行一系列 bash 命令。

双连字符“-”表示gnome-terminal选项的结束。此标记之后的所有内容都被视为 bash 命令。

因此,让我们在新创建的终端中运行sleep

gnome-terminal -- sleep 10s

一些睡眠是必要的,因为终端在内部命令完成后立即关闭。

5. 保持gnome-terminal打开

现在,让我们尝试保持终端打开。我们不能告诉 gnome-terminal这样做,所以我们需要使用 bash 命令来做到这一点:

gnome-terminal -- bash -c "sleep 2s; echo foo; exec bash -i"

我们使用bash 两次。第一次使用选项*-c*只是为了在新的 shell 中运行一系列命令。

随后,嵌套的bash -i为我们打开了一个交互式 shell。结果,终端保持打开状态。

我们通过exec 命令启动第二个bash以重用现有的 shell。

除其他外,它消除了有关终端中正在运行的进程的警告,否则在关闭终端期间会显示该警告。

6. 使用脚本在选项卡中运行命令

让我们使用脚本“启动器”在单独的选项卡中开始一些日常任务:

#!/bin/bash
gnome-terminal --tab -- bash -c "sleep 1s; echo \"Foobar\"; exec bash -i"
gnome-terminal --tab -- bash -c "sleep 1s; echo \"Bar\"; exec bash -i"
gnome-terminal --tab -- bash -c "sleep 1s; echo \"Foo\"; exec bash -i"

我们将在同一个终端中收集所有选项卡。因此,我们需要使用一个临时的来启动我们的脚本。

所以,让我们用*–window*开关创建它:

gnome-terminal --window -- bash -c "./launcher"

结果,脚本发送了三个选项卡。之后,脚本完成,临时选项卡关闭。

但是,调度的交互式 shell 在计划任务完成后仍保持打开状态。

7. 使用xdotool创建标签

xdotool 实用程序将用户的活动模拟为X11环境中的键盘或鼠标输入。所以,让我们在标签创建过程中模拟用户的操作。

在交互模式下,我们可以使用“ Ctrl-Shift-T ”组合创建选项卡。

这个 bash 脚本正好将一个选项卡添加到 gnome 终端,它是从以下位置调用的:

#!/bin/sh
WID=$(xdotool getactivewindow)
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

让我们检查一下脚本中使用的xdotool命令:

  • getactivewindow返回活动窗口的标识符——在我们的例子中是当前的 gnome 终端
  • windowfocus将焦点设置到由WID标识的窗口
  • 模拟 ‘ctrl+shift+t’ 序列以打开一个新选项卡

此外,wmctrl -a通过切换到适当的工作区、抬起并聚焦它来激活窗口。

这是必要的,因为脚本在交互式图形环境中工作。因此,用户可以在脚本运行时更改活动窗口。

xdotool (版本3.20160805.1)和wmctrl(版本 1.07)都不是标准的 bash 命令,因此我们需要安装它们。

8. 使用xdotool运行命令

让我们稍微修改前面的示例,以允许在选项卡中启动脚本。基本上,我们将使用xdotooltype命令,它模拟用户的输入:

#!/bin/bash
WID=$(xdotool getactivewindow)
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
sleep 1; xdotool type --clearmodifiers "itcodingman@blogdemo"; xdotool key Return;

clearmodifiers选项确保模拟打字不受例如按下 CapsLock 按钮的影响。

假设我们的脚本名为xlauncher,我们将启动pwd 命令,该命令作为参数itcodingman@blogdemo提供:

$ ./xlauncher pwd