Show HN: Ambient light sensor control of keyboard and screen brightness in Linux
26 points - 11/02/2025
I have always wanted cool features in Linux because I use it day to day as my OS. I have always wanted to implement this feature and do it properly: one that automatically adjusts keyboard and LCD backlights using data from the Ambient Light Sensor.
I enjoy low-level programming a lot. I delved into writing this program in C. It came out well and worked seamlessly on my device. Currently, it only works for keyboard lights. I designed it in a way that the support for LCD will come in seamlessly in the future.
But, in the real world, people have different kinds of devices. And I made sure to follow the iio implementation on the kernel through sysfs. I would like feedback. :)
SourceFWIW, iio-sensor-proxy gives you a user-accessible dbus API for ambient light sensors. GNOME has had a feature to auto-adjust screen brightness based on it for ages (though their implementation leave much to be desired and hasn't changed despite of several attempts to rework it over the years).
$ monitor-sensor
Waiting for iio-sensor-proxy to appear
+++ iio-sensor-proxy appeared
=== Has accelerometer (orientation: normal)
=== Has ambient light sensor (value: 56.200000, unit: lux)
=== Has proximity sensor (near: 0)
Light changed: 56.200000 (lux)
Light changed: 55.100000 (lux)
Light changed: 58.500000 (lux)
Light changed: 48.800000 (lux)
What strategy does this apply? For the display I assume it should increases the brightness as the ambient light rises. But for keybord light it's the opposite: I'd want it off in a lit environment and on in a dark one.