Running Windows on Zorin OS: My VirtualBox Setup Guide

Oracle Virtualbox Logo

I made the switch to Zorin OS a while ago, and honestly? I haven't looked back. It’s sleek, fast, and does 99% of what I need. But then there’s that nagging 1%—that one specific piece of Windows software or that old utility that just refuses to run on Wine.

Instead of dual-booting and constantly restarting my computer (which kills my workflow), I decided to set up a virtual machine using Oracle VirtualBox. It lets me run a full version of Windows inside a window on my Zorin desktop.

It wasn't exactly "plug and play" to get it perfect, though. I had to tweak a few things to get the screen resolution right, share my files, and get my USB drives to show up. Here is exactly how I set it up.

Step 1: Installing VirtualBox (The Clean Way)

There are a few ways to install VirtualBox, but I prefer using the method that Zorin OS natively supports. It keeps things stable and easy to update.

I used the apt package manager via the terminal to make sure I grabbed everything I needed in one go. If you aren't comfortable with the terminal, you can find it in the Software store, but the terminal is faster!

I just opened my terminal (Ctrl+Alt+T) and ran this:

sudo apt update
sudo apt install virtualbox

Once that was done, I opened VirtualBox, clicked "New," and followed the prompts to create a new virtual machine using a Windows ISO I had downloaded.

Step 2: Fixing the Windows VM Startup

With the newest version of Zorin OS, which is built upon Ubuntu 24.04, I ran into an issue with a KVM conflict, giving an error to the VMX_ROOT_MODE. I didn't want to permanently turn this off, so I made a script that utilizes the command to temporarily remove it, and then launch the Windows VM. I called the script: StartWin11.sh, and then made it an executable:

#!/bin/bash

# 1. Notify the user (optional visual feedback)
notify-send "Starting Windows 11" "Clearing KVM conflicts and booting..."

# 2. Ask for admin password to unload KVM modules
# We use pkexec to get the graphical password prompt
pkexec sh -c "modprobe -r kvm_intel; modprobe -r kvm_amd; modprobe -r kvm"

# 3. Launch the VM directly without the VirtualBox Manager window
# Replace "Windows 11" with your exact VM name if different
VirtualBoxVM --startvm "Windows 11"

Step 3: Fixing the "Tiny Screen" (Guest Additions)

The first time I booted up Windows inside the VM, it looked… sad. The resolution was stuck at a tiny 800x600 box in the middle of my monitor, and everything felt a bit laggy.

The secret sauce here is Guest Additions. It’s basically a driver pack that helps Zorin and the Windows VM talk to each other properly.

Here is how I fixed it:

  1. I booted up the Windows VM.
  2. In the top menu bar of the running VM window (not the main VirtualBox manager), I went to Devices > Insert Guest Additions CD image.
    • Tip: If you get an error saying the disk image file was not found, you can easily install it on Zorin by opening a terminal and running sudo apt install virtualbox-guest-additions-iso.
  3. Inside Windows, I opened File Explorer and navigated to "This PC" on the left.
  4. Under "Devices and drives," I found a new CD drive mounted there (usually labeled VirtualBox Guest Additions).
  5. I double-clicked the drive to open it and ran the file named VBoxWindowsAdditions.exe (or just VBoxWindowsAdditions if file extensions are hidden).

I just clicked "Next" through the installer and let it do its thing. Once it finished, it asked to reboot the VM. When it came back up? Boom. I could resize the window, and Windows automatically adjusted to the full resolution of my screen. It was instantly smoother.

Step 4: Sharing Files without the Headache

I didn't want to email files to myself or upload them to Google Drive just to move them from my Zorin desktop to the Windows VM. VirtualBox has a feature for this, but you have to turn it on.

  1. On Zorin: I created a folder in my Home directory called VM_Share.
  2. In VirtualBox: With the VM turned off (or running), I went to Settings > Shared Folders.
  3. I clicked the little "Add Folder" icon (the blue folder with the green plus sign).
  4. I selected my VM_Share path.
  5. Crucial Step: I checked the boxes for Auto-mount and Make Permanent.

Now, when I open "This PC" inside Windows, that folder shows up as a Network Drive (usually drive Z:). I can drop a file there in Zorin, and it appears instantly in Windows.

Step 5: The Tricky Part (Getting USBs to Work)

This was the only part that actually stumped me for a minute. I plugged a USB flash drive into my computer, expecting it to show up in the VM menu, but… nothing. It was grayed out.

It turns out there are two steps to fix this on Linux hosts.

1. The Extension Pack

First, I had to grab the Oracle VM VirtualBox Extension Pack from the VirtualBox website.

  • Note: You have to make sure the version of the pack matches your installed version of VirtualBox exactly!
  • Once downloaded, I double-clicked it, and VirtualBox installed it.

2. The Permissions Fix (Don't skip this!)

Even with the pack, it still didn't work. Why? Because by default, my Zorin user account didn't have permission to access the USB hardware for virtualization.

I had to add myself to the "vboxusers" group. I went back to the terminal and typed this:

sudo usermod -aG vboxusers $USER

And here is the "Have you tried turning it off and on again" moment: I had to completely log out of Zorin and log back in for this permission to take effect.

Once I logged back in, I went to the VM Settings > USB, enabled the USB 3.0 Controller, and added my drive. It worked like a charm!

It took a little bit of setup, but now I have a fully functional Windows environment sitting right inside my Zorin desktop. It recognizes my USBs, shares my files, and runs at full resolution. Best of both worlds!