Skip to content

v0.15.9

Choose a tag to compare

@github-actions github-actions released this 05 Jun 21:06
· 42 commits to main since this release

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_backend is 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_op now 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 ComboRow model is now created empty and populated only when configure_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+L should 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 = Vault to show "Secret Backend Not Configured" or prompt for a password instead of reading it from the KDBX file. Now the keyring is queried during AppState initialization, 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_exit was enabled, close_tab() was called synchronously from within VTE's child-exited signal 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) defer close_tab via glib::idle_add_local_once so the tab is destroyed after the current frame completes, (2) call terminal.reset() in mark_tab_disconnected to 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 ActionRow suffix exceeded the available width. Replaced radio buttons with adw::ComboRow dropdown which fits any dialog width and follows GNOME HIG patterns (#169)
  • Telnet connection not closed when closing the tab — the telnet process 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 after spawn_async and 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 lookupsretrieve_by_vault_entry_name, connection dialog password preview, and CLI secret commands 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 --userPassword flag 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.RustConn

Snap

sudo snap install rustconn

Debian/Ubuntu (.deb from this release)

sudo dpkg -i rustconn_0.15.9_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (.rpm from this release)

sudo dnf install rustconn-0.15.9-1.fc44.x86_64.rpm

AppImage

chmod +x RustConn-0.15.9-x86_64.AppImage
./RustConn-0.15.9-x86_64.AppImage

macOS (Homebrew)

brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.app

All 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 rustconn

Arch Linux (AUR)

yay -S rustconn

FreeBSD (Ports)

pkg install rustconn

Full installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md