Works for Thinkpad X1 Yoga 2G (20JDCTO1WW) (and most probably others) with OLED display
First install inotify-tools. Then create a script around inotify that will be launched upon each boot or through autostart.
sudo apt install inotify-tools
cat <<-EO1 | sudo tee /usr/local/bin/xbacklightmon.sh#!/bin/bash
# https://wiki.archlinux.org/index.php/backlight#sysfs_modified_but_no_brightness_change
# https://wiki.archlinux.org/index.php/Alienware_13#OLED_screen_brightness
# https://gist.github.com/lalten/ce5ac0b1cc4b24a24cc44926255b871d
# apt install inotify-tools
path=/sys/class/backlight/intel_backlight
luminance() {
read -r level < "$path"/actual_brightness
new_brightness="$(bc -l <<< "scale = 2; $level / $max")"
LC_NUMERIC="en_US.UTF-8" printf '%f\n' $new_brightness
}
read -r max < "$path"/max_brightness
xrandr --output eDP-1 --brightness "$(luminance)"
inotifywait -me modify --format '' "$path"/actual_brightness | while read; do
xrandr --output eDP-1 --brightness "$(luminance)"
done
EO1
sudo chmod +x /usr/local/bin/xbacklightmon.sh
cat <<-EO2 >~/.config/autostart/xbacklightmon.desktop
[Desktop Entry]
Type=Application
Exec=/usr/local/bin/xbacklightmon.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name=xbacklightmon
EO2
Note that this doesn't work well together with Gnome's Night Light.
Here's a function that reads the current gamma settings from xrandr, so they can be reapplied when setting brightness:
Unfortunately, Night Light seems to do more than just adjust gamma so reapplying these values will look really bad.