Autostart Parallels Virtual Machines on Mac Startup


With the release of Parallels Desktop 19.3 a deprecation notice warns that some functionality will be lost in the next major release which will likely be Parallels Desktop 20 latter in the year. It is possible to reinstate this functionality with a macOS plist Launch Daemon and you can prepare now with your current version of Parallels Desktop Pro so that on update there is no disruption. Please note that Parallels Desktop Pro is required for command line functionality which is used here.

  • First I recommend that you configure your virtual machines Startup and Shutdown option to Always ready in the background; this is so that if you login to the Mac and open the Parallels Desktop application you can close the virtual machine window and quit Parallels Desktop without stopping the guest.
  • Now I recommend that you find the ID of the virtual machine you want to autostart with the Mac: prlctl list -a # alternatively just rename the virtual machine so that its name does not contain spaces or special characters.
  • Now we need to create a parallels.audostart.plist file in /Library/LaunchDaemons ,and this needs to be done as the superuser:
    • sudo vim /Library/LaunchDaemons/parallels.autostart.plist
  • Add something like the following to your file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>parallels.autostart</string>
<key>ProgramArguments</key>
<array>
<string>sudo</string>
<string>-u</string>
<string>andrewread</string>
<string>/usr/local/bin/prlctl</string>
<string>start</string>
<string>c8ed0ffe-d132-488e-8d0b-ac2cf83f6fdd</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

  • Enable your service with: sudo launchctl load -w /Library/LaunchDaemons/parallels.autostart.plist
  • If you have more than one virtual machine you want to start just duplicate the plist, relabel it something like parallels.autostart1.plist, change the guest string, then load with launchctl.