Windows support in Qubes

Hi @unman,

Buried within those 6 pages of github projects, I think I see 8 different github projects for Windows.

GitHub - QubesOS/qubes-installer-qubes-os-windows-tools
GitHub - QubesOS/qubes-builder-windows: Qubes builder plugin for windows
GitHub - QubesOS/qubes-gui-agent-windows
GitHub - QubesOS/qubes-core-agent-windows
GitHub - QubesOS/qubes-windows-utils
GitHub - QubesOS/qubes-vmm-xen-windows-pvdrivers: Qubes component: vmm-xen-windows-pvdrivers
GitHub - QubesOS/qubes-builder-windows-cross: qubes-builder plugin for cross-compiling Windows code from Linux
GitHub - QubesOS/qubes-vmm-xen-win-pvdrivers-xeniface: Xen Windows pvdrivers: xeniface

Is that all of them, or are there more?

Do they have to be built/installed in a particular order?

Is there one all-encompasing github project, or is Windows support really fractured into a bunch of independent projects? (There’s only one “Windows support”, so having 8 separate packages in order to build QWT seems like a maintenance nightmare.)

I hope you didn’t go wading through those pages - that’s what the search
tool is for.

I think you should try to understand how the Qubes build process works,
and how the elements work together.
It isn’t that support is “fractured” but that there are different parts
to the Qubes packaging. (Compare windows to the standard Linux build.)
qubes-builder-windows will build in the right order, and create
installer.

I’m hoping you can provide a little more assistance than telling me to learn the build process. For example, where is the build process documented? Is there a URL or a README that is up to date?

1 Like

GitHub - tabit-pro/qubes-windows-tools-cross: Qubes Windows Tools build with mingw, wine and qubes-builder - this collects all the needed pieces together. Testing is greatly appreciated. I think @jevank may say few more words about it (see also comment at Windows support in Qubes - #5 by jevank).

2 Likes

I`ve added README with build instructions, hope it helps. While testing it have found incorrect submodule link, fixed now :man_facepalming:

@elliotkillick if you have R4.1 test machine we could make your amazing tool compatible with this version of QWT. Msi package instead of exe is core difference I hope.

@hackerfactor USB support is not a part of QWT project, but it almost ready for testing repos. Follow the update-status github repository.

3 Likes

Ah… you’re cross-compiling from wine! I bet the cross-compiling no longer works with Win10!

@jevank Your comment that USB support is not a part of QWT seems to contradict the documentation. The documentation at Contents/windows-tools.md at master · Qubes-Community/Contents · GitHub explicitly says that USB is supported on Win10.

I don’t know why it has such description, perhaps it is about common feature status - implemented, but not release yet.

Hi @jevank,

I don’t believe the documentation is a mistake.

With Win7, the QWT installation does provide Windows USB support. (Win7 is so old that Microsoft ended support in January 2020. But when that page was written, it did work.)

I haven’t tested Win8, but it should be like Win7. (Win8 lost mainstream support in 2018, and will be completely end-of-life in 2023.)

When Win10 first came out (2015), it was mostly backwards compatible with Win7/8. However, the 1607 update (2016) changed that and created a split between the installers. This is about the time that cross-compiling installers from Wine to Win10 stopped working. This is about the same time that you start seeing forum postings where people are complaining that Qubes USB support isn’t working in Win10.

When Microsoft ended Win7 support in 2020, people were forced to switch to Win10. This coincides with a large increase in forum complaints that QWT isn’t working for Win10.

In 2020, Wine received a major update in years to fix compatibility with Win10. I don’t know if the QWT developers are using the latest Wine or something older; but it doesn’t really matter: Win10 received a major patch (1903 in 2019) that hardened the application sandbox. While these Wine updates permit Win10 apps to run in Wine, they lack some of the sandbox requirements for making a proper installer for Win10. (Win10 to Wine mostly works. Wine to Win10 mostly fails.)

As far as I can tell, the only problem with the QWT for Win10 code is in the installer scripts. If you run the installer and then look for where it placed the new files, you will see that it failed to install any of the dll and sys files. This is because the Win7 installer no longer works under Win10. If you manually copy the DLL files to the right locations, then they work. The same goes for the Xen tools for Win10; they fail to copy required dll files during the installation.

To reiterate: I really think the problem is in the QWT installer (exe) and not in the DLL, SYS, or qrexec service executables.

I managed to get USB for thumb drives working on Win10 after manually copying dll files. However, I could not get support for generic USB devices working. I’m only manually copying two dll files; I’m certain that I’m missing other required dll and sys files. Unfortunately, there is no documentation that says what files are needed (dll, sys, exe, etc.), where they belong, or what registry changes are required.

If someone could provide the what files / where do they go / what registry changes, then I could complete the manual installation on Win10 and test whether full USB support works.

With Win7, the QWT installation does provide Windows USB support.

That is not correct. USB storage devices could be attached based on block device support not USB communication

Hi @marmarek,

I’ve tried following the instructions at GitHub - tabit-pro/qubes-windows-tools-cross: Qubes Windows Tools build with mingw, wine and qubes-builder, and step 3 appears to fail.

  1. I started with a brand new Fedora VM.
  2. Typed in step 1 (get build environment). Everything installed. (Surprisingly fast – maybe a minute for everything.)
  3. Typed in step 2 (get sources and binaries). Everything retrieved, including some binaries from archive.org that are over 12 years old. (The build process has dependencies that pre-date Win10 by five years!)
  4. Typed in step 3 (build iso). Failed. The error: sudo: unrecognized option ‘–define’.
1 Like

Check if you have “mock” package installed.

rpm -qa | grep -i mock

Nope, nothing found.

That’s the issue then. Install it. The message indeed is very unfriendly
(so to say…) in that case.

sudo dns install mock # works

Then I run step 3 to build the iso. New error:

ERROR: call ‘make install-deps’ to install missing dependencies

update README to require mock, thanks!

make install-deps
make remount

was it succesful on first step?

I went through the installation steps and managed to create the iso without problems. The resulting msi file could be installed in Windows 10 as well as in Windows 7 and, at first look behaves just like the QWT version 4.1-65 that I tested earlier this year. qrexec seems to work, too, as I could copy files from both Windows VMs to other VMs.

So there is now a working build environment for QWT based on wine. Congratulations!!! :slight_smile:

7 Likes

Thanks for testing @GWeck !
Can you confirm GUI working in Windows 7, either as (resizeable) full screen window, or individual windows? The GUI agent and its driver is the most fragile part of the build, so I’m worried that it could be misbehaving.
Also, have you installed it on a fresh Windows VM, or updated from previous QWT version?

1 Like

The GUI is working in both W7 and W10, but restricted to a few screen resolutions, just as desribed earlier in Testing Windows and QWT in R4.1: For Windows 7, screen resolution is restricted to 1920 x 1200 (my physical screen size) and 800 x 600. For Windows 10, the supported resolutions are 1920 x 1080 (HD), 1024 x 768 and 800 x 600. The GUI behaved quite normally in these resolutions - no glitches or so. W7 could be changed to seamless mode, which worked, too, but did not show the Start button.

For both systems, I used copies of the templates used in January which were prepared for QWT installation (testsigning set), but had no previous installation of QWT. In both, I installed QWT with the default configuration, i.e. the basic Xen drivers, but no Xen Disk or Network drivers. For W10, I tried with those two drivers enabled, but the installation stuck and had to be aborted.

2 Likes

For both Windows 7 and 10, the Xen Disk and Network drivers can be installed afterwards, by executing the QWT installation again and then selecting “Change”. The Windows VMs then can be started without problems and seems tto behave the same way as before. For W10 however, qvm-features gui has to be set in order to make it visible again.

In order to use seamless mode in Windows 7, some window has to be opened berfore selecting this mode, as starting an application from the Qubes XFCE menu does not work for W7 or W10. If a window is open, pressing the Windows key opens the VM’s menu, and applications can be started. Without an open Window, I have found no way to start an application in seamless mode.

Trying to change the screen resolution between the (few) supported values works for Windows 10, but leads to an unresposive VM for W7, which has to be shut down from the Qube manager.

So far, my current experiences, which are quite positve. Currenty, I see mainly 4 problem areas:

  • restriction of screen resolution to these few values
  • missing start button in Windows 7 seamless mode
  • freezing the Windows 7 VM when changing the screen resolution
  • not starting applications from the XFCE menu

I hope nothing more pops up! :slight_smile:

2 Likes