v0.22.5
What's Changed
Added
-
The external VNC viewer can now be chosen per connection (issue #340) — the same idea as the FreeRDP client selector, extended to VNC, the other protocol where RustConn auto-detects among several external clients. A new VNC viewer row in the VNC connection editor's Display group lets a connection force a specific installed viewer (
vncviewer,remmina,gvncviewer,xvnc4viewer,vinagre,krdc) or keep Automatic. It matters because the viewers differ in capability — TigerVNC'svncviewerhonours the encoding/quality/compression/VeNCrypt options RustConn passes, while lighter viewers ignore them. The dropdown lists only viewers present on the system; a pinned viewer that is later removed falls back to auto-detection with a log warning. Available fromrustconn-cli(--vnc-viewer NAME). Stored asvnc_viewer_overrideon the VNC config; unset means auto-detect, so existing profiles are unaffected. The other protocols with an external client (SPICE, Telnet, Serial) launch a single fixed binary with no candidate list, so a selector there would offer nothing to choose — they were deliberately left unchanged. -
The external FreeRDP client can now be chosen per connection (issue #340) — RustConn auto-detects the external FreeRDP client, and since it prefers the actively maintained SDL3 client over the deprecated wlfreerdp there was previously no way to pin a different one. A new FreeRDP client row in the RDP connection editor's Display group lets a connection force a specific installed client (
sdl-freerdp3,xfreerdp3,wlfreerdp3, …) or keep Automatic. The dropdown only lists clients actually present on the system (probing the localPATHand, under Flatpak, the host); a pinned client that is later removed falls back to auto-detection with a log warning rather than failing the connection, and a RemoteApp session still uses an X11 client since thewl*/sdl*clients cannot host RAIL. Available fromrustconn-clitoo (--rdp-freerdp-client NAME). Stored asfreerdp_client_overrideon the RDP config; unset means auto-detect, so existing profiles are unaffected. -
Dynamic resolution and smart sizing are now configurable for the external RDP client (issue #341) — the external FreeRDP client was always launched with
/dynamic-resolution, with no way to turn it off, and there was no supported way to enable smart sizing. On a legacy server that cannot do dynamic resolution (e.g. Windows 2008 R2), a fixed-resolution session stayed unreadably small on a HiDPI display and the window would not resize. Two connection options now cover this: Dynamic resolution (on by default, matching the previous behaviour) emits/dynamic-resolution; Smart sizing scales the remote framebuffer to the window and emits the flag form+smart-sizing. The two are mutually exclusive in FreeRDP, so smart sizing wins and suppresses dynamic resolution when both are set — previously a hand-written/smart-sizingcustom argument was rejected with a parse error precisely because it collided with the always-present/dynamic-resolutionand was passed in the value form FreeRDP 3.x does not accept. Both options are exposed in the RDP connection editor and inrustconn-cli(--rdp-no-dynamic-resolution/--rdp-smart-sizingonadd,--rdp-dynamic-resolution/--rdp-smart-sizingonupdate). They apply only to the external client; the embedded viewer sizes itself from its widget.
Fixed
- A TLS failure on a legacy RDP server suggested a setting that was already on (follow-up to issue #339) — when the external FreeRDP client failed the TLS handshake, the error always read "TLS certificate verification failed. Enable 'Ignore Certificate' in connection settings." — even when that setting was already enabled, which is misleading and unactionable. A legacy server (e.g. Windows 2008 R2) that only speaks the old RDP security layer surfaces the same TLS error, and switching the security layer to RDP is the real fix there. The classifier now knows the connection's current certificate setting: with the certificate already ignored it points at the legacy RDP security layer instead of telling the user to enable a toggle that is already on, and otherwise it names both the certificate toggle (by its real label, "Accept Certificate") and the RDP-security-layer option.
Changed
- The external RDP client now prefers the SDL3 FreeRDP client over the deprecated wlfreerdp (issue #340) — FreeRDP upstream has deprecated the
wlfreerdp/wlfreerdp3client in favour of its SDL3 client, and RustConn's launcher already auto-detectedsdl-freerdp3ahead ofwlfreerdp3. The informational client-detection helper (used to report which FreeRDP is installed) still listedwlfreerdp3first, so the reported client could differ from the one actually launched; its order now matches the launcher (sdl-freerdp3>sdl-freerdp>wlfreerdp3>xfreerdp3). The embedded viewer still useswlfreerdpdeliberately, since only a Wayland-native client embeds as a subsurface.
Dependencies
- Updated: thiserror 2.0.20 → 2.0.21, zerocopy 0.8.57 → 0.8.58.
Installation
Flatpak (Recommended)
flatpak install flathub io.github.totoshko88.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.22.5_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.22.5-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.22.5-x86_64.AppImage
./RustConn-0.22.5-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