Explore how UTM enables running x86_64 applications on Apple Silicon Macs efficiently and reliably.
I have used Parallels on macOS for a long time, and it is widely regarded as one of the best virtualization software options for the platform. However, despite Parallels’ ability to run x86_64 applications using Rosetta on systems with Apple Silicon processors like the M1, M2, and M3, compatibility issues often arise, causing x86_64 applications to work poorly or not at all.
Recently, when I needed to run x86_64-based software, I searched for alternative virtualization software that offers CPU emulation. UTM perfectly fulfills this niche, providing a reliable solution for running x86_64 applications on Apple Silicon Macs.
UTM is available for purchase on the Apple Store for $9.99, which includes automatic updates. Alternatively, you can download and install UTM for free from https://docs.getutm.app/installation/macos/. However, please note that if you choose the free option, you will not receive automatic updates.
Key UTM Functionality
UTM differs from other virtualization software such as Parallels because it utilizes QEMU (Quick Emulator) to provide full emulation of an architecture like x86_64. This approach offers the most compatible environment when attempting to run software designed for that specific architecture, albeit with somewhat less efficiency compared to other virtualization methods.
UTM is a versatile emulation platform that supports more than 30 processor architectures, including x86, x86–64, ARM32, ARM64, MIPS, PowerPC, and RISC-V. This extensive compatibility makes UTM an ideal choice for developers and enthusiasts who require a specific architecture.
Creating Virtual Machines With UTM
When creating virtual machines, you are presented with the following options.
The virtualized mode runs faster but can only run the native CPU architecture. For example, if your system has an M1 processor, the virtual machine will use the same M1 CPU architecture.
The second option, “Emulate,” allows the system to emulate other architectures.
Another option is to download prebuilt images from the UTM Gallery. You can find a variety of operating systems, including Arch Linux, numerous Debian distributions, Fedora, Kali Linux, macOS, ReactOS, Sun Solaris, Ubuntu, Windows 10, Windows 11, Windows 7, and Windows XP.
When selecting the “Emulate” option, you will be presented with a list of preconfigured choices, including options for Windows, Linux, and others. Choose the one that corresponds to the operating system you will be installing.
After installation, right-click on the newly created virtual machine in the left panel and adjust the configuration. You can modify settings such as the number of CPU cores, RAM size, and network adapter types according to your preferences. Additionally, you have the option to customize the QEMU settings if needed.
If you use one of the prebuilt VM images provided by UTM, they have been preconfigured to enable features such as shared disk and shared clipboard. Using a prebuilt image is preferred if it provides what you need. However, if you need to use a different OS or architecture, you can install from an ISO file with your own desired configuration.
One thing to note is that if you install from an ISO, you must remove the ISO from the VM’s configuration after installation, or it will continue to boot from the ISO.
Go to the VM configuration and clear the ISO.
Shared Disk
To use shared disk with UTM, you have the choice to use VirtFS or Spice WebDAV. UTM uses primarily the 9pfs for folder sharing with Linux guests, but Spice WebDAV is an alternative especially on systems that do not support the 9p file system, such as on RHEL9 or Rocky Linux 9.
Select the desired configuration from the guest VM configuration screen.
How To Use 9p File System
The 9p file system is faster than WebDAV, making it the preferred choice. With QEMU’s 9p file system, users can create virtual filesystem devices and expose them to guest virtual machines. This allows a directory on the host machine to be directly accessible by a guest operating system as a pass-through file system, using the 9P network protocol for communication between the host and guest.
Mounting the 9p file system shared from the host isn’t very straightforward. Although there is a lot of information on the Internet, I found most of it to be incorrect. I’ll share the information I gathered that works for me.
The steps below should be similar on an RPM-based system, but I’ll be using Ubuntu as an example.
In my case, I exported the Downloads directory. I expected to be able to mount it using “Downloads”, but it turns out UTM or QEMU exports the volume as “share”.
To see the share name, export the QEMU settings for the VM. The share name will be visible there, as shown below:
The export name is the mount_tag which in this case is “share”:
fsdev local,id=virtfs0,path=/Volumes/msd-1tb/downloads,security_model=mapped-xattr -device virtio-9p-pci,fsdev=virtfs0,mount_tag=share
The share is called “share”, even though I had configured it to share the Downloads folder; I was under the impression it would be called “Downloads”.
To mount manually, run:
mount -t 9p -o trans=virtio,rw share /mnt
You can add it to fstab to automatically mount the filesystem during boot.
echo ‘share /mnt 9p trans=virtio,rw’ >> /etc/fstab
WebDAV File Share
WebDAV serves as an alternative for sharing a filesystem between the host and the guest virtual machine. Although file sharing through the 9p filesystem is faster, it isn’t as widely supported. For instance, Rocky Linux 9 lacks support for the 9p filesystem.
The following instructions will be performed using Ubuntu, but they will be similar for other Linux distributions.
First, select Spice WebDAV from the guest configuration:
On Ubuntu 24, spice-vdagentd will not start without adding the /etc/default/spice-vdagentd file. It will show an error message until this file is created:
Create the file /etc/default/spice-vdagentd
with the following:
SPICE_WEBDAVD_EXTRA_ARGS=”-X”
You can then restart spice.vdagentd with the following command:
systemctl restart spice.vdagentd
Once the service has been restarted, you can proceed to mount the share using WebDAV. For example:
I didn’t have to specify a username or password when mounting the share using localhost:9843 which is shared from the host.
You can also add it to fstab if necessary.
Shared Clipboard
The Shared Clipboard is a convenient feature in UTM virtualization that allows users to seamlessly copy and paste text between the host operating system and the virtual machine. However, it may not be installed automatically when installing manually from an ISO.
To enable copy-and-paste, ensure that Clipboard sharing is enabled in the virtual machine’s configuration. Then, install the ‘spice-vdagentd’ and ‘spice-vdagent’ packages within the virtual machine. After installation, start the spice-vdagentd using systemctl. Next, launch the spice-vdagent software. To initiate spice-vdagentd when X11 starts, you can add it to ~/.xinitrc.
Potential Problems During Installation
Running certain operating systems or architectures using UTM can be challenging — it’s not a simple plug-and-play like Parallels. With flexibility also comes a more involved setup, potentially.
For example, the default CPU setting does not work for Rocky Linux 9 using x86_64 emulation. Emulating the AMD EPYC processor works fine for Rocky Linux 9 under x86_64 emulation.
Also, the default display setting does not work and will produce an error message stating, ‘Display output is not active.’ To resolve this issue, go into the settings for the VM and change ‘Emulated Display Card’ from the default ‘virtio-gpu-pci’ to ‘virtio-vga’, which provides standard VGA for console-only display.
Conclusion
I hope you find this helpful. I went through a lot of trial and error to find a working solution. Hopefully, this information will save you some time.