VMware Fusion relies on various kernel extensions and daemons that are started when Mac OS X boots. These components are always active even when the VMware Fusion application is not running.
This is a guide to tweak VMware Fusion so that it manually starts the required components according to a user configuration file and to stop everything when the application quits.
This guide uses two custom scripts I created:
vmware.sh: This script replaces the actual vmware binary and is what gets run first when you start the VMware Fusion application. It creates a default configuration file at ~/Library/Preferences/com.vmware.fusion.netopt.plist. It calls bootnetopt.sh --start and then runs the actual vmware binary. After that it waits until the application quits at which point it calls bootnetopt.sh --stop.
bootnetopt.sh: This scripts reads the com.vmware.fusion.netopt.plist configuration file and starts only the required kernel extensions and daemons. This obviously need to be run as root (using sudo) but we don't want it to ask for a password every time. We have to add it as an exception to the sudoers file (see step 5 below).
How to apply it all:
1. Download vmwarenetopt.zip and extract it to your desktop.
2. Stop all currently running vmware components.
$ sudo /Library/Application\ Support/VMware\ Fusion/boot.sh --stop
3. Remove vmware's launchd file so that nothing gets started automatically at boot.
$ sudo rm -f /Library/LaunchDaemons/com.vmware.launchd.vmware.plist
4. Copy scripts inside VMware Fusion.app
$ sudo mv /Applications/VMware\ Fusion.app/Contents/MacOS/vmware /Applications/VMware\ Fusion.app/Contents/MacOS/vmware.bin
$ sudo cp ~/Desktop/vmwarenetopt/vmware.sh /Applications/VMware\ Fusion.app/Contents/MacOS/vmware
$ sudo cp ~/Desktop/vmwarenetopt/bootnetopt.sh /Applications/VMware\ Fusion.app/Contents/MacOS/
5. Add bootnetopt.sh to sudoers.
This is done using the visudo command which must be run with sudo (we cannot give ourselves permission to be running a script as root without first being root) and lets use a more sane editor than vi (no offence to any vi wizards) so type:
$ EDITOR=/usr/bin/nano sudo visudo
Go to the end of the file and add the following line exactly:
ALL ALL = NOPASSWD: /Applications/VMware\ Fusion.app/Contents/MacOS/bootnetopt.sh
Press ctrl-x to quit the editor, press y to reply yes to save the changes and finally press return to confirm the file name.
6. That's it. Well done.
From now on we can run the VMware Fusion application normally and can see that all required components are started:
$ kextstat | grep vm
192 0 0x6d144000 0xd2000 0xd1000 com.vmware.kext.vmx86 (3.0.0) <11 5 4 3 1>
193 0 0x57531000 0xc000 0xb000 com.vmware.kext.vmci (3.0.0) <5 4 3 1>
194 0 0x57181000 0x6000 0x5000 com.vmware.kext.vmioplug (3.0.0) <34 29 5 4 3 1>
195 0 0x57f05000 0xa000 0x9000 com.vmware.kext.vmnet (3.0.0) <5 4 3 1>
$ ps -Ac | grep vmnet
22244 ?? 0:00.02 vmnet-bridge
22254 ?? 0:00.00 vmnet-dhcpd
22256 ?? 0:00.00 vmnet-netifup
22258 ?? 0:00.00 vmnet-dhcpd
22261 ?? 0:00.01 vmnet-natd
22263 ?? 0:00.00 vmnet-netifup
$ ifconfig -l
lo0 gif0 stf0 en0 fw0 en1 vmnet1 vmnet8
And if we quit the application we can see that everything else is stopped as well:
$ kextstat | grep vm
$ ps -Ac | grep vmnet
$ ifconfig -l
lo0 gif0 stf0 en0 fw0 en1
But we can go further than that and edit the com.vmware.fusion.netopt.plist configuration file (using Property List Editor or the defaults command). If for example we only ever use bridge networking for our VMs we can disable Host Only (vmnet1) and NAT (vmnet8).
![]()
And confirm that only the vmnet-bridge daemon gets started and that vmnet1 and vmnet8 are not created:
$ kextstat | grep vm
196 0 0x6d144000 0xd2000 0xd1000 com.vmware.kext.vmx86 (3.0.0) <11 5 4 3 1>
197 0 0x57531000 0xc000 0xb000 com.vmware.kext.vmci (3.0.0) <5 4 3 1>
198 0 0x574d9000 0x6000 0x5000 com.vmware.kext.vmioplug (3.0.0) <34 29 5 4 3 1>
199 0 0x57f05000 0xa000 0x9000 com.vmware.kext.vmnet (3.0.0) <5 4 3 1>
$ ps -Ac | grep vmnet
22347 ?? 0:00.01 vmnet-bridge
$ ifconfig -l
lo0 gif0 stf0 en0 fw0 en1
Also notice how we could easily customise the IP address ranges used for Host Only and NAT networking from the same configuration file, no root permissions or editing of scripts required anymore.
Finally a disclaimer: I created this for my personal use and posted it here so that it might be useful to others. If you decide to follow the guide please make sure you understand what you are doing before proceeding or ask first. I have tested this with both VMware Fusion 3.0 and 3.1 and had no problems but please understand that I can not guarantee anything.
Update: Confirmed working with Lion and VMware Fusion 3.1.3, but see here https://forums.macrumors.com/posts/13171285/ for more info and an update on how to do step 5.
This is a guide to tweak VMware Fusion so that it manually starts the required components according to a user configuration file and to stop everything when the application quits.
This guide uses two custom scripts I created:
vmware.sh: This script replaces the actual vmware binary and is what gets run first when you start the VMware Fusion application. It creates a default configuration file at ~/Library/Preferences/com.vmware.fusion.netopt.plist. It calls bootnetopt.sh --start and then runs the actual vmware binary. After that it waits until the application quits at which point it calls bootnetopt.sh --stop.
bootnetopt.sh: This scripts reads the com.vmware.fusion.netopt.plist configuration file and starts only the required kernel extensions and daemons. This obviously need to be run as root (using sudo) but we don't want it to ask for a password every time. We have to add it as an exception to the sudoers file (see step 5 below).
How to apply it all:
1. Download vmwarenetopt.zip and extract it to your desktop.
2. Stop all currently running vmware components.
$ sudo /Library/Application\ Support/VMware\ Fusion/boot.sh --stop
3. Remove vmware's launchd file so that nothing gets started automatically at boot.
$ sudo rm -f /Library/LaunchDaemons/com.vmware.launchd.vmware.plist
4. Copy scripts inside VMware Fusion.app
$ sudo mv /Applications/VMware\ Fusion.app/Contents/MacOS/vmware /Applications/VMware\ Fusion.app/Contents/MacOS/vmware.bin
$ sudo cp ~/Desktop/vmwarenetopt/vmware.sh /Applications/VMware\ Fusion.app/Contents/MacOS/vmware
$ sudo cp ~/Desktop/vmwarenetopt/bootnetopt.sh /Applications/VMware\ Fusion.app/Contents/MacOS/
5. Add bootnetopt.sh to sudoers.
This is done using the visudo command which must be run with sudo (we cannot give ourselves permission to be running a script as root without first being root) and lets use a more sane editor than vi (no offence to any vi wizards) so type:
$ EDITOR=/usr/bin/nano sudo visudo
Go to the end of the file and add the following line exactly:
ALL ALL = NOPASSWD: /Applications/VMware\ Fusion.app/Contents/MacOS/bootnetopt.sh
Press ctrl-x to quit the editor, press y to reply yes to save the changes and finally press return to confirm the file name.
6. That's it. Well done.
From now on we can run the VMware Fusion application normally and can see that all required components are started:
$ kextstat | grep vm
192 0 0x6d144000 0xd2000 0xd1000 com.vmware.kext.vmx86 (3.0.0) <11 5 4 3 1>
193 0 0x57531000 0xc000 0xb000 com.vmware.kext.vmci (3.0.0) <5 4 3 1>
194 0 0x57181000 0x6000 0x5000 com.vmware.kext.vmioplug (3.0.0) <34 29 5 4 3 1>
195 0 0x57f05000 0xa000 0x9000 com.vmware.kext.vmnet (3.0.0) <5 4 3 1>
$ ps -Ac | grep vmnet
22244 ?? 0:00.02 vmnet-bridge
22254 ?? 0:00.00 vmnet-dhcpd
22256 ?? 0:00.00 vmnet-netifup
22258 ?? 0:00.00 vmnet-dhcpd
22261 ?? 0:00.01 vmnet-natd
22263 ?? 0:00.00 vmnet-netifup
$ ifconfig -l
lo0 gif0 stf0 en0 fw0 en1 vmnet1 vmnet8
And if we quit the application we can see that everything else is stopped as well:
$ kextstat | grep vm
$ ps -Ac | grep vmnet
$ ifconfig -l
lo0 gif0 stf0 en0 fw0 en1
But we can go further than that and edit the com.vmware.fusion.netopt.plist configuration file (using Property List Editor or the defaults command). If for example we only ever use bridge networking for our VMs we can disable Host Only (vmnet1) and NAT (vmnet8).

And confirm that only the vmnet-bridge daemon gets started and that vmnet1 and vmnet8 are not created:
$ kextstat | grep vm
196 0 0x6d144000 0xd2000 0xd1000 com.vmware.kext.vmx86 (3.0.0) <11 5 4 3 1>
197 0 0x57531000 0xc000 0xb000 com.vmware.kext.vmci (3.0.0) <5 4 3 1>
198 0 0x574d9000 0x6000 0x5000 com.vmware.kext.vmioplug (3.0.0) <34 29 5 4 3 1>
199 0 0x57f05000 0xa000 0x9000 com.vmware.kext.vmnet (3.0.0) <5 4 3 1>
$ ps -Ac | grep vmnet
22347 ?? 0:00.01 vmnet-bridge
$ ifconfig -l
lo0 gif0 stf0 en0 fw0 en1
Also notice how we could easily customise the IP address ranges used for Host Only and NAT networking from the same configuration file, no root permissions or editing of scripts required anymore.
Finally a disclaimer: I created this for my personal use and posted it here so that it might be useful to others. If you decide to follow the guide please make sure you understand what you are doing before proceeding or ask first. I have tested this with both VMware Fusion 3.0 and 3.1 and had no problems but please understand that I can not guarantee anything.
Update: Confirmed working with Lion and VMware Fusion 3.1.3, but see here https://forums.macrumors.com/posts/13171285/ for more info and an update on how to do step 5.
Last edited: