Skip to content

v0.24.7

Choose a tag to compare

@github-actions github-actions released this 06 Nov 00:00
· 30 commits to main since this release

What's Changed

Added

  • The Kubernetes connection editor can pick a context from the kubeconfig — the Context field keeps its free-text entry but gains a button that lists the contexts defined in the kubeconfig the connection names (or $KUBECONFIG / ~/.kube/config when the field is empty), with the current-context marked. The list is read with serde_yaml, taking only the context names and current-context and ignoring every other kubeconfig field; a missing or unreadable file simply offers nothing to pick. (rustconn-core/src/protocol/kubernetes.rs, rustconn-core/src/protocol/mod.rs, rustconn/src/dialogs/connection/kubernetes.rs)
  • A crash from a Rust panic is now recorded to a local log, and the next launch says so — a panic writes its message, location, backtrace and the build version to $XDG_STATE_HOME/rustconn/crash-<timestamp>.log (the OS data directory where there is no state directory). The next start shows a banner with an Open Log button; once the log has opened the logs are cleared so a handled crash does not reappear (if it cannot be opened, the banner stays and a toast names the file). A panic the program survives (one caught internally, or one that only ends a background thread) is removed again on a clean exit, so the banner appears only when the previous run really did not finish. The log is owner-readable only, stays on the machine and is never sent anywhere — review it before sharing, as a panic message can contain formatted data. This catches Rust panics only; a SIGSEGV inside a C library (GTK, VTE) does not come through here. (rustconn-core/src/crash_report.rs, rustconn/src/main.rs, rustconn/src/app.rs, rustconn/src/window/mod.rs)
  • Run a saved snippet from the Command Palette, and save a terminal selection as a snippet — the palette's new ! prefix lists snippets and runs the chosen one; because the palette hangs off the main window, it always asks for confirmation first, so a snippet is never sent to the wrong terminal when a detached window or split pane holds focus (issue #315). The terminal right-click menu gains Save Selection as Snippet…, which opens the snippet editor with the selection of the terminal you right-clicked pre-filled (also in a split pane or a detached window) for you to name and trim — nothing is stored without your action. (rustconn-core/src/search/command_palette.rs, rustconn/src/dialogs/command_palette.rs, rustconn/src/dialogs/snippet.rs, rustconn/src/terminal/config.rs, rustconn/src/window/snippets.rs, rustconn/src/window/snippet_actions.rs)

Fixed

  • A "Save N Files" RDP download no longer hangs on "Downloading…" when the clipboard channel is gone, and a failed save is now shown as a toast (issue #390) — if the CLIPRDR channel was unavailable when a file-contents request was made, the request returned silently and the button sat on "Downloading…" forever, because the error was raised through the clipboard backend that no longer existed. The failure is now reported straight through the session event channel, so the batch unwinds. A batch that could not save every file also raises an error toast, not just a 3-second inline status the user could miss. (rustconn-core/src/rdp_client/client/commands.rs, rustconn/src/embedded_rdp/polling_handlers.rs)
  • Embedded RDP now locks the remote file clipboard during a copy, so a file copied in the session survives a focus change (issue #390, Fix B) — the embedded clipboard channel now advertises CAN_LOCK_CLIPDATA. When the server also supports it (Windows does), IronRDP sends a Lock PDU after the Format List Response whenever the server announces a file list, carries the clipDataId on each File Contents Request, and expires each lock on its own. Without it a server was free to drop the File Stream data the moment its clipboard changed — the "copy a file in the session, switch to another app, come back and Save" race that the earlier Fix A could not cover, because the focus-return format announce replaced the clipboard before the download even began. (rustconn-core/src/rdp_client/clipboard.rs)
  • A minimal RDP server that rejects the external client now says which client to use (issue #409) — against a screen-sharing server that implements only the rdpgfx/AVC (EGFX) capability set, such as KRDP, the external FreeRDP client advertises the full standard RDP capabilities in Demand Active and the server tears the session down during the capabilities exchange (CAPABILITIES_EXCHANGE / STATE_RUN_FAILED). That failure used to surface as a bare RDP connection failed (exit status …). It now reports that the server only speaks the embedded client's protocol and tells the user to set the connection's Client Mode to Embedded, which negotiates only the EGFX caps and connects to the same server. (rustconn/src/embedded_rdp/connection.rs, po/)

Changed

  • Importing connections with passwords no longer freezes the window — storing the imported credentials in the chosen secret backend now runs on a background task with a toast when it starts and another reporting how many were stored, instead of blocking the UI for the whole batch. The connections and groups still appear at once; only the credential storage, which is several seconds per credential for a CLI-backed backend such as Bitwarden, moves off the main thread. (An earlier fix had already stopped these passwords going to the system keyring regardless of backend; this removes the remaining freeze, W4/FC §6a.) (rustconn/src/state/sync.rs, rustconn/src/window/connection_dialogs.rs, po/)
  • Opening the Passbolt vault and the export output folder now goes through the desktop portal — both used to spawn xdg-open (or open on macOS); they now use gtk4::UriLauncher / gtk4::FileLauncher, so they let the desktop choose the handler and work inside the Flatpak sandbox. The external file manager for an sftp:// browse is deliberately left spawning directly, because it must inherit RustConn's ssh-agent socket, which a portal launch would not pass on. The now-unused open crate dependency is dropped. (rustconn/src/dialogs/settings/secrets_tab/mod.rs, rustconn/src/dialogs/export.rs, rustconn/Cargo.toml)

Dependencies

  • Updated (semver-compatible): zip 9.3.0→9.4.0. Dropped with the open crate: open 5.4.5, is-docker 0.2.0, is-wsl 0.4.0. cargo deny check advisories is clean; cargo-sources.json regenerated for the Flatpak/Flathub manifests. Bundled Flatpak FreeRDP (3.33.0) and cJSON (1.7.19) are at their latest releases, and TigerVNC, the only pinned CLI download, is current at 1.16.2.

Known Issues

  • Embedded RDP shared folders show only the first letter of their name, and a folder with a non-ASCII name (e.g. Cyrillic) is refused — since 0.24.3 the embedded client uses ironrdp-rdpdr 0.9, which announces the share name as UTF-16 as MS-RDPEFS asks, but Windows reads it as 8-bit characters. A share named Downloads therefore appears as \\tsclient\D (reported upstream for Windows 11 and Server 2022/2025), and one named Загрузки is refused by Server 2019 and 2025 with STATUS_UNSUCCESSFUL (the session continues and a toast names the folder, issue #407). The external FreeRDP client is not affected and shows both names correctly, so set the connection's Client Mode to External if you need the share name. The ASCII case is fixed upstream in IronRDP#2342 (not yet released), and a fix for non-ASCII names is proposed in IronRDP#2383 (IronRDP#2382); RustConn picks them up with the next ironrdp-rdpdr release that carries them.

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.24.7_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (.rpm from this release)

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

AppImage

chmod +x RustConn-0.24.7-x86_64.AppImage
./RustConn-0.24.7-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

Verifying your download

Every binary on this release (deb, rpm, AppImage, Flatpak) is covered two ways.

Plain checksums — download SHA256SUMS alongside the asset, then:

sha256sum -c SHA256SUMS

Signed build provenance (SLSA, via Sigstore) — proves the file was built by this
workflow from this commit:

gh attestation verify RustConn-0.24.7-x86_64.AppImage --repo totoshko88/RustConn

(The snap is signed by the Snap Store; the macOS build is delivered via the Homebrew tap.)