diff --git a/Sources/tart/Platform/Darwin.swift b/Sources/tart/Platform/Darwin.swift index d603239..0aaaa57 100644 --- a/Sources/tart/Platform/Darwin.swift +++ b/Sources/tart/Platform/Darwin.swift @@ -98,11 +98,17 @@ struct Darwin: Platform { return result } + func keyboards() -> [VZKeyboardConfiguration] { + if #available(macOS 14, *) { + return [VZMacKeyboardConfiguration()] + } else { + return [VZUSBKeyboardConfiguration()] + } + } + func pointingDevices() -> [VZPointingDeviceConfiguration] { if #available(macOS 13, *) { - // Trackpad is only supported starting with macOS Ventura - // macOS Monterey will continue using a USB device == .darwin - return [VZMacTrackpadConfiguration(), VZUSBScreenCoordinatePointingDeviceConfiguration()] + return [VZMacTrackpadConfiguration()] } else { return [VZUSBScreenCoordinatePointingDeviceConfiguration()] } diff --git a/Sources/tart/Platform/Linux.swift b/Sources/tart/Platform/Linux.swift index cd00177..fbfe84a 100644 --- a/Sources/tart/Platform/Linux.swift +++ b/Sources/tart/Platform/Linux.swift @@ -31,6 +31,10 @@ struct Linux: Platform { return result } + func keyboards() -> [VZKeyboardConfiguration] { + [VZUSBKeyboardConfiguration()] + } + func pointingDevices() -> [VZPointingDeviceConfiguration] { [VZUSBScreenCoordinatePointingDeviceConfiguration()] } diff --git a/Sources/tart/Platform/Platform.swift b/Sources/tart/Platform/Platform.swift index 4249b02..9b8c04e 100644 --- a/Sources/tart/Platform/Platform.swift +++ b/Sources/tart/Platform/Platform.swift @@ -5,5 +5,6 @@ protocol Platform: Codable { func bootLoader(nvramURL: URL) throws -> VZBootLoader func platform(nvramURL: URL) throws -> VZPlatformConfiguration func graphicsDevice(vmConfig: VMConfig) -> VZGraphicsDeviceConfiguration + func keyboards() -> [VZKeyboardConfiguration] func pointingDevices() -> [VZPointingDeviceConfiguration] } diff --git a/Sources/tart/VM.swift b/Sources/tart/VM.swift index 5579627..5ae98bc 100644 --- a/Sources/tart/VM.swift +++ b/Sources/tart/VM.swift @@ -292,7 +292,7 @@ class VM: NSObject, VZVirtualMachineDelegate, ObservableObject { configuration.audioDevices = [soundDeviceConfiguration] // Keyboard and mouse - configuration.keyboards = [VZUSBKeyboardConfiguration()] + configuration.keyboards = vmConfig.platform.keyboards() configuration.pointingDevices = vmConfig.platform.pointingDevices() // Networking