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_flagsallowlist (regex-validated) - No WinPodX telemetry — ever
Operations
winpodx doctor— deps / pod / RDP / agent / disk health--json,--quick, and--fixauto-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