Total Eclipse of the Mac: Lunar Controls Third-Party Displays
Not long after I received my M1-based Mac mini, I was working late in the night and decided to decrease the brightness of my Dell monitor. I reached up and pressed the F1 key on my Magic Keyboard as I had done for as long as I could remember. Nothing happened. I tried again but to no avail.
For the past several years, I’ve used a series of MacBooks—a 12-inch MacBook, a MacBook Air, and a 16-inch MacBook Pro. This was my first time using a Mac mini with an external monitor as my primary computer. I assumed I’d be able to control the brightness on my monitor using the standard keys on a Mac keyboard or the brightness slider in System Preferences > Displays.
I was wrong. It turns out that Macs can’t necessarily control the brightness on external displays with built-in options. Of course, that’s not a problem with Apple monitors like the older Thunderbolt Display, today’s insanely expensive Pro Display XDR, or the Apple-approved LG UltraFine monitors.
For reasons I don’t understand, macOS lacks built-in support for these settings when using a third-party display apart from the few models mentioned above. However, owners of Intel-based Macs can use various command-line and graphical tools for this purpose, but none seemed to work on my M1-based Mac mini. I started digging deeper and realized I wasn’t alone: each of these tools had someone commenting that it did not work with M1-based Macs and it was not a problem that Rosetta could solve.
The reason seems to be that M1-based Macs lack support for DDC or Display Data Channel, a standard set of control protocols that monitors have used for many years. Every tool that I could find needed DDC support, which is why none worked on M1-based Macs.
Obviously, I could use my Dell monitor’s buttons, like some kind of animal, but as everyone knows: they’re terrible. My monitor has four buttons along the bottom, but they don’t adjust the brightness or contrast. That would be too easy. To control those settings, I have to navigate the monitor’s onscreen menu hierarchy, which requires pressing one of the buttons, using another button to go up or down to the right sub-menu, pushing a third button to select brightness, and going back to a previous button to adjust the brightness up or down. It’s slow, it’s clunky, and I always press the wrong buttons and end up feeling like an idiot. Eventually, I found an app that could control brightness and contrast directly from my M1-based Mac mini.
Developed by Alin Panaitiu, Lunar had a steady stream of development, culminating in its official release at the end of May 2021. Its website showed a bevy of options, including a wide range of customizable keyboard shortcuts. Even cooler, it could control the brightness automatically based on your location and sync the brightness of an external monitor with a MacBook’s built-in monitor. Most importantly, it just worked, and it worked reliably.
Back then, Lunar made use of an impressive hack for those of us who wanted to use an M1-based Mac. For such Macs, Lunar’s best hardware-based solution relied on a Raspberry Pi to relay commands from a Mac to the external HDMI monitor. Since the Raspberry Pi supported DDC, this was almost as good as a native solution… if you had a Raspberry Pi. I did, and I set up this “network control” approach, which was as simple as entering my Raspberry Pi username and password, and then selecting a menu option from Lunar. (Lunar also has a software-only solution that relied on adjusting gamma values, but that conflicted with utilities like f.lux that also use gamma, could only lower—not increase—the brightness, and lacked other monitor controls for volume and input.)
But Panaitiu didn’t stop there. With some help from other developers who contributed to the project, he recently added native DDC support for M1-based Macs to Lunar 4.5.1, so there’s no need for a Raspberry Pi or a software-only solution. You may still run into issues due to bugs in monitor firmware, but Lunar’s FAQ explains many of those issues. (And if you’re really interested in the backstory and technical details, see Panaitiu’s blog post about how getting an M1-based Mac caused him to quit his job and focus on Lunar.)
Now I can control my Dell monitor directly via my M1-based Mac mini, complete with the onscreen display when settings change. It does require that I use one of the Thunderbolt ports rather than the Mac mini’s HDMI port (the combination of that port and the Mac mini’s video driver just won’t send DDC messages, for some reason), but I can use the standard macOS keys for native brightness and contrast changes, or use Lunar’s preferences to set my own shortcuts.
And you can too, as long as you’re running macOS 10.15 Catalina or later. Lunar is free, but some of its fancier features require a $23 Pro license. I was only too happy to support the project. Sure, in a perfect world, we’d never need third-party software to add support for protocols Apple should build in, but in the here and now, $23 seemed like a small price to pay to support an active and creative developer. Plus, TidBITS memberscan save 30%, dropping the price to $16.10 and making it an even easier decision.