How do you put apps running in VMs into "native"-looking windows on the host like Qubes OS?

Motivation: Qubes OS uses Xen which i’m not a fan of and it’s a bit too hardware finnicky and inflexible (mainly by design) for usability in my use case.

I’ve had some success turning Debian into a VM centric experience with KVM but nothing like the seamless way Quebes does it. Things like LXC, Flatpak, Snaps, Docker and others make seamless isolation “easy” but the idea is to have the security of a full VM while still displaying the app as if it’s native like Qubes.

The plan: What i’m working on now is displaying those VM apps as if they’re native.

Does anyone know of a package or technique I should look into? I’m lost on the best way.

The best i’ve come up with:

  1. User: Launches app.
  2. Host: Launch the relevant VM if it’s not launched already and collaborate with the Guest over a communicate channel.
  3. Guest: Open an X session for the app being requested.
  4. Guest: Run the app within that X session and full screen it.
  5. Host: Use a spice compatible viewer to log into that X session.
  6. Guest: spice-agent running on the guest will match that X session’s resolution to the spice window’s size which the full screened app will match giving it a “native” windowed appearance.
  7. Guest: Detect closure of either the app or the viewer and kill the X session. Optionally shut down the VM if there’s no more apps running.

Any bits of information greatly appreciated.

1 Like

Wikimedia: Qubes running apps from different VMs inside of native-like windows:

Since this seems to be a more generic forum for Linux, I think you would probably be better off visiting the Qubes OS folks for that specific help.

1 Like

That’s what a smart person would do.

I love trying to figure out things the hard way. Often to my own demise but it’s fun regardless. I may take you up on that at some point.

Currently looking at Xephyr running in LXC as a sandboxed intermediary for X forwarding.