GNOME Terminal fork with tab management tools (renamable tabs, duplicate, close others)
Find a file
2026-08-29 16:01:51 +08:00
.gitlab-ci test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
crash-logs test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
data test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
help Update German help screen-shots 2024-11-04 23:04:28 +01:00
m4 build: Add explicit pthreads dependency 2017-12-01 17:38:14 +01:00
man Rebrand to cf-gnome-terminal (Comfac) 2026-06-05 16:10:02 +08:00
po Update Polish translation 2025-08-26 18:40:26 +02:00
scripts test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
src test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
subprojects Add install-prereqs.sh, fix install.sh, document Ubuntu 24.04 build 2026-06-05 20:20:20 +08:00
.dir-locals.el build: Build as C++ 2021-05-21 23:19:46 +02:00
.gitignore feat: crash handler, FMEA plan, distrobox test setup 2026-06-06 00:03:03 +08:00
.gitlab-ci.yml ci: Add CI 2025-01-25 22:48:05 +01:00
AGENTS.md Add tab management tools: renamable tabs, duplicate, close others 2026-06-05 15:54:50 +08:00
BACKLOG.md docs: crash warning, ISSUES.md, session logging + runtime display plans, comparison table 2026-06-05 23:53:45 +08:00
COPYING Go GPL3+ 2010-08-10 14:29:33 +02:00
COPYING.GFDL appdata: Add GFDL option 2018-03-03 20:28:28 +01:00
FMEA.md feat: crash handler, FMEA plan, distrobox test setup 2026-06-06 00:03:03 +08:00
gnome-terminal.doap DOAP: Remove defunct mailing list; add Discourse 2023-09-15 03:23:34 +02:00
install-prereqs.sh test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
install.sh test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
ISSUES.md docs: crash warning, ISSUES.md, session logging + runtime display plans, comparison table 2026-06-05 23:53:45 +08:00
Makefile.meson build: Add dist script 2021-02-26 16:52:30 +01:00
meson.build Rebrand to cf-gnome-terminal (Comfac) 2026-06-05 16:10:02 +08:00
meson_changelog.sh test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
meson_options.txt build: Add comment to "dbg" for parity with VTE 2024-02-19 09:07:07 +01:00
PROGRESS.md test: h5 crash-test logs, FMEA script and meson/install fixes 2026-07-23 21:49:32 +08:00
README.md docs: crash warning, ISSUES.md, session logging + runtime display plans, comparison table 2026-06-05 23:53:45 +08:00
reproducible-manifest.md reproducible-manifest.md: re-fetch instructions for gitignored replaceable assets (gen-reproducible-manifest.sh 260829) 2026-08-29 16:01:51 +08:00

GNOME Terminal — Management Tools Fork

This is a fork of upstream GNOME Terminal with added tab management tools:

  • Renamable tabs — right-click a tab → "Set Title…"
  • Duplicate tab — right-click a tab → "Duplicate Terminal"
  • Close other tabs — right-click a tab → "Close Other Terminals"

Rebranded as cf-gnome-terminal (Comfac Global Group) — installs alongside upstream GNOME Terminal without conflicts.
Alias: cgt
Default launch shortcut: Ctrl+Alt+Y
Upstream: https://gitlab.gnome.org/GNOME/gnome-terminal
Fork mirror: https://git.comfac-it.net/justin/gnome-terminal


⚠️ STABILITY WARNING — DO NOT USE IN PRODUCTION

cf-gnome-terminal is currently unstable and will crash.

  • Crashes occur frequently during normal use.
  • A crash is guaranteed (100% reproducible) after any terminal session ends — the application does not survive session completion.
  • Do not rely on cf-gnome-terminal for any critical work until ISS-001 (post-session crash) is resolved.

See ISSUES.md for full details, reproduction steps, and investigation status.
Use upstream GNOME Terminal (gnome-terminal) as your daily driver until this is fixed.


GNOME Terminal vs cf-gnome-terminal

Feature GNOME Terminal (upstream) cf-gnome-terminal (this fork)
App ID / binary org.gnome.Terminal / gnome-terminal com.comfacit.CFGnomeTerminal / cf-gnome-terminal (cgt)
Global shortcut Ctrl+Alt+T (distro default) Ctrl+Alt+Y
Installs alongside upstream No conflicts — separate app ID and binary name
Renamable tabs Right-click → "Set Title…"
Duplicate tab Right-click → "Duplicate Terminal"
Close other tabs Right-click → "Close Other Terminals"
Session logging (auto log to file) 🟡 Planned — ISS-002 / BACKLOG.md
Runtime display in tab label 🟡 Planned — ISS-003 / BACKLOG.md
Agent alert / human-in-the-loop 🟡 Planned — BACKLOG.md
Numbered instances + notification links 🟡 Planned — BACKLOG.md
Webhook / orchestration API 🟡 Planned — BACKLOG.md
Vector DB export (scrollback → ChromaDB) 🟡 Planned — BACKLOG.md
VTE version System (0.76.x on Ubuntu 24.04) Bundled VTE 0.85.0
Stability Stable ⚠️ Crashes frequently; 100% crash on session end (ISS-001)
Recommended for daily use Yes Not until ISS-001 is resolved

Summary: cf-gnome-terminal adds tab management and is the foundation for agent-oriented terminal features, but it is currently unusable as a daily driver due to ISS-001. Use upstream GNOME Terminal (gnome-terminal) for all real work until the crash is fixed.


Quick Install (Ubuntu 24.04)

# 1. Install prerequisites (one-time)
bash install-prereqs.sh

# 2. Build and install cf-gnome-terminal
bash install.sh

Launch: cf-gnome-terminal or cgt or press Ctrl+Alt+Y


Prerequisites

This fork tracks GNOME Terminal 3.97.1 (master), which requires a newer VTE than Ubuntu 24.04 ships. The build compiles a bundled VTE subproject, so the dependency list is longer than a typical stable-branch build.

Ubuntu 24.04 / Debian

Run install-prereqs.sh to install everything automatically, or install manually:

sudo apt-get update
sudo apt-get install -y \
    build-essential \
    gcc-14 g++-14 \
    libvte-2.91-gtk4-dev \
    liblz4-dev \
    libadwaita-1-dev \
    gsettings-desktop-schemas-dev \
    xsltproc \
    itstool \
    docbook-xsl \
    libsystemd-dev \
    patchelf \
    git \
    pkg-config

Why each package is needed:

Package Purpose
build-essential C/C++ compiler toolchain
gcc-14 / g++-14 VTE master uses C++23 std::out_ptr; GCC 13 (Ubuntu default) does not support it
libvte-2.91-gtk4-dev System VTE headers (meson checks for it before falling back to subproject)
liblz4-dev VTE subproject compression dependency
libadwaita-1-dev GNOME Terminal's modern UI widgets
gsettings-desktop-schemas-dev GSettings schema .pc file for meson
xsltproc Man-page generation from DocBook XML
itstool Translation merging into XML data files
docbook-xsl Local XSL stylesheets so xsltproc works offline
libsystemd-dev VTE subproject systemd integration
patchelf Sets RUNPATH on binaries so the bundled VTE is found at runtime

Meson is installed via pipx (Ubuntu 24.04 blocks pip install --user via PEP 668). install-prereqs.sh handles this automatically.


GNOME Terminal

CI status

pipeline status

coverage report

Releases

Latest Release

Tarballs for newer releases are available from the package registry and new and old release are also available on download.gnome.org.

Source code

To get the source code, use

$ git clone https://gitlab.gnome.org/GNOME/gnome-terminal

Building from source

You will most likely need to also build vte from source; see https://gitlab.gnome.org/GNOME/vte/-/blob/master/README.md .

Start by installing the build dependencies, and a C++ compiler.

For fedora and related distributions, use

sudo dnf build-dep vte291-gtk4 gnome-terminal
sudo dnf install g++

while for debian and related distributions, use

sudo apt-get build-dep libvte-2.91-0 gnome-terminal
sudo apt-get install g++

First build vte according to its own instructions. Then:

$ # Get the source code
$ git clone https://gitlab.gnome.org/GNOME/gnome-terminal
$
$ # Change to the toplevel directory
$ cd gnome-terminal
$
$ # Run the configure script (choose an appropriate path instead of "/some/where"!)
$ # Don't forget to make sure that pkg-config can find your self-build vte!
$ # e.g. by doing:
$ # export PKG_CONFIG_PATH=/some/where/lib64/pkg-config:$PKG_CONFIG_PATH
$ #
$ # If you compiled gnome-shell into the same prefix, you can omit disabling
$ # the search provider.
$ #
$ meson _build --prefix=/some/where -Dsearch_provider=false
$
$ # Build
$ ninja -C _build
$
$ # Install
$ ninja -C _build install
  • By default, GNOME Terminal will install under /usr/local, which is not usually the right choice. You can customize the prefix directory by --prefix option, e.g. if you want to install GNOME-TERMINAL under ~/foobar, you should run meson _build --prefix=$HOME/foobar. If you already run the configure script before, you should also pass --reconfigure option to it.

  • You may need to execute ninja -C _build install as root (i.e. sudo ninja -C _build install) if installing to system directories. Use a user-writable directory as --prefix instead to avoid that.

  • Since GNOME Terminal uses a D-Bus activated server, you cannot simply run the self-built gnome-terminal directly. Instead, you need to start the new gnome-terminal-server directly using

$ ./_build/src/gnome-terminal-server --app-id test.Terminal &

and then you have 10s time to open a window in that server using

$ ./_build/src/gnome-terminal --app-id test.Terminal

Also see https://wiki.gnome.org/Apps/Terminal/Debugging for more information.

Debugging

After installing GNOME-TERMINAL with -Ddbg=true flag, you can use GNOME_TERMINAL_DEBUG variable to control GNOME-TERMINAL to print out the debug information

$ GNOME_TERMINAL_DEBUG=selection ./_build/src/gnome-terminal-server [...]

# Or, you can mixup with multiple logging level
$ GNOME_TERMINAL_DEBUG=selection,draw,cell ./_build/src/gnome-terminal-server [...]

$ Or, you can use `all` to print out all logging message
$ GNOME_TERMINAL_DEBUG=all ./_build/src/gnome-terminal-server [...]

For logging level information, please refer to enum TerminalDebugFlags.

Contributing

Bugs should be filed here: https://gitlab.gnome.org/GNOME/gnome-terminal/issues/ Please note that this is a bug tracker to be used for developers of GNOME Terminal, and contributors of code, documentation, and translations to GNOME Terminal, and not a support forum.

If you are an end user, always file bugs in your distribution's bug tracker, or use their support forums.

If you want to provide a patch, please attach them to an issue in GNOME GitLab, in the format output by the git format-patch command.