Skip to content

v0.22.15

Choose a tag to compare

@github-actions github-actions released this 02 Oct 23:11
· 172 commits to main since this release

What's Changed

Added

  • A Copy submenu that lists only what a connection has (issue #357) — right-clicking a connection in the sidebar or in a smart folder now offers Copy ▸ with Host, Port, Address (host:port, IPv6 in brackets), Username, Password, SSH Command and one entry per custom property that has a value. An entry appears only when the connection has something to copy: a serial line shows no port, a connection whose password source is None or Prompt shows no password, and the SSH command is offered for SSH and SFTP only. The port entry shows its value, as in Port (2222), so a list of routers on different ports can be told apart without opening the editor. The SSH command is ssh [-p PORT] [-J BASTION] [user@]host, quoted for the shell, with the bastion resolved from the connection, its group and the global network settings; identity files, -o options and the startup command are deliberately left out, so pasting it never runs anything on the remote host. A bracketed IPv6 host is written without the brackets ssh rejects, and a host or username starting with - gets a -- in front, so an imported value such as -oProxyCommand=… cannot become an ssh option on paste. When no username is stored or cached, Username asks the password source (vault, variable, script, parent group) for it, as Password does. The password and Protected custom properties are cleared from the clipboard after 30 seconds, and no secret is ever shown in a menu label. The submenu slides in within the same menu and works from the keyboard (Right opens it, Left or Backspace goes back).
  • Edit Connection and Copy from a session tab (issue #357) — right-clicking a session tab now offers Edit Connection…, which opens the editor for that tab's saved connection whatever is selected in the sidebar, and a Copy section with the same entries as the sidebar's Copy submenu. Tabs with no saved connection behind them (Welcome, local shell, quick connect) do not show either. In the tab menu Copy is a labelled section rather than a submenu, because that menu is rebuilt on every right-click and a rebuilt GTK submenu leaves a duplicate page behind.
  • Sign in to the cloud again from a Zero Trust session whose credentials expired — when a Zero Trust session ends because the provider's CLI says its sign-in has expired (for example aws: [ERROR]: Your session has expired. Please reauthenticate using 'aws login'.), the bar under the terminal now reads Sign-in expired and offers Log In to AWS, Log In to Google Cloud, Log In to Azure and so on before Reconnect. The button runs the provider's own login in the same tab: aws login or aws sso login (with the connection's --profile), gcloud auth login, az login, oci session authenticate, cloudflared access login https://<host>, tsh login [<cluster>], boundary authenticate [-addr …] or hoop login. The login opens the browser, and any prompt or device code it prints can be answered in the tab. When it finishes successfully the session reconnects by itself; if it fails, the bar comes back. It runs with the same environment as the session, so under Flatpak and Snap the new token is stored where the session reads it. Automatic reconnection is not attempted for such a session, because every attempt would fail the same way until the user signs in. Only a session that fails within a minute of starting (or of its last reconnect) is checked, because after that the screen holds the remote host's output and ordinary text there, such as docker push saying "not logged in", would otherwise switch off automatic reconnection after a network drop. The command shown in the tooltip and in the tab is quoted the way it runs. Tailscale SSH and Custom Command connections are not covered: Tailscale runs its own browser check, and a custom command's CLI is not known.
  • Keyboard passthrough hands the desktop's own shortcuts to an embedded RDP or VNC session (issue #356) — with passthrough on and an embedded RDP or VNC session focused, RustConn now asks the desktop to pass Alt+Tab, the Super key, Super+number and similar shortcuts to the session, the same request an external FreeRDP window already makes. GNOME asks once whether to allow it, and Super+Esc always gives the shortcuts back. They also return when focus leaves the session or passthrough is turned off. Terminal tabs are not affected, so Alt+Tab still switches windows from an SSH session.

Changed

  • Fullscreen hides the tab bar together with the header bar (issue #354) — in fullscreen the tab bar now moves under the header bar and is hidden and revealed with it, so a session gets the whole screen. Moving the pointer to the very top edge slides both rows in over the session, without resizing it, and they slide away a moment after the pointer moves back down. They stay while a header menu or a tab's context menu is open, or while a tab is being dragged. Switching tabs shows them for about a second and a half, so a switch with Ctrl+Page Up/Down is not made blind, and F10 still opens the main menu. Leaving fullscreen puts the tab bar back above the session. Banners such as an active group broadcast stay visible as before.
  • Copy Username and Copy Password moved into the Copy submenu (issue #357) — in the sidebar and smart-folder menus they are now Copy ▸ Username and Copy ▸ Password, and they are shown only when there is something to copy. In smart folders, Edit and the copy entries now act on the right-clicked connection (see Fixed).

Fixed

  • Smart-folder menu entries act on the connection that was right-clicked, Delete included — Edit, Wake On LAN, Check if Online and Delete in a smart folder's context menu first selected the connection in the sidebar and then ran the action on the selection, but the selection is applied only once the menu has finished, so the action ran against whichever connection had been selected before, or against nothing when the row sat in a collapsed group. For Delete, the confirmation named that other connection and, once confirmed, moved it to the Trash. All four are now addressed by connection id (win.edit-connection-by-id, win.wake-on-lan-by-id, win.check-host-online-by-id, win.delete-connection-by-id), and the select-then-act menu helper is gone.
  • The Fullscreen checkmark in the main menu now matches the window (issue #354) — it was updated only when the menu entry or F11 ran, so a window put into or taken out of fullscreen by the window manager kept the old checkmark until the entry was used again. It now follows the window's actual fullscreen state, however that changed.
  • The header bar revealed in fullscreen now covers the content beneath it (issue #354) — in 0.22.14 the header that slides in at the top edge of a fullscreen window had no background of its own, so the tab bar and the session showed through it and the two rows of controls were drawn over each other. It now has the solid header-bar background and a shadow while fullscreen, and returns to its usual look when fullscreen ends.
  • Keyboard passthrough no longer lets the tab bar take Ctrl+Tab, Ctrl+Shift+Tab, Ctrl+Page Up/Down and Alt+digit (issue #356) — passthrough cleared RustConn's own shortcut table, but the tab view has a second set of built-in tab shortcuts that it never touched: Ctrl+Tab, Ctrl+Shift+Tab, Ctrl+Page Up/Down, Ctrl+Home/End, Ctrl+Shift+Page Up/Down/Home/End, Alt+1…9 and Alt+0. These are handled before the session sees the key, so with passthrough on they still switched or moved tabs instead of reaching the RDP, VNC or terminal session. Passthrough now turns them off as well, and turning passthrough off brings them back. Desktop shortcuts such as Alt+Tab and Super are covered separately (see Added).
  • The terminal scrollbar can be dragged again in a split pane (issue #358) — in a split view the scrollbar next to an SSH or local terminal only answered the mouse wheel: its slider could not be grabbed and clicking the trough did nothing, while the same terminal in its own tab worked. Each split pane has a click handler that focuses the pane, and it took the mouse press for itself whenever the press did not land on the terminal, a button, a remote-desktop surface or a web view — the scrollbar was not on that list. The handler now only notes which pane was clicked and always lets the press through, so the scrollbar, and the pane header used for dragging a pane, get the press as they do in a tab.
  • A duplicate of a favorite connection is no longer a favorite itself — Duplicate, Copy/Paste and rustconn-cli duplicate copied the whole connection, including whether it was pinned to Favorites and its place there, so the copy showed up in Favorites next to the original without anyone choosing that. All three now go through one Connection::duplicate_as in rustconn-core, which keeps every setting but leaves the copy out of Favorites and with no last-connected time. A duplicate of an entry generated by a dynamic folder is an ordinary connection, so the folder's next refresh no longer deletes it. Duplicate in the sidebar also used to carry over the original's last-connected time, which Paste and the CLI already cleared.

Documentation

  • User Guide: "Signing In Again When Cloud Credentials Expire" — a new subsection under Zero Trust Providers describes the Log In to … button: which command each provider runs, what happens when the login succeeds or fails, why the login has to run inside RustConn under Flatpak and Snap, and what is not covered (Tailscale SSH, Generic Command, and aws login under Snap, whose cache directory the aws-credentials plug does not make writable). The Zero Trust guide links to it. Session Reconnect now lists Zero Trust sessions, says the bar is at the bottom of the tab rather than the top, and names expired cloud credentials among the cases where automatic reconnect is skipped.
  • The keyboard passthrough section of the User Guide now says what passthrough does and does not capture (issue #356) — it claimed that every key combination reaches the remote session. It now lists the tab bar shortcuts that passthrough suspends, explains how desktop shortcuts reach an embedded RDP or VNC session (the one-time GNOME prompt, Super+Esc to get them back, terminals left alone), and states that a session in an external viewer window is outside RustConn's passthrough.
  • User Guide: "Copy Menu" replaces "Copy Username / Copy Password" (issue #357) — a table of every Copy entry, what it copies and when it is shown, plus the Edit Connection and Copy items of the tab menu under Tab Management. It also drops the claim that a password can only be copied after connecting once; it is resolved from the secret backend when nothing is cached.
  • User Guide: when an expired cloud sign-in is recognised, and what the copied SSH command does with IPv6 and option-like values — "Signing In Again When Cloud Credentials Expire" now says that only a session failing within its first minute is checked, and why; the Copy Menu notes that a bracketed IPv6 host is written without brackets and that a host or username starting with - is preceded by --.

Dependencies

  • Updated: libc 0.2.189 → 0.2.190, with the Flatpak and Flathub cargo-sources.json regenerated to match.
  • Held back: picky-krb stays at 0.12.4, for the reason given in 0.22.14 (0.12.5 adds a GssApiMessageError variant that the sspi pinned by IronRDP does not match).
  • Unchanged, checked: cargo deny check advisories is clean. The CLI download catalogue is current on every entry, with all version endpoints reachable (TigerVNC stays 1.16.2). The bundled Flatpak sources and runtime are as in 0.22.14 — FreeRDP 3.32.1 on GNOME runtime 50 — and Snap stays on core24 with the gnome-46-2404 extension (issue #174).

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

Fedora (.rpm from this release)

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

AppImage

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