feat: initial x3-ssh client

- GTK3 GUI with VTE terminal emulation
- Tabbed SSH sessions
- Server management (add/edit/remove)
- SSH key management (generate/import/delete)
- Quick connect bar
- libssh for SSH connections
- autotools build system (configure && make)
This commit is contained in:
x3
2026-09-07 14:50:20 +00:00
commit 77f9568cb1
15 changed files with 1476 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
#pragma once
#include <gtk/gtk.h>
#include <vte/vte.h>
#include <libssh/libssh.h>
#include <atomic>
#include <string>
#include <functional>
class SshTerminal {
public:
SshTerminal();
~SshTerminal();
bool connect(const std::string& host, int port, const std::string& user,
const std::string& keyfile, const std::string& password);
void disconnect();
bool is_connected() const { return connected_; }
GtkWidget* widget() const { return GTK_WIDGET(vte_box_); }
const std::string& server_name() const { return server_name_; }
void set_server_name(const std::string& name) { server_name_ = name; }
std::function<void(bool, const std::string&)> on_status_change;
private:
void cleanup();
static gpointer io_thread_func(gpointer data);
static void on_size_changed(VteTerminal* term, guint cols, guint rows, gpointer data);
GtkWidget* vte_box_;
VteTerminal* terminal_;
ssh_session session_;
ssh_channel channel_;
int pty_master_;
int pty_slave_;
std::atomic<bool> running_;
std::atomic<bool> connected_;
GThread* thread_;
std::string server_name_;
};