GUI applications in the terminal with Term.Everything❗

GUI applications in the terminal with Term.Everything❗

Do you like our work......we hire!

Never miss our publications about Open Source, big data and distributed systems, low frequency of one email every two months.

Term.Everything❗ enables the execution of GUI applications directly within the terminal environment. The functionality allows you to run applications such as Firefox from a remote server over SSH.

The application is a complete implementation of a Wayland Compositor. According to the developer’s announcement on HackerNews, approximately 80% of the code is written in TypeScript to facilitate broader developer engagement and contributions. The How I Did It! documentation page on GitHub provides a detailed explanation of the implementation method.

This becomes invaluable when you need to access services that require a graphical interface or web browser on remote servers protected by firewalls where only SSH connections are permitted.

In contrast to traditional X11 forwarding which demands a cumbersome installation of an X11 server on the remote host and relies on a complete X11 client environment locally, Term.Everything❗ offers remarkable simplicity. With just a single, compact binary download, you can achieve what previously required extensive configuration and multiple components. The solution is distributed as a self-executable AppImage binary with a compact footprint of less than 50MB (the latest version at the time of writing is 41.9MB).

Terminal

While not mandatory, it is recommended to use a terminal that supports image rendering. The visual quality of the application window is constrained by the number of rows and columns available in your terminal. Standard terminals like Gnome Terminal will work, but with limited resolution.

This presents an excellent opportunity to evaluate Ghostty, a modern terminal emulator available for both Linux and macOS.

snap install ghostty --classic

However, mouse support in Ghostty may be limited with Term.Everything. Better results have been achieved with Kitty on Linux or iTerm2 on macOS. The following commands installs and starts Kitty on Ubuntu:

apt install -y kitty
kitty

Test environment

Term.Everything❗ can be executed from a local terminal, remotely via SSH, or within a virtual machine. For demonstration purposes, we’ll use an Ubuntu image running as an Incus container.

# Create an incus container
incus --project default launch images:ubuntu/24.04 term-everything
incus --project default shell term-everything

Installation

The following steps download the self-executable AppImage binary and prepare it for use.

The AppImage requires two specific libraries. We’ll also install curl to facilitate downloading the binary.

# Install required dependencies
apt install -y curl libharfbuzz0b libfontconfig1 >/dev/null 2>&1
# Download and prepare the binary
curl -L -o term-everything https://github.com/mmulet/term.everything/releases/download/0.5.1/term.everything.mmulet.com-dont_forget_to_chmod_+x_this_file
# Make it executable
chmod u+x term-everything

Usage

To demonstrate the functionality, we’ll create a simple HTML file and open it with Firefox.

# Install targeted application
apt install -y firefox >/dev/null 2>&1
# Write a sample HTML file
echo '<h1>Hello</h1>' > test.html
# Start firefox, wait for a few seconds
./term-everything firefox test.html

To launch a GUI application, append the application command to term-everything and watch as the graphical interface appears directly in the terminal.

Firefox in terminal

Teardown

After testing, the Incus container is removed to clean up the environment.

incus --project default delete --force term-everything
Share this article

Canada - Morocco - France

We are a team of Open Source enthusiasts doing consulting in Big Data, Cloud, DevOps, Data Engineering, Data Science…

We provide our customers with accurate insights on how to leverage technologies to convert their use cases to projects in production, how to reduce their costs and increase the time to market.

If you enjoy reading our publications and have an interest in what we do, contact us and we will be thrilled to cooperate with you.

Support Ukrain