v0.15.9
What's Changed
Improved
- Lazy init secret backends — only preferred backend is initialized — previously opening the Settings → Secrets tab triggered keyring queries, decryption, and even Bitwarden CLI auto-unlock for ALL backends regardless of which one was configured as preferred. Now only the
preferred_backendis initialized (decrypt + keyring load) both at startup and when opening Settings. Other backends' credentials are loaded on-demand when the user switches to them via the dropdown. Additionally,dispatch_vault_opnow passes the service account token to 1Password, server URL and GPG passphrase to Passbolt backends, which were previously created without credentials - KeePass keyring failure toast at startup — if the system keyring does not respond within 5 seconds or returns no password, a toast is shown after the main window appears: "KeePass password not loaded from keyring — re-enter it in Settings" with a clickable "Settings" button that opens the Preferences dialog directly. Previously the failure was only logged, leaving users confused when vault-based connections silently failed
- Connection wizard: ComboRow model lazy init — the auth method
ComboRowmodel is now created empty and populated only whenconfigure_for_protocol()is called, eliminating a brief flash of all 4 SSH methods during page transition animations for non-SSH protocols
Fixed
- macOS: Option key not producing composed characters in terminal — on macOS with non-US keyboard layouts (German, French, etc.),
Option+Lshould produce@(German) but was instead treated as Alt+L sending escape sequences to the PTY. Added a new "Option as Meta key" setting (Settings → Terminal → Behavior, macOS only) that defaults to off. When off, Option+key combinations produce the composed character from the active keyboard layout. When on, Option sends ESC-prefixed sequences (for vim/emacs users). The fix intercepts Option+key in GTK Capture phase before VTE's internal Alt handler, checks if GDK resolved a printable Unicode character from the macOS IMContext, and feeds it directly to the PTY (#173) - KeePass vault credentials not resolved on Flatpak after restart — when the KeePass database password was stored in the system keyring (default for Flatpak), it was not loaded at startup — only when the user opened Settings. This caused connections with
password_source = Vaultto show "Secret Backend Not Configured" or prompt for a password instead of reading it from the KDBX file. Now the keyring is queried duringAppStateinitialization, matching the existing Bitwarden credential restore flow (#170) - Crash (SIGSEGV) when opening new SSH tab or on screen lock/unlock — three crash scenarios caused by VTE use-after-free during GTK widget snapshot phase. When
close_on_clean_exitwas enabled,close_tab()was called synchronously from within VTE'schild-exitedsignal handler, destroying the widget while GTK still had a pending render scheduled for the current frame. Additionally, after SSH disconnect the VTE terminal could hold stale Pango font references that became invalid on screen lock/unlock (GPU context loss). Fix: (1) deferclose_tabviaglib::idle_add_local_onceso the tab is destroyed after the current frame completes, (2) callterminal.reset()inmark_tab_disconnectedto release stale Pango resources before the next snapshot cycle (#171) - Connection wizard: auth method label overflow — the "Method" label in the Authentication step was broken into individual characters ("M-e-t-h-od") because four radio buttons placed horizontally as an
ActionRowsuffix exceeded the available width. Replaced radio buttons withadw::ComboRowdropdown which fits any dialog width and follows GNOME HIG patterns (#169) - Telnet connection not closed when closing the tab — the
telnetprocess was not terminated when the connection tab was closed, leaving established TCP connections in ESTABLISHED state in the background. The root cause: VTE closes the PTY master fd on widget destroy, which sends SIGHUP to the child, but telnet (and some other CLI clients) does not exit on SIGHUP while a TCP session is active. Fix: store the VTE child PID afterspawn_asyncand explicitly send SIGTERM to the process group (kill(-pid, SIGTERM)) when the tab is closed. Also applies to Serial and other VTE-spawned protocols (#172) - 1Password/Passbolt credentials not passed in vault entry lookups —
retrieve_by_vault_entry_name, connection dialog password preview, and CLIsecretcommands created backend instances without service account token (1Password) or server URL and GPG passphrase (Passbolt). Custom vault entry names and CLI operations failed silently for these backends. Now all code paths pass credentials from settings consistently. Passbolt backend now accepts--userPasswordflag for GPG passphrase authentication without relying on the CLI config file - Connection wizard: redundant Method dropdown for non-SSH protocols — RDP/VNC/SPICE connections showed a ComboRow with a single "Password" option which was pointless. The method selector is now hidden for protocols that only support password authentication
Installation
Flatpak (Recommended)
flatpak install flathub io.github.totoshko88.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.15.9_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.15.9-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.15.9-x86_64.AppImage
./RustConn-0.15.9-x86_64.AppImagemacOS (Homebrew)
brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.appAll dependencies (GTK4, libadwaita, VTE, Adwaita icons) are installed automatically.
Requires macOS 13 (Ventura) or later.
OBS Repositories
Packages available at: https://build.opensuse.org/package/show/home:totoshko88:rustconn/rustconn
# Debian 13 (Trixie)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Ubuntu 24.04 LTS (Noble)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Ubuntu 26.04 LTS (Resolute)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/ /' \
| sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/Release.key \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn
# Fedora 44
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_44/home:totoshko88:rustconn.repo
sudo dnf install rustconn
# Fedora 43
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_43/home:totoshko88:rustconn.repo
sudo dnf install rustconn
# openSUSE Tumbleweed
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Tumbleweed/ rustconn
sudo zypper ref && sudo zypper in rustconn
# openSUSE Leap 16.0
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Leap_16.0/ rustconn
sudo zypper ref && sudo zypper in rustconnArch Linux (AUR)
yay -S rustconnFreeBSD (Ports)
pkg install rustconnFull installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md