Features

Windows apps, as native Linux citizens

The full picture — from per-app RemoteApp windows and URL-scheme link handling to the bidirectional "Open with…" bridge, peripherals, multi-session RDP, and self-healing operations.

Seamless app windows

RemoteApp (RAIL), not a desktop

Each Windows app renders as its own native Linux window — no full-screen Windows desktop. Drop into a full desktop only when you actually want one (winpodx app run desktop).

Real taskbar identity

Per-app taskbar icons via WM_CLASS matching (/wm-class:<stem> + StartupWMClass), so each window pins and alt-tabs like a first-class Linux app.

Bidirectional file associations

Double-click a .docx in your file manager and Word opens. Open a second file for an app that's already running and it's delivered into the live session — mapped to its \\tsclient path and opened in place — instead of being silently dropped. The reverse works too — see below. Open with… also works on desktops that launch with a stripped PATH (e.g. Deepin), since entries embed winpodx's absolute path.

Links open the right Windows app

Click a mailto: link and Outlook opens; app schemes like slack:, vnc:, zoommtg: route to the right Windows app automatically — every scheme an app registers is harvested during discovery and turned into a Linux x-scheme-handler. Web schemes (http:/https:) are registered too, but never silently made your default — you opt in. A shared denylist + sanitizer blocks dangerous schemes (file:, javascript:, data:, …) at both registration and launch.

Folder-grouped app menu

Windows apps land under a single WinPodX menu group, mirroring the Start Menu's own folder hierarchy as nested sub-groups instead of scattering 50+ entries across native categories like Office and Graphics. (GNOME flattens nested menus, so it shows them as one group.) Menu search still finds each app by name.

Multi-session RDP

The bundled rdprrap auto-enables up to 25 independent RDP sessions, so multiple apps run truly in parallel. RAIL prerequisites are set automatically during the unattended install.

Multi-monitor RAIL

Remote-app windows span multiple displays by default (rdp.multimon) — drag a window onto a second monitor and it keeps taking input, no dead window on the other screen.

Your keyboard layout

Set [pod] keyboard in your config and WinPodX passes it straight to FreeRDP (/kbd:layout), so non-US layouts type correctly in every Windows app.

Reverse-open — Linux apps inside Windows

In the Windows "Open with…" menu

Your Linux apps appear in the Windows guest's right-click "Open with…" menu by default, with correct per-app icons in both the short menu and the long "Choose another app" dialog.

Round-trips to the host

Pick a Linux app inside Windows and the file open round-trips back to the host's xdg-open. WinPodX auto-discovers host-side Linux apps and their MIME associations from freedesktop standards.

Windows-side files too

Not just your shared home — the guest C: drive is shared over SMB and mounted with kio-fuse, so the Linux app opens the real guest file and edits save straight back (KDE; needs kio-fuse).

Manageable

Tune the allow/deny lists via winpodx host-open or the GUI Settings panel.

Zero-config launch & discovery

First click provisions everything

Config, container, and desktop entries are created on the first app launch — no manual VM setup.

Auto-discovery

By default WinPodX registers only the apps your Windows Start Menu shows, grouped into matching folder sub-groups, each with its real icon. Set desktop.full_app_scan (CLI or a Settings checkbox) to also scan the registry App Paths, all UWP/MSIX, Chocolatey and Scoop. Rescan any time with winpodx app refresh or the GUI Refresh button.

Multi-backend

Podman (default), Docker, or a manual RDP endpoint — pick at setup.

Thin AppImage

The AppImage is a lean build — Python, Qt, and the FreeRDP client only. It uses the host's podman / docker instead of bundling the whole container stack, so it stays small and plays nicely with rootless setups.

Peripherals & sharing

On by default

  • Clipboard — bidirectional text + images
  • Sound — RDP audio streaming
  • Printers — Linux printers shared to Windows
  • Home directory — shared as \\tsclient\home

Storage & devices

  • USB drives shared at \\tsclient\media — the Windows desktop shortcut always resolves
  • Drives plugged in mid-session resolve, subfolders work
  • USB / PCI device passthrough (CLI, GUI Devices tab, tray switcher) — USB hot-plugs live
  • Smart DPI scaling from GNOME / KDE / Sway / Hyprland / Cinnamon
  • Put the Windows VM on a roomier partition with --storage-dir, or install from a local ISO with --win-iso

Automation, resilience & security

Keeps itself healthy

  • Auto suspend / resume — pauses when idle, resumes on launch
  • Opt-in idle auto-stop — fully stops the VM and frees its RAM
  • Optional pod auto-start on login
  • UNRESPONSIVE → recover: self-heals a stalled RDP guest
  • Windows disk auto-grows when C: fills, bounded by host space

Secure & private

  • Password auto-rotation — 20-char, 7-day cycle, atomic rollback
  • Windows debloat: telemetry, ads, Cortana off by default
  • FreeRDP extra_flags allowlist (regex-validated)
  • No WinPodX telemetry — ever

Operations

  • winpodx doctor — deps / pod / RDP / agent / disk health
  • --json, --quick, and --fix auto-remediation
  • Guest sync after a host upgrade; offline / air-gapped install
  • One-line uninstall (keeps VM data unless --purge)

Polish

  • Host-adaptive Windows-on-KVM tuning profile
  • Time sync after host sleep/wake
  • Multilingual UI (en / ko / zh / ja / de / fr / it)
  • Start-menu Qt6 GUI: Dashboard (live Pod / RAM / CPU / disk) · All apps · Devices · Settings + tray

Deep dives in the docs →