On my current project, it’s necessary to host a Windows virtual machine from my MacBook Pro using VMware Fusion. This can sometimes result in a frustrating and slow development process. Out of the box:
- I found myself unable to use my window manager to move and resize windows as I would’ve liked,
- I experienced window flickering from the guest OS,
- I was unable to share files between the 2 operating systems, and
- I didn’t have a shared paste buffer.
Overall, I found the integration between the two less than seamless and pretty painful. Over the past couple of months, I’ve picked up a couple of tricks to make the experience less frustrating.
1. Consider which View Mode to Use
Vmware offers 3 options to run the guest operating system. After some experimentation, I prefer unity mode. To try unity mode, while the guest OS is running, use shift + cmd + u. Once in unity mode, you can use that same shortcut to toggle it back off. You can also find this option in the VMware Utilities menu under View => Unity.
Unity mode has worked well for me for several reasons. First, it makes the virtualized apps look like they are running more like native apps. Practically, this means that you can use command+tab to toggle through them like a Mac app. And you can use command instead of control for simple shortcuts like copy/paste.
Additionally, running in unity mode allows you to have the windows of the guest operating system on more than one display. While these are small benefits, they save me a lot of time and frustration throughout the day.
2. Add Windows Apps to the Mac Applications Folder
Adding windows apps to the host’s applications folder will allow you to use spotlight search (cmd + space) to open them.
You can even add guest apps to the Mac applications folder. This makes it much easier to open apps quickly like a new windows PowerShell window or other windows app.
3. Set Up a Clear Folder Sharing Structure
VMware provides a way to share folders across the host and guest. That means that both can read the files, and you can configure permissions on what OS can write to these files.
I’ve found it’s easiest to keep the project repository in a shared folder, where both the host and guest OS can read and write to it. This allows me to use the host OS for all of the source control work I need to do, like committing, pushing, and pulling the project. This way, I can keep using my host gitconfig and ssh keys without having to set that up in the guest OS.
Other members of my team use a different sharing strategy that works for them, but it’s a good idea to consider how to make this feature work for you.
Of course, there are still pain points in my workflow. I use Spectacle to organize my Mac windows, and for that, it works great. However, Spectacle doesn’t do so well when I try to move the Windows apps around, often making them the wrong size or putting them off the screen.
I’m still searching for a replacement that could work for both native mac apps, and with VMware fusion to manage the position of the guest applications. Let me know down in the comments if you have a recommendation for one or if you have other tips for this topic.