Terminator


  • Description: Terminator terminal emulator on Linux — installation, splits and tabs, keybindings, broadcast input, configuration file, saved layouts, and comparison with tmux and other emulators.
  • My Notion Note ID: K2B-1-1
  • Created: 2021-03-04
  • Updated: 2026-05-15
  • License: Reuse is very welcome. Please credit Yu Zhang and link back to the original on yuzhang.io

Table of Contents


1. Overview

GTK terminal emulator. Python + VTE widget (same as gnome-terminal) — identical font rendering, Unicode, shell behaviour. Added value, all first-class (not plugins):

  • Tile one window into N panes, no window manager required.
  • Type the same command into all panes at once (broadcast input).
  • Named saved layouts, arbitrary nested horizontal/vertical splits.

Comparison at a glance:

Emulator GPU-accelerated Native splits Broadcast input Notes
gnome-terminal No No No GNOME default, tabs only.
xterm No No No Minimal, X11-era reference.
terminator No Yes Yes Python + GTK + VTE.
tilix No Yes Yes GTK, similar feature set, dormant upstream.
kitty Yes Yes (layouts) Yes (kittens) OpenGL, fast, scripting in Python.
alacritty Yes No No OpenGL, minimal config, no tabs.
wezterm Yes Yes Yes Rust, Lua config, multiplexer mode.

Pick Terminator → GUI tiling on local Linux desktop. Pick tmux (§10) → sessions must survive disconnect or run over SSH.

2. Install and First Launch

Ubuntu/Debian:

sudo apt update
sudo apt install terminator

Arch:

sudo pacman -S terminator

Fedora:

sudo dnf install terminator

From source (current upstream = GTK3 port on GitHub):

git clone https://github.com/gnome-terminator/terminator.git
cd terminator
sudo python3 setup.py install

Launch:

terminator                  # default profile
terminator -l <layout-name> # restore a saved layout (see Section 9)
terminator -e "<command>"   # run a single command in a new window
terminator -m               # maximise on launch
terminator -b               # borderless window

Set as default x-terminal-emulator on Debian/Ubuntu:

sudo update-alternatives --config x-terminal-emulator

3. Splits and Tabs

Right-click pane → context menu (split, close, preferences). Keybindings cover the menu and more. Splits and panes:

Action Keybinding
Split horizontally (stack) Ctrl+Shift+O
Split vertically (side-by-side) Ctrl+Shift+E
Close current pane Ctrl+Shift+W
Quit window (closes all panes) Ctrl+Shift+Q
Maximise current pane Ctrl+Shift+X
Maximise and zoom font Ctrl+Shift+Z
Next pane Ctrl+Shift+N / Ctrl+Tab
Previous pane Ctrl+Shift+P / Ctrl+Shift+Tab

Caveat: "horizontal split" here = horizontal divider → new pane below (inverse of some other emulators). Trust menu labels, not muscle memory. Tabs:

Action Keybinding
New tab Ctrl+Shift+T
Next tab Ctrl+PageDown
Previous tab Ctrl+PageUp
Swap with next tab Ctrl+Shift+PageDown
Swap with previous tab Ctrl+Shift+PageUp
Toggle fullscreen F11

Window/process:

Action Keybinding
New window in same process Ctrl+Shift+I
New window in a separate process Super+I

Same process → shares saved layouts + Python interpreter. Separate process → independent; survives original window crash.

4. Pane Navigation and Resizing

Focus moves with Alt + arrow. Direction is spatialAlt+Up → pane physically above, not previous in tab order:

Action Keybinding
Focus pane above Alt+Up
Focus pane below Alt+Down
Focus pane to the left Alt+Left
Focus pane to the right Alt+Right

Resize split bar with Ctrl+Shift + arrow:

Action Keybinding
Move split bar right (vertical split) Ctrl+Shift+Right
Move split bar left (vertical split) Ctrl+Shift+Left
Move split bar up (horizontal split) Ctrl+Shift+Up
Move split bar down (horizontal split) Ctrl+Shift+Down

Font size:

Action Keybinding
Increase font Ctrl++
Decrease font Ctrl+-
Reset to profile size Ctrl+0

5. Broadcast Input

Duplicate keystrokes across multiple terminals. Two orthogonal pieces, easy to conflate: (1) grouping — labels panes as belonging to one group, does not duplicate input by itself; (2) broadcast mode — decides where keystrokes go: off (default, focused terminal only), group (every terminal in focused terminal's group), all (every terminal in the window). Default keybindings (per terminator(1)):

Action Keybinding
Group all terminals in the window Super+G
Ungroup all terminals Super+Shift+G
Group all terminals in the current tab Super+T
Ungroup terminals in the current tab Super+Shift+T
Broadcast to all terminals Alt+A
Broadcast to grouped terminals only Alt+G
Broadcast off Alt+O

Titlebar colour signals state: red = broadcaster (input duplicated), blue = receiver, grey = unaffected. Default mode = group, so common pattern: Super+G (one group of everyone) → type. Alt+A only needed when panes belong to multiple groups and you want to spray all. Typical use: edit /etc/hosts across SSH'd hosts; start same service on three nodes. Only input is duplicated — output not synchronised, slow hosts don't block the rest.

Never run destructive commands under broadcast. No confirmation; one rm -rf → every receiving host. Either Alt+O first, or hold hosts out by leaving them ungrouped + using Alt+G instead of Alt+A. Named groups (titlebar group icon, or right-click → Grouping) assign a pane to a named group — more selective than the Super+G blanket toggle and the safer default for production hosts.

6. Search, Copy/Paste, and Scrollback

Action Keybinding
Search scrollback (regex) Ctrl+Shift+F
Copy selection to clipboard Ctrl+Shift+C
Paste Ctrl+Shift+V
Hide/show scrollbar Ctrl+Shift+S
Reset terminal Ctrl+Shift+R
Reset terminal and clear screen Ctrl+Shift+G

Selection-on-drag is automatic (X11 PRIMARY); middle-click pastes primary, no Ctrl+Shift+V needed. Scrollback length: per-profile under Preferences → Profiles → Scrolling, default 500 lines (short) — raise to 10000 or "Infinite" if RAM allows.

7. Profiles and Preferences

Right-click → Preferences → GTK dialog, four tabs:

  • Global — window placement, copy-on-selection, focus behaviour, tab position.
  • Profiles — per-profile font, colour scheme, cursor, scrollback, bell, command. Named bundle; multiple coexist; a layout can launch each pane with a different profile.
  • Layouts — saved window/tab/pane structures, addressed by name (§9).
  • Keybindings — every action above is rebindable.

Writes → ~/.config/terminator/config. Hand-editing (§8) is faster than the dialog once the structure is familiar.

8. Configuration File

Path: ~/.config/terminator/config. INI-like syntax with nested sections. Minimal example:

[global_config]
  title_transmit_bg_color = "#c80003"
  inactive_color_offset = 0.85
  always_split_with_profile = True

[keybindings]
  # Rebind broadcast actions. Values are single GTK accelerators
  # (no tmux-style prefix chords — Terminator parses one combo per binding).
  broadcast_all = <Ctrl><Shift>asterisk
  broadcast_group = <Ctrl><Shift>ampersand
  broadcast_off = <Ctrl><Shift>parenleft

[profiles]
  [[default]]
    background_color = "#1d1f21"
    foreground_color = "#c5c8c6"
    cursor_color = "#aeafad"
    font = "JetBrains Mono 11"
    use_system_font = False
    scrollback_lines = 10000
    scrollback_infinite = False
    copy_on_selection = True

  [[ssh-prod]]
    background_color = "#3b0000"
    foreground_color = "#ffd2d2"
    use_system_font = False
    font = "JetBrains Mono 11"

[layouts]
  [[default]]
    [[[window0]]]
      type = Window
      parent = ""
    [[[child1]]]
      type = Terminal
      parent = window0
      profile = default

Reload → restart Terminator (no SIGHUP reload). Syntax errors → controlling shell if launched from one, else ~/.xsession-errors. The profile key inside [[[child]]] → per-pane colour scheme in a saved layout (§9). Example: red ssh-prod profile on the production pane → can't be confused with staging next to it.

9. Saved Layouts

A layout = recorded window tree (panes, sizes, tabs, working dirs, per-pane profile + startup command). Restore with terminator -l <name>.

Create via dialog: arrange panes/tabs → Preferences → Layouts → Add (captures current window) → optionally edit each terminal to set a command (e.g. htop) and a working directory → save. Launch:

terminator -l devstack

.desktop shortcut:

[Desktop Entry]
Name=Devstack
Exec=terminator -l devstack
Type=Application
Icon=utilities-terminal
Categories=Development;

Direct edits under [layouts] (§8) work equivalently — dialog and file produce the same result. Pane command runs once at layout start; command exits → pane exits. Keep pane open with hold = True:

[[[child1]]]
  type = Terminal
  parent = window0
  command = "tail -F /var/log/syslog"
  hold = True

10. Terminator vs tmux

Overlapping but distinct; composes well.

Terminator tmux
Layer GUI (GTK + VTE) TTY (curses)
Splits and tabs Yes Yes (panes, windows)
Broadcast input Yes Yes (setw synchronize-panes)
Survives terminal disconnect No Yes (detach/attach)
Works inside SSH No (GUI) Yes
Mouse selection Native Requires mouse on
Scriptable Via Python plugins Via shell + tmux CLI
Per-pane GPU acceleration No N/A

Common pairing: Terminator local-side for tiling; tmux inside one pane on the remote host → remote session survives laptop sleep or VPN drop. Layers don't conflict; each broadcasts within its own scope.

11. Pitfalls

  • Grouping vs broadcasting. Super+G only groups every visible pane — duplication depends on current broadcast mode (default group). Super+Shift+G only ungroups; it does not stop broadcast. Stop broadcast → Alt+O. For hosts where mistyping has cost → use named groups, not Super+G.
  • Super conflicts on GNOME. GNOME Shell grabs Super (Activities) and Super+<letter> (window-manager shortcuts). Fix: rebind broadcast keys in [keybindings] (§8), or disable the GNOME shortcut under Settings → Keyboard.
  • HiDPI rendering. VTE picks up GTK scale factor, but mixed-DPI multi-monitor setups → font may render too small on high-DPI screen. Set GDK_SCALE=2 (integer) or GDK_DPI_SCALE=1.5 (font only) in the launcher, not .bashrc — child shells should not inherit it.
  • Layouts capture working dirs, not shell state. Env vars, virtualenvs, cd history → not restored. Bake into a pane command, or use direnv so the directory itself activates the right environment.
  • Ctrl+Shift+G resets and clears. Easy to misfire reaching for Super+G. Not undoable — scrollback is gone.
  • GTK3 port vs original Launchpad project. Old terminator package on some distros → unmaintained Python 2 / GTK2 codebase from Launchpad. Verify: terminator --version reports 2.x and source repo is github.com/gnome-terminator/terminator.
  • Wayland. Runs under XWayland on GNOME/KDE. Native Wayland support → depends on distro's GTK/VTE versions. Cursor-warp and global hotkeys behave like gnome-terminal under Wayland (usual XWayland caveats).

12. References