Skip to content

v0.7.4

Latest

Choose a tag to compare

@github-actions github-actions released this 23 Jun 06:53
· 11 commits to main since this release

[0.7.4] - 2026-06-23

Added

  • install.sh --storage-dir <path> (and winpodx setup --storage-path) chooses where the Windows VM lives (#646, thanks @realahmed7777). Put the VM disk + ISO on a roomier partition instead of ~/.local/share/winpodx/storage — the directory is created with the same prep as the default (chattr +C on btrfs so the raw disk doesn't fragment, SSD emulation when the target is non-rotational). Fresh installs only; relocating an existing install stays winpodx setup --migrate-storage --migrate-storage-target.
  • Fresh installs on a 24 GB+ host now default the VM to 8 GB RAM instead of 6 (#630, thanks @ismikes). Windows 11 runs noticeably smoother with 8 GB, and a host with ≥24 GB can spare it — the auto-tier that pre-fills pod.ram_gb during winpodx setup bumps the mid tier from 6 to 8 GB on those hosts (CPU sizing unchanged; ≥32 GB / ≥12-thread hosts still get the 12 GB high tier). Existing installs keep your configured value; change it any time in Settings or with winpodx config set pod.ram_gb 8.
  • install.sh --win-iso <path> installs from a local Windows ISO instead of downloading (#647, thanks @ismikes). Point the installer at a Windows ISO you already have and it's staged into the storage dir as dockur's custom.iso, so the install skips the ~5-8 GB Microsoft download — handy for repeated purge/reinstall cycles. Reflink-copied where the filesystem supports it (btrfs/xfs), so it costs no extra disk. (You could already drop a custom.iso into the storage dir by hand; this wires it to a flag and documents it in --help.)

Fixed

  • The Windows password is no longer written to the log in cleartext. The "Launching RDP" / "Relaunching RDP" log lines printed the full xfreerdp argv, which includes /p:<password>. Password tokens (/p:, /gp:) are now masked to /p:*** before logging. (Local-only logs; pre-existing — hardened during the 0.7.4 security review.)
  • The Logs tab's Status / Pod logs / Inspect buttons now use the selected container backend instead of always running podman (#658). On a Docker-backend install, the Terminal-tab diagnostics buttons shelled out podman ps / podman logs / podman inspect regardless of pod.backend, so they failed (or probed the wrong runtime) whenever podman wasn't the active backend. They now honour cfg.pod.backenddocker when Docker is selected (manual falls back to podman, where the container commands are inert). The pod-log tail's on-screen $ … echo was also corrected to print the real backend instead of a hardcoded podman.
  • Opening a second document in an already-running Windows app now works instead of silently doing nothing (#657). With an app already open (e.g. Word), launching a second file for it — a second gio launch, or right-click → Open with → the app — dropped the file: the live session was reused but the path was discarded. The file is now delivered into the running session — mapped to its \\tsclient UNC path and opened via Start-Process, sent over the guest agent with a FreeRDP RemoteApp fallback when the agent is unreachable. Best-effort: failures are logged and never block the launch.
  • Right-click → Open with a Windows app now works on desktops that launch with a stripped PATH (e.g. Deepin) (#657). Generated .desktop files used a bare Exec=winpodx …, which fails with exec: winpodx: not found when the desktop environment runs the launcher as a systemd transient unit that drops ~/.local/bin from PATH (Deepin's dde-application-manager). Launching via gio launch from a terminal worked because it inherited the shell PATH, which masked the bug. The entry now embeds winpodx's absolute path, resolved with shutil.which() at install time (falling back to the bare name when it can't be resolved).
  • A missing RDP password now fails with a clear error instead of an unanswerable prompt (#569, thanks @biskasarchaniotakis). When neither rdp.password nor rdp.askpass was set, xfreerdp fell back to an interactive password prompt that can't be answered under a GUI launch, so the launch failed only with the opaque Inappropriate ioctl for device / ERRCONNECT_CONNECT_CANCELLED. build_rdp_command now raises up front, naming the missing setting.
  • Password rotation now surfaces a rejected net user instead of reporting success (#569). The guest-side PowerShell printed password set regardless of the net user exit code, so a rejected change left the stored and actual Windows passwords out of sync while reporting rc=0 — which then shows up downstream as failed RDP auth / apps not opening. It now checks $LASTEXITCODE and exits non-zero on failure.
  • /kbd is now an allowed FreeRDP extra flag (#657). Pass a keyboard-layout override via rdp.extra_flags (e.g. /kbd:layout:0x409) to work around FreeRDP keycode-scanning warnings on some layouts.
  • The Debian/Ubuntu .deb now pulls in podman-compose, and a missing compose provider fails loudly instead of cryptically (#644, thanks @paolodongilli). On Debian 13 the .deb installed winpodx + podman but not podman-compose, so winpodx setup couldn't create the container and died downstream with no such container "winpodx-windows". podman-compose is now a package Recommends (apt installs it by default), and if no compose provider is present at setup time winpodx prints an actionable error naming the package to install per distro instead of silently skipping container creation. (The curl … install.sh path already installed it — this closes the .deb gap.)
  • The maintenance task dialog (Debloat, Grow Disk, Sync Guest, …) no longer opens cramped (#550, thanks @ismikes). The BusyDialog progress window had only a 380px minimum width and sized its height to content, so it came up around 392×139 — too small to read comfortably, most visibly on the Debloat Speed run. Given a 480×168 floor. (The picker-window size and the fast-op auto-close were already addressed in 0.7.2.)

Contributors

Thanks to @cxgreat2014 for the code contributions (PRs #657, #658), and to @ismikes (#630, #550), @realahmed7777 (#646), @paolodongilli (#644), and @biskasarchaniotakis (#569) for the reports and suggestions that drove this release.