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
- 2. Install and First Launch
- 3. Splits and Tabs
- 4. Pane Navigation and Resizing
- 5. Broadcast Input
- 6. Search, Copy/Paste, and Scrollback
- 7. Profiles and Preferences
- 8. Configuration File
- 9. Saved Layouts
- 10. Terminator vs tmux
- 11. Pitfalls
- 12. References
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 spatial — Alt+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+Gonly groups every visible pane — duplication depends on current broadcast mode (defaultgroup).Super+Shift+Gonly ungroups; it does not stop broadcast. Stop broadcast →Alt+O. For hosts where mistyping has cost → use named groups, notSuper+G. Superconflicts on GNOME. GNOME Shell grabsSuper(Activities) andSuper+<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) orGDK_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,
cdhistory → not restored. Bake into a panecommand, or usedirenvso the directory itself activates the right environment. Ctrl+Shift+Gresets and clears. Easy to misfire reaching forSuper+G. Not undoable — scrollback is gone.- GTK3 port vs original Launchpad project. Old
terminatorpackage on some distros → unmaintained Python 2 / GTK2 codebase from Launchpad. Verify:terminator --versionreports 2.x and source repo isgithub.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-terminalunder Wayland (usual XWayland caveats).
12. References
- Upstream documentation — https://terminator-gtk3.readthedocs.io/
- GitHub repository (current GTK3 port) — https://github.com/gnome-terminator/terminator
- Original Launchpad project (historical) — https://launchpad.net/terminator
man terminatorandman terminator_config- VTE widget — https://gitlab.gnome.org/GNOME/vte
- tmux manual — https://man.openbsd.org/tmux.1
- Keybinding reference (Chinese) — https://blog.csdn.net/laviolette/article/details/52703605