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コマンドでタブが作成されます。 それでは、2つのタブを取得しましょう。

gnome-terminal --tab --tab

タブは、最後に作成されたgnome-terminalに表示されます。 詳細には、既存のgnome-terminalでこのコマンドを発行すると、新しいタブがそれに接続されます。

一方、 xterm などの別の種類の端末から開始すると、まったく新しいgnome端末がちょうど2つのタブでポップアップ表示されます。

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を2回使用します。 初めて、オプション -c を使用して、新しいシェルで一連のコマンドを実行するだけです。

続いて、ネストされた bash-iがインタラクティブシェルを開きます。 その結果、ターミナルは開いたままになります。

execコマンドを使用して2番目のbashを開始し、既存のシェルを再利用します。

特に、ターミナルで実行されているプロセスに関する警告を排除します。そうしないと、ターミナルを閉じるときに表示されます。

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"

その結果、スクリプトは3つのタブを送信します。 その後、スクリプトが実行され、一時タブが閉じます。

ただし、スケジュールされたタスクが終了した後も、ディスパッチされたインタラクティブシェルは開いたままになります。

7. xdotoolを使用したタブの作成

xdotool ユーティリティは、X11環境でのキーボードまたはマウス入力としてのユーザーのアクティビティをシミュレートします。 では、タブ作成中のユーザーのアクションを模倣しましょう。

インタラクティブモードでは、「Ctrl-Shift-T」の組み合わせを使用してタブを作成できます。

このbashスクリプトは、次の場所から呼び出されるgnome-terminalにタブを1つだけ追加します。

#!/bin/sh

WID=$(xdotool getactivewindow)
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

スクリプトで使用されているxdotoolのコマンドを調べてみましょう。

  • getactivewindow は、アクティブなウィンドウの識別子(この場合は現在のgnome-terminal)を返します
  • windowfocus は、WIDで識別されるウィンドウにフォーカスを設定します。
  • key は、「ctrl + shift+t」シーケンスをシミュレートして新しいタブを開きます

さらに、 wmctrl -a は、適切なワークスペースに切り替えて、ウィンドウを上げてフォーカスすることにより、ウィンドウをアクティブにします。

スクリプトはインタラクティブなグラフィカル環境で機能するため、これが必要です。 その結果、ユーザーはスクリプトの実行中にアクティブなウィンドウを変更する可能性があります。

xdotool (バージョン3.20160805.1)と wmctrl (バージョン1.07)はどちらも標準のbashコマンドではないため、これらをインストールする必要があります。

8. xdotoolでコマンドを実行する

前の例を少し変更して、タブでスクリプトを開始できるようにします。 基本的に、ユーザーの入力をシミュレートするxdotoolのtypeコマンドを使用します:

#!/bin/bash

WID=$(xdotool getactivewindow)
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
sleep 1; xdotool type --clearmodifiers "$@"; xdotool key Return;

clearmodifiers オプションは、シミュレートされたタイピングが、たとえばCapsLockボタンを押すことによって影響を受けないことを保証します。

スクリプトの名前がxlauncher、であると仮定して、引数 $@として提供されるpwdコマンドを開始します。

$ ./xlauncher pwd

9. 結論

この記事では、bashでの作業を容易にするためにgnome-terminalを使用しました。 まず、gnome-terminalコマンドでタブを作成しました。

次に、この方法でタブ内でスクリプトを開始する方法を学びました。

最後に、xdotoolベースのユーザーシミュレーターで同じ目標を達成する方法を示しました。