Shift from mstsc without shifting your security expectations.
Current release: 0.5.0
RDPShift is a profile-free KDE launcher for XFreeRDP 3, built for Windows administrators moving their daily work to Debian. It keeps the familiar “enter a computer and connect” workflow without building a recoverable list of your infrastructure or retaining credentials.
RDPShift supports Debian 13 with KDE Plasma and Wayland.
| Tool | Familiar starting point | Debian engine |
|---|---|---|
| RDPShift | An mstsc-style “enter a computer and connect” workflow |
FreeRDP |
| SSHShift | Windows key → PuTTY → Enter → host → Enter, made native to KDE |
OpenSSH + Konsole |
| MapShift | A familiar “map network drive” path into KDE applications | KDE KIO SMB + KIO-FUSE |
| ServiceShift | A services.msc-style overview with familiar service controls |
systemd + PolicyKit |
| TaskShift | A Task Scheduler-style overview with safe schedule editing | systemd timers + PolicyKit |
FreeRDP's normal trust-on-first-use store retains complete PEM certificates. Certificates can contain hostnames in their subject or Subject Alternative Name fields. RDPShift instead keeps an opaque host tag and an encrypted SHA-256 certificate fingerprint.
RDPShift does not bundle its own RDP implementation. It launches the XFreeRDP
package maintained by Debian, so normal apt upgrades deliver FreeRDP security
and bug fixes through the same trusted update path as the rest of the system.
There is no separate full client, private protocol copy, or extra updater that
can quietly fall behind.
The small wrapper may occasionally need a compatibility or interface update, but the security-sensitive RDP engine remains Debian's package—not frozen inside RDPShift.
- No connection profiles, recent-host list, saved usernames, or saved passwords.
- No hostname in FreeRDP's process arguments: connection settings are passed through an anonymous file descriptor.
- No persistent PEM certificate or plaintext certificate fingerprint.
- First use displays the certificate fingerprint for explicit approval.
- An unchanged certificate connects silently.
- A changed certificate displays both fingerprints and requires explicit replacement approval.
- The real FreeRDP session is pinned to the approved fingerprint and configured to deny any different certificate.
- Certificate checking and Windows session startup display clear progress messages instead of leaving an unexplained delay.
- A native Qt 6 credential dialog presents Username, Password, then optional Domain. Credentials are sent through the anonymous descriptor and discarded.
- Windowed sessions explicitly disable relative mouse input and mouse grabbing to avoid pointer drift.
- The session uses XFreeRDP's normal decorated X11 window under XWayland. Its close button disconnects the client while leaving the Windows session and its running applications intact.
- The connection window has a collapsed Advanced options section for initial resolution, full-screen mode, text clipboard sharing, and explicitly opted-in clipboard file transfer. These choices reset on every launch.
- FreeRDP configuration, cache, logs, and incidental state are isolated under
/run/user/$UID, which is normally tmpfs, then deleted on exit.
The persistent database contains:
HMAC-SHA-256(secret, normalized hostname + port)as its lookup key;- an AES-256-GCM-encrypted certificate fingerprint as its value.
The random secret is stored in the user's local KDE Wallet under
RDPShift/hostname-hmac-key. Trust records are stored in
$XDG_DATA_HOME/rdp-shift/trust.json, defaulting to
~/.local/share/rdp-shift/trust.json.
Install the runtime dependencies:
sudo apt install freerdp3-x11 python3-dbus python3-cryptography python3-pyqt6Then install RDPShift for the current user:
./install.shThe application appears as RDPShift in Plasma's application menu. The
installer defaults to ~/.local; set PREFIX to choose another user prefix.
To uninstall the launcher:
./uninstall.shUninstalling deliberately preserves the encrypted trust database and KDE Wallet key so reinstalling does not silently discard certificate-change protection.
Text clipboard redirection is enabled, while clipboard file transfer is disabled. Advanced options can disable the clipboard entirely or explicitly enable clipboard file transfer for one connection. Drive, home-directory, printer, smart-card, USB, camera, and microphone redirection are not enabled by the launcher.
python3 -m unittest discover -s tests -v
python3 -m py_compile rdp-shiftThe tests cover target parsing, credential-field ordering, safe FreeRDP arguments, opaque authenticated trust storage, file permissions, tamper detection, RDP protocol negotiation, and certificate fingerprint calculation.
RDPShift prevents this launcher from retaining recoverable destination names. It cannot hide a live connection from DNS, network equipment, the destination, the operating system, or an attacker able to inspect the user's process memory or unlocked KDE Wallet. See SECURITY.md for details.
RDP gateways, server redirection, and unusual load balancers are not yet in the
tested compatibility set. Do not bypass a failure with /cert:ignore.
MIT. See LICENSE.