What is the benefit?
Depending on the circumstances VirtualSMC can bring better compatibility with present and future macOS releases providing broader SMC feature support and allowing more flexible SMC key emulation like MMIO, events (like in SMCLightSensor), permission support, etc. On older Macs it can be used to upgrade SMC generation with more features.
What are the requirements?
macOS 10.8.5 or newer. Compatible Lilu is required for full functionality, basic functionality will be available even on beta macOS versions or with
-liluoff boot-arg. Bootloader support is recommended for boot.efi compatibility when FileVault 2 is enabled. Legacy
VirtualSMC.efi module can be used for incompatible bootloaders. SMCHelper-64.efi is not compatible with VirtualSMC.efi and must be removed.
How can I debug issues?
Using DEBUG kexts and the usual boot-args to enable debug information in relevant kexts. Other than
-vsmcdbg and generic boot-args like
io=0xff you may be interested in AppleSMC debug support (
smc=0xff) or AppleSmartBatteryManager debug support (
batman=0xff). On 10.13 or newer you may have to patch the kernel to be able to view the panic trace without the subsequent kext list. Good luck.
Why does VirtualSMC show in every page fault kernel panic?
In most cases VirtualSMC is unrelated to any kernel panic you experience. The reason it is present in stacktrace is becauase VirtualSMC wraps kernel_trap to emulate SMC device.
What is special about sensors?
Sensor kexts provide extra monitoring functionality like temperature, voltage, or extra functionality in dedicated SMC keys. The list of known SMC keys and sensors could be found in Docs directory. You are welcome to implement your own sensor kexts using a dedicated API, but check the basic manual first.
Why does sensor X not show the information in Y?
Make sure, that the information you are looking for is actually implemented in sensor X by checking the SMC key values (run
smcread -s). If it is not, then make sure that this information is present on Apple hardware and consider making a pull-request. If it is not, then make sure that the software you check the information with does try to read the relevant key. Be aware, that some software like iStat Menus implement special sensor profiles based on Mac platform, and may not read all the sensors available.
Is authenticated restart supported?
Authenticated restart, normally invoked by
sudo fdesetup authrestart, see
man fdesetup, is supported when bootloader support or VirtualSMC.efi are present. However, it is insecure just as any software implementation is. If you care about privacy and security, you should disable it by passing
The VirtualSMC implementation stores the encryption key in nvram and may encrypt it with a temporary key if higher RTC memory bank is available. Other than that, AptioMemoryFix will try to prevent reads of the encryption key after EXIT_BOOT_SERVICES, if installed.
What are the files in Docs?
SMCBasics.txtcontains generic information about SMC
SMCKeys.txtcontains some upated SMC key descriptions (complements html docs)
SMCKeysMacPro.htmlcontains SMC key descriptions for old MacPro
libSMC.dylibSMC sensor key descriptions
SMCDumpscontains SMC key dumps created by running
smcread -s, please add more!
SMCDatabasecontains SMC firmware dumps created with
smcreadfrom Apple updates
SMCTypescontains summarised SMC key lists across SMC generations based on
iStat.txtcontains iStat Menus key profiles (FauxMac is a profile when FakeSMC service is detected)
MacModels.txtcontains board-id <--> mac-model summary with SMC firmware dump statuses
SensorInfo.mdcontains basic sensor how-to
What are the tools all about?
rtcreadallows to access RTC/CMOS memory and contains relevant AppleRTC information
smcreadallows to access SMC keys, dump SMC firmwares and
smc-fuzzeris a fork of an old
smctool with some features missing in
libaistatallows to dump SMC key profiles from iStat Menus when used with
What are the sensors for?
SMCLightSensorimplements an example of illumination sensor handling with a new SMC event API (requires
SMCBatteryManagerimplements a complete emulation layer of AppleSmartBattery of SMC and SMBus protocols
SMCProcessorimplements temperature monitoring for Penryn CPUs or newer
SMCSuperIOimplements support fans reading