Update

OLED brightness control is officially supported in Linux starting with kernel version 5.12.
Click read more to see a list of distributions based on version 5.12 or newer.

OLED screens are relatively new to laptops. In 2019, Samsung introduced its 15” 4K AMOLED display which was adopted by many laptop manufacturers, mostly for the laptops marketed towards content creators. Some of these laptops are the Asus Zenbook Pro Duo, the Dell XPS 15, the Gigabyte Aero 15 OLED, and the Razer Blade 15 Studio Edition. A few older laptops experimented with OLED displays as well such as the Galaxy Tab Pro S and the Lenovo ThinkPad X1 Yoga, however, they were not as popular as the more recent options.

Why doesn’t traditional control work?

The major characteristic of OLED screens is that the OLED pixels are self-emissive, unlike LCD screens which require a backlight. As a result, the brightness settings, which typically control the backlight of the LCD, do not work with OLED.

Even though Linux laptops such as the System76 Adder WS now feature OLED displays, the brightness functionality has not been implemented in many Linux distros yet.

What is the solution?

A workaround for this would be to darken the colors that appear on the screen. This would produce the same effect as decreasing the brightness since, as mentioned, the pixels are self-emissive.

One way to do this is to divide all the pixel values by a certain number using xrandr. Although this results in a darker image, the overall image quality would deteriorate significantly.

The preferred way of achieving OLED laptop screen brightness control is using ICC color profiles. The open-source icc-brightness tool helps generate these color profiles based on the selected brightness level. Enter the following commands in the terminal to install the tool:

sudo apt install -y liblcms2-dev
git clone https://github.com/udifuchs/icc-brightness.git
cd icc-brightness
make

Now you can run the tool using:

./icc-brightness

Which brings up the following help:

Control OLED display brightness by applying ICC color profiles.
icc-brightness brightness max-brightness - set brightness manually
icc-brightness apply - apply brightness from system setting
icc-brightness watch - continuously update to system setting
icc-brightness clean - remove all profiles generated by us

In order to make the watch command run automatically as you log in to the GNOME session, enter the following:

sudo make install

After you log out and log back in, the brightness controls will work. Beware that setting the brightness all the way down will cause the screen to go completely black.

Update

OLED brightness control is officially supported in Linux starting with kernel version 5.12.
Click read more to see a list of distributions based on version 5.12 or newer.