Skip to content

Attach Detach USB Device example for macOS 15 and above

Kei Kamikawa edited this page Jan 5, 2025 · 2 revisions

Create USB disk image on macOS:

# format as FAT32
hdiutil create -size 4g -fs FAT32 -volname "USB" usb_disk.dmg

Write code like below:

config, err := setupVMConfiguration(platformConfig)
if err != nil {
	return err
}
vm, err := vz.NewVirtualMachine(config)
if err != nil {
	return err
}

// ...

usbCtrls := vm.USBControllers()

// Attach USB device
if len(usbCtrls) > 0 {
	diskAttachment, err := vz.NewDiskImageStorageDeviceAttachment("/path/to/usb_disk.dmg", isReadOnly)
	if err != nil {
		log.Fatal(err)
	}
	conf, _ := vz.NewUSBMassStorageDeviceConfiguration(diskAttachment)
	usbDevice, _ := vz.NewUSBMassStorageDevice(conf)
	log.Println("loading usb", len(usbCtrls), usbDevice.UUID())
	if err := usbCtrls[0].Attach(usbDevice); err != nil {
		log.Printf("failed to attach usb device: %q", err)
	} else {
		log.Println("attached")
	}
}

// Detach USB device
if len(usbCtrls) > 0 {
	log.Println("loading usb in cleanup")
	for _, dev := range usbCtrls[0].USBDevices() {
		if err := usbCtrls[0].Detach(dev); err != nil {
			log.Printf("failed to detach usb device: %q", err)
		} else {
			log.Println("detached", dev.UUID())
		}
	}
}