← All Articles

Getting Started with IMTerm on Linux

IMTerm is a browser-based terminal emulator that supports TN5250E (AS/400 / IBM i), TN3270E (z/OS mainframe), and VT220/SSH connections. Unlike traditional desktop terminal emulators, IMTerm is a single Go binary that serves a web UI - your users connect with any modern browser, with no client software to install or maintain. This guide walks you through installation, basic configuration, and production deployment on Linux.


What You Need

  • Linux x86_64 (RHEL, Fedora, Ubuntu, Debian, or any distribution with kernel 4.14+)
  • 512 MB RAM for server mode; 256 MB for local/demo mode
  • 50 MB disk for the binary and static assets
  • For TN3270E (z/OS) connections: s3270 in PATH (dnf install x3270-text or apt-get install x3270)
  • A modern browser (Chrome, Firefox, Edge, or Safari) for the web UI

Step 1: Download IMTerm

Contact Infomanta sales at sales@infomanta.com to request the binary for your platform. You will receive one of:

  • imterm - static Linux x86_64 binary (tarball or direct)
  • imterm-*.rpm - for Fedora / RHEL / SLES
  • imterm-*.deb - for Ubuntu / Debian
  • imterm.AppImage - universal Linux, no install required

For RPM-based systems:

sudo dnf install imterm-2.0.1-1.x86_64.rpm

For DEB-based systems:

sudo dpkg -i imterm_2.0.1_amd64.deb

For the tarball:

tar -xzf imterm-2.0.1-linux-amd64.tar.gz
sudo mv imterm /usr/local/bin/
chmod +x /usr/local/bin/imterm

Verify the installation:

imterm --version
# IMTerm v2.0.1 (abc1234) built 2026-06-27 with go1.22.4

Step 2: Run in Local Mode

Local mode is the fastest way to see IMTerm in action. It binds to 127.0.0.1 only and opens your default browser automatically:

imterm --local

Your browser opens to http://127.0.0.1:8080. You will see the IMTerm login screen:

IMTerm login screen

The default admin credentials for local mode are set via environment variables:

IMTERM_ADMIN_USER=admin IMTERM_ADMIN_PASS=changeme imterm --local

After logging in, click "New Connection" to open the connection dialog.


Step 3: Connect to Your First AS/400

Click "New Connection" and fill in the TN5250E profile:

New connection dialog

Field Value
Name My AS/400
Protocol TN5250E
Host as400.example.com
Port 23 (or 992 for TLS)
CCSID CP424 (Hebrew New) or CP037 (US English)
Terminal Type IBM-3179-2 (24x80) or IBM-3477-FC (27x132)

Click "Connect". For z/OS mainframe connections, select TN3270E instead - this requires s3270 in your PATH:

# Fedora/RHEL
sudo dnf install x3270-text

# Ubuntu/Debian
sudo apt-get install x3270

Step 4: Deploy in Server Mode

For a production deployment where multiple users share one IMTerm server, run in server mode:

imterm --addr 0.0.0.0:8080 --data-dir /var/lib/imterm

All users open http://your-server:8080 in their browser - no installation on client machines.

The --data-dir flag sets where IMTerm stores user accounts, audit logs, and session recordings. Use a persistent path.


Step 5: Configure with config.yaml

Generate an annotated sample configuration:

imterm --generate-config > /etc/imterm/config.yaml

Edit the key settings:

# /etc/imterm/config.yaml

# Listen address for the HTTP server.
addr: "0.0.0.0:8080"

# Data directory: users, audit log, recordings.
data_dir: "/var/lib/imterm"

# Authentication mode: local | ldap | oidc | saml | kerberos
auth:
  mode: local

# TLS - strongly recommended in production.
# Alternatively, terminate TLS at nginx (recommended).
tls:
  cert: ""    # path to PEM certificate, e.g. /etc/imterm/tls.crt
  key: ""     # path to PEM private key,  e.g. /etc/imterm/tls.key

# Session limits.
max_sessions: 0    # 0 = unlimited (license enforces the actual cap)

# Idle timeout - disconnect inactive sessions automatically.
session_idle_timeout: "30m"

# Audit log.
audit:
  rotate: daily
  max_size_mb: 100
  keep_days: 365

All config keys can be overridden with environment variables using the prefix IMTERM_. For example:

export IMTERM_AUTH_MODE=ldap
export IMTERM_DATA_DIR=/mnt/nfs/imterm

Step 6: Set Up systemd Service

Generate a ready-to-use systemd unit file:

imterm --generate-systemd | sudo tee /etc/systemd/system/imterm.service

The generated unit file looks like this:

[Unit]
Description=IMTerm Terminal Emulator
After=network.target

[Service]
Type=simple
User=imterm
Group=imterm
ExecStart=/usr/local/bin/imterm --config /etc/imterm/config.yaml
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=imterm
# Environment overrides (uncomment and set as needed):
# Environment=IMTERM_ADMIN_USER=admin
# Environment=IMTERM_ADMIN_PASS=changeme

[Install]
WantedBy=multi-user.target

Create the service user and enable the service:

# Create a dedicated service user
sudo useradd --system --no-create-home --shell /sbin/nologin imterm

# Create data and config directories
sudo mkdir -p /var/lib/imterm /etc/imterm
sudo chown imterm:imterm /var/lib/imterm

# Copy your config
sudo cp config.yaml /etc/imterm/config.yaml

# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable imterm
sudo systemctl start imterm
sudo systemctl status imterm

Running IMTerm behind nginx gives you TLS termination, HTTP/2, and WebSocket upgrade in one place:

# /etc/nginx/conf.d/imterm.conf
server {
    listen 443 ssl http2;
    server_name imterm.example.com;

    ssl_certificate     /etc/nginx/ssl/imterm.crt;
    ssl_certificate_key /etc/nginx/ssl/imterm.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600s;
    }
}

The Upgrade and Connection headers are essential - without them, WebSocket connections (which power the live terminal) will not work.

Reload nginx:

sudo nginx -t && sudo systemctl reload nginx

Step 8: Create the First Admin User

IMTerm creates the initial admin account from environment variables on first run. For subsequent users, use the CLI:

# Add a regular user
imterm user add --name alice --role user

# Add an admin
imterm user add --name bob --role admin

# List all users
imterm user list

# Reset a password
imterm user passwd --name alice

You can also manage users from the web UI at /admin (Admin role required).


Step 9: Test the Deployment

Open your browser to https://imterm.example.com. Log in with your admin credentials.

Create a connection profile for your AS/400. After connecting, you should see the AS/400 sign-on screen:

AS/400 sign-on screen

Sign on and navigate to the main menu:

AS/400 main menu

If you see garbled characters on a Hebrew AS/400, check the CCSID setting in your connection profile (CP424 for Hebrew New, CP803 for Hebrew Old).


Verification Checklist

  • [ ] imterm --version shows v2.0.1
  • [ ] Browser connects to login page
  • [ ] Admin login works
  • [ ] Terminal session connects and displays correctly
  • [ ] Audit log is being written at /var/lib/imterm/audit.jsonl
  • [ ] systemd service restarts on failure (systemctl kill imterm then check systemctl status)

Next Steps

  • SSO integration - Connect IMTerm to your Active Directory via LDAP or Kerberos SPNEGO. See Article 7: SSO and Kerberos Setup Guide.
  • Hebrew / BiDi - If your AS/400 uses Hebrew, see Article 3: Hebrew and BiDi Setup Guide.
  • Enterprise printing - Set up SCS-to-PDF print sessions. See Article 6: Enterprise Printing.
  • Multi-server deployment - Scale to 2000+ concurrent sessions. See Article 9: Multi-Server Deployment.
  • Screen modernization - Turn green screens into web forms instantly. See Article 4: Screen-to-HTML Modernization.