From 69e063b56b9c54d9dc7bbed69e0e224eba59f1a2 Mon Sep 17 00:00:00 2001 From: vectorsigma72 Date: Thu, 7 Nov 2019 23:12:13 +0100 Subject: [PATCH] Clover.app v1.01 Alpha CloverDaemon dump nvram to the Clover Boot partition as default. Any other nvram.list found in all mounted volumes will be removed. Fixed the launch at login app that was showing an empty window. Added russian translation (95%) --- CloverApp/Clover.xcodeproj/project.pbxproj | 2 - CloverApp/Clover/AppDelegate.swift | 7 +- CloverApp/Clover/Info.plist | 4 +- CloverApp/Clover/Installer/Installer.swift | 4 +- .../CloverDaemonNew/Disks_session.swift | 13 ++ .../CloverDaemonNew/main.swift | 58 ++++++- .../Base.lproj/Main.storyboard | 6 +- .../Lang.bundle/Contents/Resources/ru.strings | 155 +++++++++--------- 8 files changed, 155 insertions(+), 94 deletions(-) diff --git a/CloverApp/Clover.xcodeproj/project.pbxproj b/CloverApp/Clover.xcodeproj/project.pbxproj index 3f238c727..9eb2d3e78 100644 --- a/CloverApp/Clover.xcodeproj/project.pbxproj +++ b/CloverApp/Clover.xcodeproj/project.pbxproj @@ -245,7 +245,6 @@ 95E68ADD235B86A1002B37A5 /* Disks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disks.swift; sourceTree = ""; }; 95E68ADE235B86A1002B37A5 /* bdmesg.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = bdmesg.swift; sourceTree = ""; }; 95E68AE4235B89D9002B37A5 /* Installer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Installer.swift; sourceTree = ""; }; - 95E68AEC235CC1F5002B37A5 /* CloverV2 */ = {isa = PBXFileReference; lastKnownFileType = folder; name = CloverV2; path = ../../CloverPackage/CloverV2; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ @@ -291,7 +290,6 @@ 95C51577236B21AE00E4A3A8 /* CloverRunAtLogin.xcodeproj */, 9552D740236F33A700C93377 /* CloverDaemonNew.xcodeproj */, 95C5C0A22365D2250049940D /* Lang.bundle */, - 95E68AEC235CC1F5002B37A5 /* CloverV2 */, 95E68AC7235B862F002B37A5 /* Products */, ); sourceTree = ""; diff --git a/CloverApp/Clover/AppDelegate.swift b/CloverApp/Clover/AppDelegate.swift index 6cc090ec5..691eba7ec 100644 --- a/CloverApp/Clover/AppDelegate.swift +++ b/CloverApp/Clover/AppDelegate.swift @@ -35,13 +35,19 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSPopoverDelegate { } func applicationWillFinishLaunching(_ notification: Notification) { + + /* do not activate the following code: is for debug only .. it delete stored preferences in the User Default dictionary + if let domain = Bundle.main.bundleIdentifier { UDs.removePersistentDomain(forName: domain) UDs.synchronize() } + the following is to dump info about all disk in the System + let diskLog = "- getAlldisks() -----------------\n\(getAlldisks())\n- getAllESPs() ------------------\n\(getAllESPs())\n---------------------------------" + try? diskLog.write(toFile: NSHomeDirectory().addPath("Desktop/diskLog.txt"), atomically: true, encoding: .utf8) */ let pi = NSRunningApplication.current.processIdentifier @@ -125,7 +131,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSPopoverDelegate { } @objc func reFreshDisksList() { - //print("reFreshDisksList") (self.settingsWC?.contentViewController as? SettingsViewController)?.searchESPDisks() (self.installerWC?.contentViewController as? InstallerViewController)?.populateTargets() } diff --git a/CloverApp/Clover/Info.plist b/CloverApp/Clover/Info.plist index ccf429804..76e900165 100644 --- a/CloverApp/Clover/Info.plist +++ b/CloverApp/Clover/Info.plist @@ -36,9 +36,9 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0 + 1.01 CFBundleVersion - 1 + 1.01 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright diff --git a/CloverApp/Clover/Installer/Installer.swift b/CloverApp/Clover/Installer/Installer.swift index cd06fc695..e8d07d964 100644 --- a/CloverApp/Clover/Installer/Installer.swift +++ b/CloverApp/Clover/Installer/Installer.swift @@ -722,11 +722,11 @@ class InstallerViewController: NSViewController { for d in diskSorted { let disk : String = d if isWritable(diskOrMtp: disk) { - let fs : String = getFS(from: disk) ?? kNotAvailable.locale + let fs : String = getFS(from: disk)?.lowercased() ?? kNotAvailable.locale let psm : String = getPartitionSchemeMap(from: disk) ?? kNotAvailable.locale let name : String = getVolumeName(from: disk) ?? kNotAvailable.locale let mp : String = getMountPoint(from: disk) ?? kNotAvailable.locale - if fs == "FAT32" || fs == "exFAT" || fs == "hfs" { + if fs == "fat32" || fs == "exfat" || fs == "hfs" { self.targetPop.addItem(withTitle: "\(disk)\t\(name), mount point: \(mp), \(fs.uppercased()), \(psm)") self.targetPop.invalidateIntrinsicContentSize() // get the image diff --git a/CloverApp/CloverDaemonNew/CloverDaemonNew/Disks_session.swift b/CloverApp/CloverDaemonNew/CloverDaemonNew/Disks_session.swift index 930c96a26..f6e74f9f8 100644 --- a/CloverApp/CloverDaemonNew/CloverDaemonNew/Disks_session.swift +++ b/CloverApp/CloverDaemonNew/CloverDaemonNew/Disks_session.swift @@ -105,6 +105,19 @@ func getMountPoint(from diskOrMtp: String) -> String? { return mountPoint } +/// get and array of currently mounted volumes +func getVolumes() -> [String] { + var mounted : [String] = [String]() + let all = getAlldisks().allKeys + for b in all { + let bsd : String = b as! String + if let mp = getMountPoint(from: bsd) { + mounted.append(mp) + } + } + return mounted +} + /// Find the Volume name: be aware that this is not the mount point name. func getVolumeName(from diskOrMtp: String) -> String? { // kDADiskDescriptionVolumeNameKey diff --git a/CloverApp/CloverDaemonNew/CloverDaemonNew/main.swift b/CloverApp/CloverDaemonNew/CloverDaemonNew/main.swift index 881323060..02378fc3f 100644 --- a/CloverApp/CloverDaemonNew/CloverDaemonNew/main.swift +++ b/CloverApp/CloverDaemonNew/CloverDaemonNew/main.swift @@ -24,6 +24,10 @@ let gSession3 = DASessionCreate(kCFAllocatorDefault) let gSession4 = DASessionCreate(kCFAllocatorDefault) let gSession5 = DASessionCreate(kCFAllocatorDefault) +var BootDeviceUUID : String? = nil +var BootDeviceFS : String? = nil +var BootDevice : String? = nil + func execAttr() -> [FileAttributeKey : Any] { var attributes = [FileAttributeKey : Any]() attributes[.posixPermissions] = NSNumber(value: 755) //NSNumber object. Use the int16Value method to retrieve the integer value for the permissions. @@ -65,15 +69,28 @@ func doJob() { if !fm.isWritableFile(atPath: "/") { run(cmd: "mount -uw /") } + + if let nvram = getNVRAM() { // first time is to dump nvram (time is running out..) - - if fm.isWritableFile(atPath: "/") { - saveNVRAM(volume: "/", nvram: nvram) - } else { - if let bootDevice = findBootPartitionDevice() { - print("Boot Device is \(bootDevice).") - mountSaveNVRAM(disk: bootDevice, at: nil, nvram: nvram) + if (nvram.object(forKey: "EmuVariableUefiPresent") != nil || + nvram.object(forKey: "TestEmuVariableUefiPresent") != nil) { + // mount -t "$filesystem" "$bootdev" "$mnt_pt" + if let bootDevice = BootDevice, let fs = BootDeviceFS { + let uuid = (BootDeviceUUID != nil) ? "\(BootDeviceUUID!)" : "NO UUID" + let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + let mp = "/Volumes/\(String((0..<10).map{ _ in letters.randomElement()! }))" + let type : String = (fs.hasPrefix("fat") || fs.hasPrefix("exf")) ? "msdos" : fs + + let cmd = "if [[ $(LC_ALL=C mount | egrep \"^/dev/\(bootDevice) on\" | sed 's/^.* on *//;s/ ([^(]*//') == \"/\"* ]]; then nvram -x -p > $(LC_ALL=C mount | egrep \"^/dev/\(bootDevice) on\" | sed 's/^.* on *//;s/ ([^(]*//')/nvram.plist; echo 'nvram saved to am disk with UUID \(uuid)'; else mkdir -p \(mp); mount -t \(type) /dev/\(bootDevice) \(mp); nvram -x -p > \(mp)/nvram.plist; echo 'nvram saved to u disk with UUID \(uuid)'; fi" + + let task = Process() + task.launchPath = "/bin/bash" + task.arguments = ["-c", cmd] + + task.launch() + } else { + saveNVRAM(volume: "/", nvram: nvram) } } @@ -247,6 +264,15 @@ func main() { } } + + // get the boot device UUID, will be of help later + if let bootDevice = findBootPartitionDevice() { + BootDevice = bootDevice + BootDeviceUUID = getVolumeUUID(from: bootDevice) + BootDeviceFS = getFS(from: bootDevice)?.lowercased() + } + + if let nvram = getNVRAM() { if let nvdata = nvram.object(forKey: "Clover.RootRW") as? Data { let value = String(decoding: nvdata, as: UTF8.self) @@ -258,6 +284,23 @@ func main() { checkSleepProxyClient(nvram: nvram) } + // Clean old nvram.plist user may have + for v in getVolumes() { + let nvramtPath = v.addPath("nvram.plist") + if fm.fileExists(atPath: nvramtPath) { + if fm.isDeletableFile(atPath: nvramtPath) { + do { + try fm.removeItem(atPath: nvramtPath) + print("old '\(nvramtPath)' removed.") + } catch { + print("Error: can't remove '\(nvramtPath)'.") + } + } else { + print("Error: '\(nvramtPath)' is not deletable.") + } + } + } + // SIGTERM? This is a daemon so we are shutting down signal(SIGTERM, SIG_IGN) let termSource = DispatchSource.makeSignalSource(signal: SIGTERM) @@ -318,6 +361,7 @@ if CommandLine.arguments.contains("--install") { ofItemAtPath: "/Library/LaunchDaemons/com.slice.CloverDaemonNew.plist") run(cmd: "launchctl load /Library/LaunchDaemons/com.slice.CloverDaemonNew.plist") + run(cmd: "launchctl start /Library/LaunchDaemons/com.slice.CloverDaemonNew.plist") exit(EXIT_SUCCESS) } catch { print(error) diff --git a/CloverApp/CloverRunAtLogin/CloverRunAtLogin/Base.lproj/Main.storyboard b/CloverApp/CloverRunAtLogin/CloverRunAtLogin/Base.lproj/Main.storyboard index 3516cdaf8..1ab06da03 100644 --- a/CloverApp/CloverRunAtLogin/CloverRunAtLogin/Base.lproj/Main.storyboard +++ b/CloverApp/CloverRunAtLogin/CloverRunAtLogin/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -684,8 +684,8 @@ - - + + diff --git a/CloverApp/Lang.bundle/Contents/Resources/ru.strings b/CloverApp/Lang.bundle/Contents/Resources/ru.strings index 693efcee0..88bc15331 100644 --- a/CloverApp/Lang.bundle/Contents/Resources/ru.strings +++ b/CloverApp/Lang.bundle/Contents/Resources/ru.strings @@ -11,7 +11,7 @@ */ /* top bar menu */ -"N/A" = "N/D"; // not available +"N/A" = "Н/Д"; // not available "Install Clover" = "Install Clover"; "Current Clover revision" = "Current Clover revision"; "Boot device" = "Boot Device"; @@ -19,145 +19,146 @@ "Clover wants to mount %@" = "Clover wants to mount %@"; "Clover wants to umount %@" = "Clover wants to umount %@"; -"Mount" = "Mount"; -"umount" = "umount"; -"mount point" = "mount point"; +"Mount" = "Смонтировать"; +"umount" = "размонтирования"; +"mount point" = "точка крепления"; -"true" = "true"; -"false" = "false"; +"true" = "реальный"; +"false" = "фальшивый"; -"Theme:" = "Theme:"; -"Sound:" = "Sound:"; +"Theme:" = "Тема:"; +"Sound:" = "Звук:"; "*Make filesystem read-write" = "*Make filesystem read-write"; -"*Disable Sleep Proxy Client" = "*Disable Sleep Proxy Client"; -"*Require CloverDaemon" = "*Require CloverDaemon"; +"*Disable Sleep Proxy Client" = "*Отключение Sleep Proxy Client"; +"*Require CloverDaemon" = "*Требуется CloverDaemon"; "Read daemon log" = "Read daemon log"; "Read bdmesg" = "Read boot log"; -"Install CloverDaemonNew" = "Install CloverDaemonNew"; -"Uninstall CloverDaemonNew" = "Uninstall CloverDaemonNew"; +"Install CloverDaemonNew" = "Установить CloverDaemonNew"; +"Uninstall CloverDaemonNew" = "Удалить CloverDaemonNew"; -"Update" = "Update"; -"Update to r%d" = "Update to r%d"; // "Update to r5101" -"Check update:" = "Check update:"; -"Check now" = "Check now"; +"Update" = "Oбновление"; +"Update to r%d" = "Обновление до r%d"; // "Update to r5101" +"Check update:" = "Проверить обновления:"; +"Check now" = "Проверь сейчас"; -"never" = "never"; +"never" = "никогда"; "daily" = "daily"; "weekly" = "weekly"; "monthly" = "monthly"; "last checked:" = "last checked:"; // last date update was checked. Please be short. -"Run at login" = "Run at login"; +"Run at login" = "Запустить Clover.app при входе в систему"; "Close" = "Close"; // Close the Clover.app /* Installer */ "Clover Installer" = "Clover Installer"; "Select a disk.." = "Select a disk.."; -"Install" = "Install"; -"Uninstall" = "Uninstall"; -"AltBoot" = "Alternative boot"; +"Install" = "Установить"; +"Uninstall" = "Удаление"; +"AltBoot" = "PBR с выбором"; /* Drivers */ -"UEFI mandatory" = "UEFI mandatory"; -"BIOS mandatory" = "BIOS mandatory"; -"UEFI/Other" = "UEFI/Other"; -"BIOS/Other" = "BIOS/Other"; +"UEFI mandatory" = "UEFI, Рекомендуемые драйвера"; +"BIOS mandatory" = "BIOS, Рекомендуемые драйвера"; +"UEFI/Other" = "UEFI/Other, Дополнительные драйвера"; +"BIOS/Other" = "BIOS/Other, Дополнительные драйвера"; "UEFI, but not from this installer" = "UEFI, but not from this installer"; "BIOS, but not from this installer" = "BIOS, but not from this installer"; -"UEFI/FileSystem" = "UEFI, filesystem drivers"; -"BIOS/FileSystem" = "BIOS, filesystem drivers"; +"UEFI/FileSystem" = "UEFI, Драйвера файловых систем"; +"BIOS/FileSystem" = "BIOS, Драйвера файловых систем"; -"UEFI/HID" = "UEFI, Human Interface Devices"; -"BIOS/HID" = "BIOS, Human Interface Devices"; +"UEFI/HID" = "UEFI, Драйвера устройств ввода"; +"BIOS/HID" = "BIOS, Драйвера устройств ввода"; -"UEFI/FileVault2" = "UEFI, FileVault 2 drivers"; -"BIOS/FileVault2" = "BIOS, FileVault 2 drivers"; +"UEFI/FileVault2" = "UEFI, Драйверы для FileVault 2 UEFI-загрузки"; +"BIOS/FileVault2" = "BIOS, Драйверы для FileVault 2 UEFI-загрузки"; -"UEFI/MemoryFix" = "UEFI, memory fix drivers"; +"UEFI/MemoryFix" = "UEFI, Драйвера исправляющие ошибки выделения памяти"; -"ApfsDriverLoader.efi" = "Supports APFS filesystem driver from container for macOS 10.13 and newers"; +"ApfsDriverLoader.efi" = "Поддержка загрузки оригинального драйвера файловой системы APFS из контейнера. Необходим для macOS 10.13 и выше."; -"AppleImageCodec.efi" = "Decode PNG and BMP for FileVault2."; +"AppleImageCodec.efi" = "Декодер изображений в форматах PNG и BMP. Необходим для работы FileVault 2."; -"AppleImageLoader.efi" = "Secure AppleEfiFat binary driver with implementation of AppleLoadImage protocol with EfiBinary signature verification."; +"AppleImageLoader.efi" = "Драйвер, реализующий поддержку протокола AppleLoadImage с верификацией исполняемых бинарных модулей Apple."; -"AppleKeyAggregator.efi" = "Support for boot UI dialog for FileVault2."; +"AppleKeyAggregator.efi" = "Поддержка протокола авторизации пользователя для FileVault 2."; -"AppleKeyFeeder.efi" = "Support for PS/2 keyboard to use with FileVault 2."; +"AppleKeyFeeder.efi" = "Поддержка клавиатур PS/2 для использования с FileVault 2."; -"AppleUISupport.efi" = "Set of protocols for support EfiLoginUi for FileVault."; +"AppleUISupport.efi" = "Поддержка EFI Login UI для FileVault. Функционально заменяет собой драйверы AppleKeyMapAggregator, AppleEvent, AppleUITheme, FirmwareVolume и AppleImageCodec."; -"AppleUITheme.efi" = "Create boot UI Themes support for FileVault2."; +"AppleUITheme.efi" = "Поддержка протокола для отображения фонового изображения при использовании FileVault 2."; -"AptioInputFix.efi" = "Driver to fix input problems on UEFI firmware such as AMI Aptio."; +"AptioInputFix.efi" = "Исправляет ошибки UEFI при работе с устройствами ввода."; -"AptioMemoryFix.efi" = "Preferred driver to fix Memory problems on UEFI firmware such as AMI Aptio. Do not use with other AptioFix together."; +"AptioMemoryFix.efi" = "Исправляет ошибки памяти, имеющиеся в AMI Aptio и некоторых других UEFI. +Не рекомендуется ставить совместно с другими AptioFix."; -"AudioDxe.efi" = "HDA driver to play Startup Sound during Clover boot. -Configure it via Startup sound output from Option menu, including: -Volume and Audio device (for supported IOAudio devices only)."; +"AudioDxe.efi" = "Звуковой драйвер для исполнения гимна при запуске Кловера"; -"FirmwareVolume.efi" = "Create FirmwareVolume with cursor images for FileVault2."; +"FirmwareVolume.efi" = "Поддержка протокола FirmwareVolume для FileVault 2."; -"FSInject.efi" = "Provide injection of kernel extensions from Clover folder."; +"FSInject.efi" = "Поддержка загрузки расширений ядра из папок, расположенных внутри папки EFI."; -"GrubEXFAT.efi" = "ExFAT filesystem driver from GRUB."; +"GrubEXFAT.efi" = "Поддержка файловой системы ExFAT."; -"GrubISO9660.efi" = "ISO 9600 filesystem driver from GRUB."; +"GrubISO9660.efi" = "Поддержка файловой системы ISO 9600."; -"GrubNTFS.efi" = "NTFS filesystem driver from GRUB."; +"GrubNTFS.efi" = "Поддержка файловой системы NTFS."; -"GrubUDF.efi" = "UDF filesystem driver from GRUB."; +"GrubUDF.efi" = "Поддержка файловой системы UDF."; -"SMCHelper.efi" = "Restore SMC keys left in NVRAM by FakeSMC."; +"SMCHelper.efi" = "Восстанавливает значения SMC ключей, выставленных FakeSMC в NVRAM при перезагрузке системы."; -"XhciDxe.efi" = "USB 3.0 driver"; +"XhciDxe.efi" = "Поддержка USB 3.0 для сторонних контроллеров"; -"AppleEvent.uefi" = "Create AppleEvent protocol for FileVault2."; +"AppleEvent.uefi" = "Поддержка протокола AppleEvent для FileVault 2."; -"AppleGraphicsConfig.uefi" = "Create optional AppleGraphicsConfig protocol."; +"AppleGraphicsConfig.uefi" = "Поддержка протокола AppleGraphicsConfig."; -"CsmVideoDxe.efi" = "Video Driver for Clover GUI allowing to choose more resolutions. It is based on CSM module in UEFI BIOS and required CSM will be enabled. -Clover may not started with it and you may have wake problem in system. Use with precautions."; +"CsmVideoDxe.efi" = "Позволяет использовать большие разрешения экрана в графическом интерфейсе Clover-а. +Драйвер основан на модуле CSM в BIOS и требует, чтобы CSM был включен. На некоторых конфигурациях Clover может не запуститься с этим драйвером или система не будет пробуждаться после сна, поэтому используйте с осторожностью."; -"DataHubDxe.efi" = "This is DataHub protocol support mandatory for macOS. -Usually it is already present but sometime it may be missed. In this case you should see warning on screen."; +"DataHubDxe.efi" = "Поддержка протокола DataHub, который строго необходим для запуска macOS. Обычно он присутствует (если нет, на экран будет выведено сообщение)."; -"EmuVariableUefi.UEFI_description" = "Workaround for store NVRAM variables for systems without UEFI hardware. -Mostly UEFI boot uses hardware NVRAM but in some rare cases this driver is needed. Use it only if you have a problem without it"; +"EmuVariableUefi.efi" = "Драйвер для поддержки переменных NVRAM, необходимых macOS. +Современные системы обычно имеют встроенный NVRAM. Используйте драйвер если вы уверены, что встроенный NVRAM отсутствует или не работает. Либо встроенный, либо эмулируемый NVRAM строго необходимы для системы."; -"EnglishDxe.efi" = "Support for UnicodeCollation protocol used by EFI Shell if it missed in UEFI."; +"EnglishDxe.efi" = "Поддержка протокола UnicodeCollation, необходимого для EFI Shell, если он отсутствует в UEFI BIOS."; -"Fat.efi" = "FAT filesystem driver."; +"Fat.efi" = "Поддержка файловой системы FAT32."; -"HashServiceFix.efi" = "Fix Hash support if absent in native UEFI BIOS."; +"HashServiceFix.efi" = "Функционал хеширования для тех UEFI-систем, где он отсутствует"; -"HFSPlus.efi" = "Alternate HFS+ filesystem driver."; +"HFSPlus.efi" = "Поддержка файловой системы HFS+ (альтернативный драйвер)."; -"NvmExpressDxe.efi" = "Driver for support NVM Express devices."; +"NvmExpressDxe.efi" = "Поддержка протоколов NVM Express для твердотельных накопителей."; -"OsxAptioFix3Drv.efi" = "Alternate driver (v3) to fix Memory problems on UEFI firmware. Do not use with other AptioFix together."; +"OsxAptioFix3Drv.efi" = "Альтернативный драйвер (3) коррекции ошибок памяти UEFI. +Исправляет работу с NVRAM."; -"OsxAptioFixDrv.efi" = "Old Driver to fix Memory problems on UEFI firmware such as AMI Aptio. Do not use with other AptioFix together."; +"OsxAptioFixDrv.efi" = "Старый вариант коррекции ошибок памяти для AMI Aptio и некоторымх других UEFI. +Не использовать совместно с другими AptioFix. Не поддерживает работу встроенного NVRAM."; -"OsxFatBinaryDrv.efi" = "Driver for support FAT Binary executables for OS X 10.9 and older."; +"OsxFatBinaryDrv.efi" = "Поддержка формата FAT Binary для систем 10.9 и более ранних."; -"OsxLowMemFixDrv.efi" = "Simplified variant of OsxAptioFixDrv. Do not use with other AptioFix together."; +"OsxLowMemFixDrv.efi" = "Упрощенный вариант драйвера OsxAptioFix. +Не использовать совместно с другими AptioFix."; -"PartitionDxe.efi" = "Driver to support non-usual partition maps such as: hybrid GPT/MBR or Apple Partition Map."; +"PartitionDxe.efi" = "Поддержка необычных схем разделов: гибрид GPT/MBR, Apple Partition Map и др."; -"Ps2MouseDxe.efi" = "PS/2 mouse driver"; +"Ps2MouseDxe.efi" = "Драйвер для мыши PS/2."; -"UsbKbDxe.efi" = "Keyboard driver for boot UI support."; +"UsbKbDxe.efi" = "Драйвер клавиатуры USB поддержкой протокла шифрования, нужен для FileVault2, если у вас USB клавиатура."; -"UsbMouseDxe.efi" = "USB mouse driver"; +"UsbMouseDxe.efi" = "Драйвер для мыши USB."; -"VBoxExt2.efi" = "EXT2/3 filesystem driver from VirtualBox."; +"VBoxExt2.efi" = "Поддержка файловых систем EXT2 и EXT3 (Linux)."; -"VBoxExt4.efi" = "EXT4 filesystem driver from VirtualBox."; +"VBoxExt4.efi" = "Поддержка файловой системы EXT4 (Linux)."; -"VBoxHfs.efi" = "HFS+ filesystem driver."; +"VBoxHfs.efi" = "Поддержка файловой системы HFS+."; -"VBoxIso9600.efi" = "ISO 9600 filesystem driver."; +"VBoxIso9600.efi" = "Поддержка файловой системы ISO 9600 (CD-ROM).";