Apple - Can I lower the minimum display brightness? How?
My recommendation is a hitherto-little known gem, called ScreenShade.
There are several decent Mac software screen dimmers out there, of which I've found the ones whose dimming method is to apply an increasingly opaque black 'overlay' over the screen to be the most superior in appearance (providing much higher quality 'low blacks' than Shades which does its dimming via color profile/gamma level tweaking) and in doing so, also playing nice with famous color temperature regulating app, f.lux.
The best examples in this group, are Shady (whose development has been abandoned by its dev and has a no better rogue clone in the Mac App Store), ScreenDimmer, Screen Shade, and Work at Night. (N.b. these last two, confusingly appear to be clones, by the same dev on the Mac App Store.)
But if you're looking to more fully emulate the Mac's in-built hardware dimming in software, you're looking for an app that can have the dimming triggered via hotkeys, system-wide.
Annoyingly, none of the just-listed quality 'overlay method' apps actually provide keyboard shortcuts (at present).
So for all the above criteria AND having keyboard shortcuts, the only one I have found is the humble Softonic-hosted ScreenShade, est. 2008!
It's working on Yosemite 10.10 no problem, and has a decent little preferences window including even customisable support for multiple/secondary monitors! Its only drawback, is that the hotkeys' granularity in dimming up and down is a little less than one would ideally want (i.e. the jumps are fairly large), but this is a small concession given it at least provides hotkeys, and it does go down to very low levels (with fairly good clarity), all the same.
So until contenders like ScreenDimmer, Shady, or Screen Shade / Work at Night do anything about it, if you want something with hotkeys and simultaneous operation with f.lux (and to do it in software), this looks to be only app that can do it.
Another application for decreasing brightness is Shady. But like Shades, it just draws an overlay over the screen and doesn't actually turn down the backlight.
LCDs require a similar amount of energy to display bright and dark pixels, and some LCDs actually require slightly more energy to display dark pixels, so Shady and Shades might even increase energy use.
There is a small Objective-C utility (https://github.com/nriley/brightness/) for changing the brightness of displays, but it cannot set the brightess below the normal minimum value either.
Discovered a better solution by modifying system kexts that doesn't rely on 3rd party apps and actually lowers the actual lcd brightness levels.
DISCLAIMER: Modifying kexts has risks and can mess up your mac. I am not to be held responsible if your your OS breaks.
I used Xcode to change the data for my lcd panel in AppleBacklight.kext/Contents/Info.plist
.
In my MacBook Pro 13" 2011, the panel data is in IOKitPersonalities > AppleIntelPanelA > ApplePanels
. There is a string of hexadecimal values for each panel ID, e.g. my panel is 9cc5, which shows up as F10T9cc5 and the values are
<00110000 00210029 00340042 00530069 008700ac 00d30103 013e0187 01e20252 02de038f>
. (Your panel ID can be found by going to System Preferences > Displays > Color > Open Profile > mmod
).
The lowest brightness starts from the second pair of hex values (0021). In this example the second step is 0029 then 0034 and so forth, up to the max value of 0x38 (038f).
You can change that string to get a wider range of brightness, e.g.:
<00110000 00100015 00250034 00490060 008000ac 00d30103 013e0187 01e20252 02de0710>
After setting the values fix permissions and rebuild cache (you can use terminal or Disk Utility to Fix permissions and DCPIManager to rebuild cache).
Make sure to allow OSX to load the modified (unsigned) kext by entering this in Terminal:
sudo nvram boot-args=kext-dev-mode=1
Note: the 0710 at the end of the data is the maximum brightness allowed by my HD3000, meaning my color control can go much darker and brighter than stock. I also want to point out that the values are given above are not linear at all, I'm too lazy to work on the steps right now. But the idea is to get your desired minimum and maximum values and enter the proper values in between if you want a smooth transition.