えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

Tilix の紹介|Linux用ターミナルエミュレーター

tilix_window
左が bashtop、右上がhtop、右下がcmatrix -a の出力
画像クリックで拡大可能

お伝えしたいこと

ウィンドウ分割を初めとした便利な機能を持つターミナルエミュレーターが欲しくなったので、Tilix を導入しました。

本記事では Tilix を選んだ理由、インストール手順、トラブルの回避、お気に入りのカスタマイズを紹介したいと思います。

特に以下の内容はTilix以外のターミナルエミュレーターにも応用可能ですので、興味のある部分はぜひ読んでみてください。

  • gtk.cssによる見た目のカスタマイズ
  • ls の色にカラースキームが反映されない不具合回避
  • カラースキームNordのダウンロードと適用
  • Quakeモードと通常モードの併用
  • ショートカットキーのカスタマイズ
  • 設定のバックアップ・リストア

Tilix を選んだ理由

目立ったバグがない が一番大きな理由です。
例えばTerminator はブロードキャスト機能がうまく動きません (ブロードキャスト対象が多くなると、正しく複製されなくなる)。
またTerminatorとGuake は Ctrl+Shift+F によるターミナルの文字列検索がまともに機能しませんでした (検索してもヒットしない)。
その点、Tilix はどちらも問題なく動いています。
※2020年10月時点の情報です

次に、欲しい機能を持っている ことが挙げられます。
ちなみに、機能面ではTerminator とGuakeも概ね要件を満たしています。

  • タブ
  • ターミナル分割 (同一タブ内で画面を縦横に分割する機能 ≒ TMUX)
  • ターミナルの表示/非表示の切り替えのショートカット (≒ Quake機能)
  • コマンドブロードキャスト (Guakeは2020/10時点で非対応)
  • コピペ時の確認ウィンドウ (≒ Teraterm)
  • ショートカットキーのカスタマイズ

インストール手順

公式手順に従い、以下のコマンドを実行します。

sudo dnf install tilix

太すぎるタブバーを狭くする

好みの差が出そうですが、私としてはタブが太すぎると感じたので変更します。
StackOverflow で議論されていたスタイルシートを参考に、アレンジしました。

詳細な原理は、(参考) GTKのCSS編集のやり方で紹介します。

変更前後の比較

f:id:stopendy:20201011025954p:plainf:id:stopendy:20201011030852p:plain
左が変更前、右が変更後

変更方法

~/.config/gtk3.0/gtk.css に以下のように記載することで修正可能です。

.tilix-background tab, .tilix-background button {
  padding: 0px;
  min-height: 0px;
}

.tilix-background tab button image {
  padding-right: 1px;
}

ls コマンドの色がおかしい問題の修正

Tilix で ls --color コマンドを実行すると、デフォルトでディレクトリは青く表示されます。
この色はTilix の Color palette が反映されてほしいのですが、 (Tilixではなく) Linux の設定ファイルの記述上、Tilixの設定が反映されず、常に暗い青で表現されてしまいます。

ここではその挙動を回避し、ディレクトリの色もカスタマイズできるように変更します。

詳細な原理は、(参考) DIR_COLORSの仕組みで紹介します。

変更前、変更後

ls-beforels-after
左が変更前、右が変更後

修正方法

/etc/DIR_COLORS~/.dir_colors にコピーします。
ターミナルを再起動すれば反映されます。

cp -p /etc/DIR_COLORS ~/.dir_colors

カラースキームの追加

Tilix のデフォルトのカラースキームは選択肢が少なめです。
ただTilix 公式サイトに記載があるとおり、特定のディレクトリにjsonファイルを配置することでカラースキームを追加できます。

今回は目に優しくてカッコイイNordを追加してみましたので、その手順を共有します。

ちなみに、本文トップの画像がNord適用後です。
右上の htop コマンドの出力がNordのカラースキームを反映した配色になっています。
青系をベースとして、緑や赤も彩度が抑えられており、落ち着いて集中できそうな色合いです。

NordはTilix 以外にも多数のTerminal Emulator (Terminator, ConEmu => Cmder)、エディタ (Atom, VS Code, vim)、Linux (dircolors) にも対応しています。
気になる方は下記公式サイトのリンクからダウンロードください!
本当におすすめです。

www.nordtheme.com

Nordの追加

まず、GitHubから nord.json をダウンロードします。

github.com

ダウンロードした nord.json を以下のどちらかのディレクトリに配置します。

  • /usr/share/tilix/schemes → 全ユーザーに反映
  • ~/.config/tilix/schemes/ → 今のユーザーのみに反映

後はTilix の設定画面を開き、カラースキームからNord を選択するのみです。
具体的な手順は後述しますが、 Preferences > (プロファイル名) > Colorタブ > Color Scheme から Nord を選択すれば反映されます。

その他のカラースキーム

Tilix 公式サイトにもリンクが貼られていますが、以下に多数公開されていました。

その他お気に入りのカスタマイズ

Tilix を開き、右上の ボタンから Preferences を選択することで、各種設定が可能です。
以下に私のお気に入り設定を書き出しますので、よろしければ参考にしてみてください。

Global

赤枠の部分を変更しました。

tilix-settings-global

  1. Ctrl + マウスホイール で拡大・縮小
  2. タイトル部分をCtrl + クリック でタイトル名変更 (暴発防止のため)
  3. 新規セッション追加時、新しいウィンドウで起動する (後述の通り、Quakeモードと通常モードを併用するための設定。Quakeを利用しない場合はSplit Right や Focus Window でも良い)
  4. 選択したテキストを (Shift+Ctrl+Cを押さなくても) コピーする

※他にもAlways use advanced paste dialog のチェックを入れることで、Teratermのようなコピペの確認ウィンドウを出せます (Ctrl+Enterで確定)。今回は有効化しませんでした。

Appearance

赤枠の部分を変更しました。

tilix-settings-appearance

  1. ウィンドウ上部のタイトルを 「Tilix」にする
  2. タブ機能を有効化する (Tilixを再起動することで反映)

Quake

特定のショートカットキー (Ctrl+@F12) でターミナルの表示/非表示を行えるようにするため、私はQuakeモードを利用しています。
これにより、Tilix でもGuake のような使い勝手にできます。

Quakeで動作させるためのショートカットキーの設定方法は「TilixをQuakeモードで利用する」で紹介します。
ここでは、Quakeモード実行時の見た目の設定を行います。

赤枠の部分を変更しました。

tilix-settings-quake

  1. Quakeモードで起動した時のウィンドウの高さ、幅を100% (最大) に。位置を中央に変更 (※)
  2. Tilix のウィンドウから選択が外れたら、自動的にウィンドウを隠す

(※) 設定画面では高さを90%までしか設定できない ので、以下のコマンドで設定します。

# dconf write /com/gexperts/Tilix/quake-height-percent 100 と同義
gsettings set com.gexperts.Tilix.Settings quake-height-percent 100

後ほど(参考) Quake時のウィンドウサイズを変更するにて、上記Quakeの設定をコマンド一行で場面に応じて切り替える方法も紹介します。

Shortcuts

デフォルトから変更したショートカットキーを列挙します。

Application

アクション ショートカットキー
Open preferences Ctrl + ,
View configured shortcuts Ctrl + .

Session

アクション ショートカットキー
Add terminal automatically Shift + Ctrl + Space
Add terminal down Shift + Ctrl + D
Add terminal right Shift + Ctrl + R
Edit the session name Shift + F2
Resize the terminal down Shift + Alt + Down
Resize the terminal left Shift + Alt + Left
Resize the terminal right Shift + Alt + Right
Resize the terminal up Shift + Alt + Up
Save the current session disabled (Backspace)

Terminal

アクション ショートカットキー
Advanced paste disabled (Backspace)
Open file browser Alt + E
Find next F3
Find previous Shift + F3
Page down Shift + Page Down
Page up Shift + Page Up
Toggle read only Ctrl + Alt + R
Reset the terminal disabled (Backspace)
Reset and clear the terminal Shift + Ctrl + L
Save terminal contents Shift + Ctrl + S
Scroll down Shift + Down
Scroll up Shift + Up

Profile

+ のアイコンからオリジナルのプロファイルを作成し、GeneralタブとColorタブの以下赤枠部分のみ変更しました。
カラースキームを Nord に設定して、透明度を少し上げるととってもおしゃれになりますよ。

tilix-settings-profile-general

tilix-settings-profile-color

既定のターミナルを切り替える

Cinnamon デスクトップの場合、Menu (またはSystem Settings) から Preferred Applications を検索し、Terminal の部分を Tilix に設定します。

default-terminal

TilixをQuakeモードで利用する

やりたいこと

tilix --quake のように --quake オプションをつけて実行すると、Tilix はQuake モードで起動します。
デフォルトでは、Quakeモードで起動するとウィンドウの枠を省略したデザインで画面上側に起動します。

その状態でもう一度 tilix --quake を実行すると、Tilixはバックグラウンドに隠れます。

ここで、Ctrl+@ というショートカットキーに tilix --quake を割り当てれば、Tilixの表示 / 非表示切り替えボタンになります。
慣れれば Alt + Tab で切り替えながら作業するより便利なので、私はこの設定としています。

なお、デフォルトの Ctrl + Alt + T でターミナルを起動するショートカットキーはそのまま残しておきます。
Tilix の設定のGlobalタブにおいて、New Session = New window と設定してある場合、Ctrl + Alt + T を押下した場合は通常モードでTilix が起動します。

この構成により、TilixひとつでQuakeモードと通常モードに両対応できるようになります

設定方法

Cinnamon デスクトップ環境の場合を例に説明します。

Menu (または System Settings から) Keyboard と検索し、キーボードの設定画面を開きます。
Shortcuts のタブへ移動し、ショートカットキーの編集画面に移動します。

shortcut1

Name にわかりやすい名称を、Command に tilix --quake と入力し、Add を選択します。

shortcut2

最後に、 Ctrl+@ などのショートカットキーを割り当てます。
Guake を使っていた方は、 F12 の方が馴染みがあるかもしれませんね。

shortcut3

繰り返しになりますが、デフォルトの Launch Terminal (Ctrl + Alt + T) に割り当てるショートカットキーは特に弄りません。

shortcut4

Tilix の設定のバックアップとリストア

GitHub Issues で作者が紹介した手順を掲載しています。

バックアップ手順

dconf dump コマンドを実行すると、設定情報がテキスト形式で出力されます。
その内容をリダイレクトして保存します。

dconf dump /com/gexperts/Tilix/ > tilix.dconf

リストア手順

dconf load コマンドに dconf dump形式の情報を標準入力から渡すことで、設定情報をリストアできます。

dconf load /com/gexperts/Tilix/ < tilix.dconf

(参考) dconf、gsettings とは

Tilix の設定情報は、dconf (設定情報管理データベース) で管理されています。
Quakeモードの設定をCLIで実施するときに gsettings を利用しましたが、gsettingsdconf のフロントエンドとして動作しています (参考:RedHat社ドキュメント)

つまり、Tilix の設定管理 (変更・保存・復元) の手段は主に3つあるということです。

  • Tilix GUI から起動する Preferences
  • dconf
  • gsettings

別サイトによると、gsettings は dconf 以外のラッパーとしても使われることがあるようです。
興味深いです。

kokufu.blogspot.com

(参考) dconf-editor

dconf には dconf-editor というGUIがあります。
以下のコマンドでインストールできます。

sudo dnf install dconf-editor

Menu から dconf editor と検索して起動できます。
実際に触ってみると、使い勝手はかなり良いです。
以下にスクリーンショットを貼ります。

dconf-top

↑トップ画面

dconf-search

↑検索ウィンドウから「Tilix」と検索してジャンプできる

dconf-list

↑デフォルト値から変更されたものには鉛筆アイコンがつく

dconf-read

↑設定名をクリックすると詳細情報を確認できる

(参考) GTKCSS編集のやり方

Tilixのタブの高さを変更するためにCSSを編集しました。
CSSのクラス名をどのように調べたのか、気になる方向けに補足します。

GTKベースのアプリは、GTKインスペクターを利用することでスタイルシートの要素を調べることができます (参考:Gnome Project)。
ブラウザデバッグを駆使してブログをカスタマイズするのと同じようなイメージです。

GTKインスペクターは gtk3-devel に付属するため、まずはそれをインストールします。

※注意:gtk3-devel は依存パッケージが非常に多いため、Gnomeベースのデスクトップ環境以外を使っている方は、下記コマンドを実行しないほうが良いです。
私は検証用のVMでこの操作を行いました。

# debianベースの場合:sudo apt install libgtk-3-dev
sudo dnf install gtk3-devel

つづいて、Tilixが停止された状態で、Tilix以外のターミナル (Gnome Terminalなど) から 以下のコマンドを実行します。

GTK_DEBUG=interactive tilix

すると、デバッグ用ウィンドウと共にTilix が起動します。
後は、以下の手順でブラウザデバッグと同じ要領でCSSの要素を調べます。

  1. デバッグウィンドウの Object タブを開く (赤枠)
  2. 左上の ● のようなアイコンを選択し、Tilix のウィンドウのスタイルを見たい部分をクリックする (赤枠)
  3. ドロップダウンリストを CSS nodes に変更する (赤枠)
  4. クラス名や適用されているスタイルの内容を確認する (ピンク枠)
  5. CSS タブにお試しでスタイルを書いて挙動を確認する
  6. ~/.config/gtk-3.0/gtk.css を編集し、tilix を再起動してスタイルが反映されたことを確認する

gtk-inspector

GTKスタイルシートは、Tilix 以外のGTKベースアプリ全てに影響を与えます。
ここでコツですが、「Tilix」など、可能な限りアプリケーション固有のキーワードを含むクラス名を指定すると、想定外の動きを抑えることができます。
後は要素名 (notebookなど) クラス名 (.tilix-backgroundなど) をスペース区切りなどで指定し、影響範囲を絞り込んでカスタマイズします。

私はCSSの経験はほとんどないのですが、以下サイトを参考になんとかできました。

(参考) DIR_COLORSの仕組み

Terminal が色を表示する仕組み

スクリプトを斜め読みしたレベルなので正確ではないかもしれませんが、色が決まるのは概ね以下の流れです。

  • ターミナルエミューレータ起動時にTERM環境変数をセットする
    • Tilixの場合、TERMには xterm-256color がセットされている
    • Tilix で echo $TERM を実行するとわかる
  • ターミナル起動時に、/etc/profile.d/colorls.sh が読み込まれる
    • ~/.dir_colors~/.dircolors~/.dir_colors.$TERM~/.dircolors.$TERM が読み込まれる
    • 上記ファイルが見つからなかった場合、/etc/DIR_COLORS.$TERM が読み込まれる
    • 上記ファイルが見つからなかった場合、/etc/DIR_COLORS.256color が読み込まれる
    • 上記ファイルが見つからなかった場合、 /etc/DIR_COLORS が読み込まれる
      • デフォルトでは /etc/DIR_COLORS.256color が読み込まれる
      • 上記手順で ~/.dir_colors を作成した場合は、代わりに ~/.dir_colors が読み込まれる (中身は /etc/DIR_COLORS と同じ)
    • dircolors コマンドにより、LS_COLORS 環境変数にカラーコードがセットされる
  • ls --color コマンド実行時、LS_COLORS に従ってエスケープシーケンスで色情報を付与して結果を出力する
  • Tilix はエスケープシーケンスを読み込み、Color Scheme に沿って色を変換して描画する

最後の工程でようやくTilix が登場しました。
これはいくつか実験した上での想像なのですが、Tilix は内部的にカラーコードの対応表を持っているようです。
特定のエスケープシーケンス (例えば、青 = \e[34m) を受け取ったら、TilixはColor Shemeのjsonファイルに記述された対応するHTMLカラーコード (例えば 青 = #81A1C1) で描画している、と私は理解しています。

Tilix の Color Palette

GitHub Issues でのやり取りによると、以下のColor Palette に各色名称ごとに2色ずつ定義されていますが、「左側が通常の色」、「右側が明るい色 (the one on the right is light color)」を表しているとのことです。
つまり、「青」を例に図解するとこのようになります。

tilix-color-explained

一方で、デフォルトで読み込まれる /etc/DIR_COLORS.256color はどうなっているかと言うと...

[stopendy@pc ~]$ grep DIR /etc/DIR_COLORS.256color 
DIR 38;5;33  # directory

ディレクトリの表示色が 38;5;33 となっています。
38;5; で始まる色は88/256色対応のカラーコードであり、 通常のBlue (34) や Light Blue (94) とは異なる色です。
Tilix のColor Palette には 38;5;33 は存在しないので、これは変換されずに「そのまま」表示されます。

一方で、/etc/DIR_COLORS は8/16色対応のカラーコードで記述されており、Tilix のColor Palette の変換テーブルに対応しています。

[stopendy@pc ~]$ grep DIR /etc/DIR_COLORS
DIR 01;34 # directory

今回はディレクトリを表す青色に着目しましたが、実行ファイルの緑色など、他にも同様の現象が発生していました。

こういった事情から、Tilix を使うときは /etc/DIR_COLORS のカラーコードを利用する方が相性が良いようです。
※実際に試してみると、Gnome Terminal も /etc/DIR_COLORS を読み込んだ方が良いようでした。他のターミナルエミュレーターも同様な気がします

ls コマンドの色がおかしい問題の修正において /etc/DIR_COLORS~/.dir_colors にコピーすることで読み込むカラーコードを変更していたのは、こういった背景からでした。

参考サイト

Linux のカラーコードについては、以下のサイトが大変参考になりました。
こちらのサイトに載っているように、 echo -e "Default \e[34mBlue\e[0m" といったコマンドを試しに実行してみると、色の挙動について理解が深まります。

https://misc.flogisoft.com/bash/tip_colors_and_formatting

(参考) Quake時のウィンドウサイズを変更する

先に紹介したカスタマイズでは、Quake時の画面幅・高さ共に100%とし、Ctrl + @ 実行時に画面全体を覆うようにTilix が起動するようにしました。
しかし、場合によっては画面左半分にブラウザを、画面右半分にTilixを設置したいケースもあると思います。
Super + → などでTilix のウィンドウを寄せても良いのですが、Ctrl + @ を押すたびに位置がリセットされてしまうので面倒です。

そこで以下のファイルを作成し、コマンド1つでTilixの設定を切り替えられるようにしました。
tilixctilixrtilixl を実行することで、「最大化」、「右寄せ」、「左寄せ」を切り替えることができます。

以下の例では gsettings set を使っていますが、もちろん dconf write を使っても大丈夫です。

~/.local/bin/tilixr (画面を右に寄せる。Tilixのウィンドウがフォーカスから外れても最小化しないようにする)

#!/bin/bash

echo -e 'Aligning Tilix to the right...\n'

gsettings set com.gexperts.Tilix.Settings quake-alignment right
gsettings set com.gexperts.Tilix.Settings quake-height-percent 100
gsettings set com.gexperts.Tilix.Settings quake-width-percent 50
gsettings set com.gexperts.Tilix.Settings quake-hide-lose-focus false

echo Done.

~/.local/bin/tilixl (画面を左に寄せる。Tilixのウィンドウがフォーカスから外れても最小化しないようにする)

#!/bin/bash

echo -e 'Aligning Tilix to the left...\n'

gsettings set com.gexperts.Tilix.Settings quake-alignment left
gsettings set com.gexperts.Tilix.Settings quake-height-percent 100
gsettings set com.gexperts.Tilix.Settings quake-width-percent 50
gsettings set com.gexperts.Tilix.Settings quake-hide-lose-focus false

echo Done.

~/.local/bin/tilixc (画面を最大化する。Tilixのウィンドウがフォーカスから外れたら自動的に最小化する)

#!/bin/bash

echo -e 'Aligning Tilix to the center...\n'

gsettings set com.gexperts.Tilix.Settings quake-alignment center
gsettings set com.gexperts.Tilix.Settings quake-height-percent 100
gsettings set com.gexperts.Tilix.Settings quake-width-percent 100
gsettings set com.gexperts.Tilix.Settings quake-hide-lose-focus true

echo Done.

~/.local/bin/tilixt (画面を上に寄せる。Tilixのウィンドウがフォーカスから外れたら自動的に最小化する)

#!/bin/bash

echo -e 'Aligning Tilix to the top...\n'

gsettings set com.gexperts.Tilix.Settings quake-alignment center
gsettings set com.gexperts.Tilix.Settings quake-height-percent 30
gsettings set com.gexperts.Tilix.Settings quake-width-percent 80
gsettings set com.gexperts.Tilix.Settings quake-hide-lose-focus true

echo Done.

~/.local/bin/tilixc の状態で tilixrtilixltilixt を実行しても即時反映されない場合は、Super + → やウィンドウのドラッグなどで最大化を解除してから、Ctrl + @ を2回押してQuakeウィンドウを再読込することで反映されます。

まとめ

Linux 用の Terminal Emulator として Tilix について諸々紹介しました。
機能の多さ、バグの少なさという点で、私の中ではTilix が一番好みでした。

冒頭に記載したとおり、ここに書いた内容のほとんどはTilix 以外のターミナルエミュレーターにも応用可能ですので、ぜひ活用してくださいね。

Linux Desktop リンク集

endy-tech.hatenablog.jp