Windows Programs on Linux


Do you want to use Linux, but have to use programs like Photoshop or Office365? A Windows VM might be what you need.

You may have used or heard of VirtualBox or VMware, but the hypervisor I will use, Kernel-based Virtual Machine (KVM), is more memory efficent, smaller, better integrated with Linux and is open source. Virtualbox and VMware are easier to use as they are more straightforyouward in the VM creation process, but KVM will be important for part 2 of this blog post.

Install KVM and Virt-manager

sudo apt-get install -y virt-manager

Use dnf instead of apt-get if you’re using fedora. On Arch, use pacman -S virt-manager

Windows and VirtIO driver ISOs

Windows: https://www.microsoft.com/en-us/software-download/windows10ISO

KVM VirtIO driver: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

Create your VM!

Open Virt Manager in your app launcher and go to Edit > Preferences, and check Enable XML editing. Note: The full name in the app launcher might be Virtual Machine Manager.

You should be seeing QEMU/KVM under the name column. If you aren’t, you may need to run sudo systemctl enable --now libvirtd. Click on the add new VM as shown in the screenshot below.

Select Local install media and hit Forward

Hit Browse and Browse Local and go to where you downloaded the Windows 10 ISO.

I recommend you give Windows 10 8 GB of RAM and 4 CPU Cores.

At storage creation, give it at least 128 GB of storage.

Give the VM a name of RDPWindows (if you are going to do part 2 of this blog post). Otherwise name it anything you want. Also, make sure you tick the customize configuration before install checkbox. Hit Finish

Go to CPUs, tick Copy host configuration and hit Apply.

Go to Memory and set Current allocation to 1024 MB and Max allocation to 8192 MB. This will be useful if you want this VM running in the background and not use the full 8GB on VM startup.

Go to Boot Options and tick Start virtual machine on host boot if you want this to start up when you boot your computer. Also, check the boot order and make adjustments if needed (like ticking the CDROM box).

Go to SATA Disk 1 and set the Disk bus to VirtIO. This can make the VM faster than not using VirtIO.

Go to the NIC lower in the list and set the Device model to virtio.

Now hit Apply and Add Hardware. Go to Storage and Select or create custom storage. Hit Manage and Browse local and browse to where you downloaded the VirtIO driver ISO. Also, make sure Device type is set to CDROM device.

Hit Finish and go to Overview. Set chipset to Q35 and Firmware to UEFI. Finally hit Apply and Begin Installation.

Now hit the play button in the top left to start the VM (if it hasn’t automatically done that). If it asks you to press a key to boot from CD, click on the VM window and press a key. You should see the following after a few minutes.

Hit next and you will see the following and Windows 10 will yell at you about not finding a disk to install too. That is exactly why we downloaded the VirtIO driver ISO from earlier. Hit Load Driver and browse on the following window.

Browse to the VirtIO disk (probably under E:\) and hit ok.

Select the third from the bottom for Windows 10, or second from the bottom for 11, or the one on the bottom for 7. The other ones are for Windows Server. Hit Next

Hit Drive 0 and hit Next, it will automatically create the partitions. You should see this. This will take about 10 minutes to complete.

After Windows 10 boots into OOBE, click I don't have internet as we don’t have the drivers installed yet.

Click Continue with limited setup and create your account. It will take a few minutes to finalize. After it logs in, open File Explorer, navigate to the VirtIO drivers CD, and open virtio-win-guest-tools. Hit next to start the install

This will install all the components by default. Hit next

Reboot your Windows VM and its all ready. Just install your Windows apps.

Want to integrate Windows apps into the Linux desktop? Check out part 2.


Leave a Reply

Your email address will not be published. Required fields are marked *