Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Access LMU light sensor on Mac. Also includes the Emacs plugin I use for automatically updating my theme according to ambient light.
;; Light.el
;; Uses the light program to automatically switch themes at certain
;; levels of light
(setq direct-sun 44000000)
(setq light-theme 'solarized-light)
(setq dark-theme 'laravel)
(defun light-level ()
"Access the level of light detected by the LMU sensor on Macbook Pros"
(string-to-number (shell-command-to-string "~/.emacs.d/src/light/light") )
(defun adjust-theme-to-light ()
"Picks a theme according to the level of ambient light in the room"
(if (> (light-level) direct-sun)
(load-theme light-theme t)
(load-theme dark-theme t)
* LightSensor
* Extracted from
#include <stdio.h>
#include <IOKit/IOKitLib.h>
#import <Foundation/Foundation.h>
int getLightLevel()
uint32_t outputs = 2;
uint64_t values[outputs];
io_connect_t port = 0;
// Get the light sensor service
io_service_t lightSensor = IOServiceGetMatchingService(kIOMasterPortDefault,
// Connect the service at the given port
IOServiceOpen(lightSensor, mach_task_self(), 0, &port);
// Access it, assigning the levels the sensors measure to `values`
IOConnectCallMethod(port, 0, nil, 0, nil, 0, values, &outputs, nil, 0);
// Disconnects our service
// Return the first value (I believe this is the iSight camera)
return (int)values[0];
int main (int argc, char *argv[])
fprintf(stdout, "%i", getLightLevel() );
return 0;
gcc light.m -std=c99 -framework Foundation -framework IOKit -o light
rm -f light
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment