Brightness is not working

Hi,

Recently I installed hyperland on my laptop.

I have a OLED panel. When it boots up the screen brightness is on the full and when I decrease the brightness it is not working I had tried all the way brightnessctl, changed kernel parameter but didn’t worked.

Please help

I’m on arch, and have an oled monitor, but had never tried adjusting brightness…
After reading this, I tried adjusting my monitor brightness and have the same issue…
I’ll look into it and if I solve it I’ll post back here.

If you happen to sort it out before I post back, would you mind giving an update on what you did?

Ok, after some rabbithole digging, i have found that brightnessctl ddoesn’t support external monitors, without a kernel module for loading ddc/ci protocols, to load the backlight as a system device.

I’m not sure if your issue will be the same, as you are on a laptop, but depending on the interface you’re laptop manufacturer decided on, it may help?

People seemed to have varying degrees of success installing the ddcci-driver-linux-dkmsAUR package.

I noticed issues in the comments of the AUR package, regarding it being out of date, and not working on modern kernels, with the resolution being to use the ddcci-driver-linux-dkms-gitAUR package instead.

I don’t personally like running stuff from the AUR if i can help it, especially git versions (not pinned to a release), so i kept hunting.

After trying a few methods to get it working, i found the ddcutil package, which worked fine for me.

Here is the process i followed on Arch Linux. (If you are on a different distro, im sure it should be the same, except for possibly a slightly differently named package, and obviously a different package manager)

Install brightness support for external monitor

Required packages

  • ddcutil
  • read-edid (optional but allows better hardware detection)

Install (for arch linux)

sudo pacman -S ddcutil read-edid

Note: Needed a reboot to load the i2c-dev kernel module (automatically added by ddcutil)

Detect monitor id

ddcutil detect

output looks like:

Display 1 #<-- This is the ID for your monitor
   I2C bus:  /dev/i2c-4
   DRM_connector:           card1-DP-1
   EDID synopsis:
      Mfg id:               GSM - LG Electronics
      Model:                LG ULTRAGEAR+
      Product code:         23676  (0x5c7c)
      Serial number:        xxxxxxxxxxxx
      Binary serial number: 44407 (0x0000ad77)
      Manufacture year:     2024,  Week: 3
   VCP version:         2.1

Get current monitor brightness

# ddcutil <operation> <featurecode 10 = brightness> --display <diplayId>
ddcutil getvcp 10 --display 1

Outputs:

VCP code 0x10 (Brightness                    ): current value =   100, max value =   100

Set current monitor brightness

Set to 80% brightness

# ddcutil <operation> <featurecode 10 = brightness> <new brightness value> --display <diplayId>
ddcutil setvcp 10 80 --display 1

Set back to 100% brightness

# ddcutil <operation> <featurecode 10 = brightness> <new brightness value> --display <diplayId>
ddcutil setvcp 10 100 --display 1

Decrease brightness by 10%

# ddcutil <operation> <featurecode 10 = brightness> <new brightness value> --display <diplayId>
ddcutil setvcp 10 - 10 --display 1

Increase brightness by 10%

# ddcutil <operation> <featurecode 10 = brightness> <new brightness value> --display <diplayId>
ddcutil setvcp 10 + 10 --display 1