main
Replaced the SSH library + IO thread + intermediate PTY bridge with vte_terminal_spawn_sync(). This eliminates the broken terminal behavior (backspace, Ctrl+C, copy/paste, bash completion) caused by the intermediate PTY with no process on the slave side. - SshTerminal now spawns 'ssh' as a VTE subprocess - Removed libssh dependency from terminal (still used for key validation) - Removed IO thread, manual PTY creation, and thread synchronization - VTE now handles all terminal I/O, line discipline, resize, etc. - Password saved: uses sshpass -e with SSHPASS env var if available - Password not saved: ssh prompts interactively in the terminal - Removed show_password_dialog (no longer needed) - Simplified connect flow in ssh_client.cpp
x3-ssh
A GTK3-based SSH client with a tabbed terminal interface, server sidebar, notifications, and SSH key storage.
Features
- Tabbed terminal - Multiple SSH sessions in tabs
- Server sidebar - Saved servers in a sidebar, double-click to connect, right-click for Edit/Delete
- Quick connect - Connect directly via host/user/port fields in the toolbar
- Password storage - Optionally save passwords with servers (stored in config file)
- SSH key management - Generate, import, and manage SSH keys
- Notifications - Animated notification bar for status messages
- VTE terminal - Full terminal emulation with 256 color support
- Resizable pty - Terminal auto-resizes the remote pty on window resize
- System integration -
.desktopfile and icon for application menu entry
Dependencies
- GTK+ 3.0 (>= 3.24)
- VTE 2.91 (>= 0.50)
- libssh (>= 0.9)
- autotools / autoconf / automake / libtool
- pkg-config
- g++ with C++17 support
Building
# Install dependencies (Debian/Ubuntu)
sudo apt install libgtk-3-dev libvte-2.91-dev libssh-dev \
autoconf automake libtool pkg-config
# Build
mkdir -p build-aux
autoreconf -fi
./configure
make
# Install (installs binary, .desktop file, and icon system-wide)
sudo make install
Uninstall
sudo make uninstall
Configuration
Server configurations are stored in:
~/.config/sshclient/servers.conf
SSH keys are stored in:
~/.config/sshclient/keys.conf
~/.config/sshclient/keys/
Usage
- Start the application:
x3-ssh - Server Sidebar: Saved servers appear in the left sidebar
- Double-click to connect
- Right-click for context menu (Connect / Edit / Delete)
- Click
+to add a new server
- Quick Connect: Enter host, user, and port in the toolbar, click "Connect"
- SSH Keys: Click "Keys" in the toolbar to generate or import SSH keys
- Tabs: Click "+ Tab" for a new empty tab, "Close Tab" to close the current one
Server Dialog Fields
| Field | Description |
|---|---|
| Name | Display name for the server |
| Host | Hostname or IP address |
| User | SSH username |
| Port | SSH port (default: 22) |
| Password | Optional, can be saved |
| Save password | Checkbox to store password in config |
| SSH Key | Optional key for public key authentication |
Notifications
The notification bar at the top shows status messages:
Server saved: <name>- when a server config is savedServer connected: <user>@<host>:<port>- on successful connectionServer disconnected- when disconnectingServer removed: <name>- when a server is deletedKey generated: <name>/Key imported: <name>/Key deleted: <name>Failed to connect to <host>- on connection failure (red)
Notifications auto-hide after 4 seconds.
Layout
┌────────────────────────────────────────────────────┐
│ [Notification bar - auto-hiding] │
├────────────────────────────────────────────────────┤
│ [Server▼] [host___] [user___] [port] [Connect] ...│
├───────────┬────────────────────────────────────────┤
│ Servers │ [Tab: MyServer] [Tab: Prod] [+] │
│ +─────── │ │
│ MyServer │ user@host:~$ │
│ root@h:22 │ │
│ │ │
│ Prod │ │
│ admin@p:22│ │
├───────────┴────────────────────────────────────────┤
│ Connected to root@host:22 │
└────────────────────────────────────────────────────┘
Right-click on a server in the sidebar:
┌──────────┐
│ Connect │
│ Edit │
│ Delete │
└──────────┘
License
MIT
Description
GTK3 SSH client with tabbed terminal, server management and SSH key storage
564 KiB
Languages
Makefile
48.9%
Shell
31.1%
C++
19.9%
M4
0.1%