| .gitlab-ci | ||
| crash-logs | ||
| data | ||
| help | ||
| m4 | ||
| man | ||
| po | ||
| scripts | ||
| src | ||
| subprojects | ||
| .dir-locals.el | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| AGENTS.md | ||
| BACKLOG.md | ||
| COPYING | ||
| COPYING.GFDL | ||
| FMEA.md | ||
| gnome-terminal.doap | ||
| install-prereqs.sh | ||
| install.sh | ||
| ISSUES.md | ||
| Makefile.meson | ||
| meson.build | ||
| meson_changelog.sh | ||
| meson_options.txt | ||
| PROGRESS.md | ||
| README.md | ||
| reproducible-manifest.md | ||
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
Releases
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--prefixoption, e.g. if you want to install GNOME-TERMINAL under~/foobar, you should runmeson _build --prefix=$HOME/foobar. If you already run the configure script before, you should also pass--reconfigureoption to it. -
You may need to execute
ninja -C _build installas root (i.e.sudo ninja -C _build install) if installing to system directories. Use a user-writable directory as--prefixinstead 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-serverdirectly 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.