-
-
Notifications
You must be signed in to change notification settings - Fork 52
Attach Detach USB Device example for macOS 15 and above
Kei Kamikawa edited this page Jan 5, 2025
·
2 revisions
- https://developer.apple.com/documentation/virtualization/vzusbmassstoragedevice?language=objc
- https://developer.apple.com/documentation/virtualization/vzusbcontrollerconfiguration?language=objc
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())
}
}
}